Re: Much improved sendfile(2) kernel implementation

From: Andre Oppermann <andre_at_freebsd.org>
Date: Sat, 23 Sep 2006 12:12:55 +0200
Robert Watson wrote:
> 
> On Sat, 23 Sep 2006, Andre Oppermann wrote:
> 
>>> Without patch:
>>>  87380 393216 393216    10.00      2163.08   100.00   19.35    3.787 
>>> 1.466 Without patch + TSO:
>>>  87380 393216 393216    10.00      4367.18   71.54    42.07    1.342 
>>> 1.578 With patch:
>>>  87380 393216 393216    10.01      1882.73   86.15    18.43    3.749 
>>> 1.604 With patch + TSO:
>>>  87380 393216 393216    10.00      6961.08   47.69    60.11    0.561 
>>> 1.415
> 
> The impact of TSO is clearly dramatic, especially when combined with the 
> patch, but I'm a bit concerned by the drop in performance in the patched 
> non-TSO case.  For network cards which will always have TSO enabled, 
> this isn't an issue, but do we see a similar affect for drivers without 
> TSO?  What can we put this drop down to?

If you look at my GigE numbers there is no drop for the new-sendfile w/o
TSO case.  In this 10Gig test the drop is really and artifact of how the
whole setup and the way netperf makes use of the sendfile call.  Internally
new-sendfile waits until 50% of the socket buffer are free to be bulk
filled again.  This value can be modified by setting a low watermark on
the send socket buffer.  Netperf does buffer sized sendfile invocations
and this is very timing critical with 10G.  Which gives this picture:
call sendfile(380K) -> fill socket buffer -> wait -> fill rest -> return ->
call sendfile(380K) ...  Not to mention all the additional work tcp_output()
has to do w/o TSO.  Especially with large buffers it has to loop over the
mbuf chain for each packet to find out where to start copying.  And besides
there is no point in having a non-TSO capable interface at above 1-2Gbit.
Not even Linux can keep up there.

-- 
Andre
Received on Sat Sep 23 2006 - 08:12:59 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:00 UTC