Andi Kleen wrote:
At issue is really application capture and customer adoption. There are
tons of apps and lots of engineers that know socket operations and
write/writev. Asking all ISVs to recode for linux would leave them with
two separate APIs to deal with. They would have send/sendto or
write/writev on Solaris, HPUX and whatever else, and linux would have
sendfile.
aio_write / lio_listio exists on Solaris and HP/UX too.
(and even Windows; their completion port interfaces are very similar)
Right.. although some might say that aio_write is used a lot less often
than write or send.
It's hard to convince thousands of application writers to revisit stuff
like this. It's a lot easier to bring the hardware feature in to the
APIs that people just commonly use.
We really want to do this in such a way that it doesn't create a huge
footprint (and we think we can) and we want to make sure we don't impact
systems that can't take advantage of fast TLB updates.
So how do you avoid the two TLB flush IPIs to all CPUs that have the current mm
mapped ?
-Andi
I could speculate about how we might avoid that, or I could speculate
that even with those operations, it would still be faster, but I'd
rather just demonstrate it with a patch.
Don't get me wrong, we would certainly drop any notions of this if we
found that it was slower and I will be glad to post any results. The
goal is to take advantage of the hardware to make things faster.
Going back to your example above, don't solaris and hpux also do COW for
write and send? (I don't have their sources) If so, why would they do
it if it's slower?
Steve
--
Steve Modica
work: 651-683-3224
mobile: 651-261-3201
Manager - Networking Drivers Group
"Give a man a fish, and he will eat for a day, hit him with a fish and
he leaves you alone" - me
|