cvs commit: src/sys/netinet tcp_input.c tcp_output.c
tcp_usrreq.c tcp_var.h
Robert Watson
rwatson at FreeBSD.org
Wed Feb 7 21:14:51 UTC 2007
On Thu, 1 Feb 2007, Andre Oppermann wrote:
> andre 2007-02-01 18:32:14 UTC
>
> FreeBSD src repository
>
> Modified files:
> sys/netinet tcp_input.c tcp_output.c tcp_usrreq.c
> tcp_var.h
> Log:
> Auto sizing TCP socket buffers.
>
> Normally the socket buffers are static (either derived from global
> defaults or set with setsockopt) and do not adapt to real network
> conditions. Two things happen: a) your socket buffers are too small
> and you can't reach the full potential of the network between both
> hosts; b) your socket buffers are too big and you waste a lot of
> kernel memory for data just sitting around.
>
> With automatic TCP send and receive socket buffers we can start with a
> small buffer and quickly grow it in parallel with the TCP congestion
> window to match real network conditions.
>
> FreeBSD has a default 32K send socket buffer. This supports a maximal
> transfer rate of only slightly more than 2Mbit/s on a 100ms RTT
> trans-continental link. Or at 200ms just above 1Mbit/s. With TCP send
> buffer auto scaling and the default values below it supports 20Mbit/s
> at 100ms and 10Mbit/s at 200ms. That's an improvement of factor 10, or
> 1000%. For the receive side it looks slightly better with a default of
> 64K buffer size.
Following a rather busy last two months, I've recently gotten up and running
with my performance testing environment at the CL. Running simple TCP
benchmarks using netperf, I see a marginal performance improvement on the send
side, but on the receive side I see performance go from about 1.4gbps to
1.2gbps (15% performance loss). Do you have any suggestions about how I could
further diagnose what is going on? This is with the test Neterion driver and
a 1500 MTU; this driver does not currently have TSO support.
Thanks,
Robert N M Watson
Computer Laboratory
University of Cambridge
>
> New sysctls are:
> net.inet.tcp.sendbuf_auto=1 (enabled)
> net.inet.tcp.sendbuf_inc=8192 (8K, step size)
> net.inet.tcp.sendbuf_max=262144 (256K, growth limit)
> net.inet.tcp.recvbuf_auto=1 (enabled)
> net.inet.tcp.recvbuf_inc=16384 (16K, step size)
> net.inet.tcp.recvbuf_max=262144 (256K, growth limit)
>
> Tested by: many (on HEAD and RELENG_6)
> Approved by: re
> MFC after: 1 month
>
> Revision Changes Path
> 1.312 +81 -3 src/sys/netinet/tcp_input.c
> 1.122 +70 -4 src/sys/netinet/tcp_output.c
> 1.144 +2 -0 src/sys/netinet/tcp_usrreq.c
> 1.138 +2 -0 src/sys/netinet/tcp_var.h
>
More information about the cvs-src
mailing list