Date: Thu, 14 Dec 2006 01:06:21 +0000 From: Chris <chrcoluk@gmail.com> To: "Andre Oppermann" <andre@freebsd.org> Cc: freebsd-net@freebsd.org, freebsd-current@freebsd.org Subject: Re: Automatic TCP send and receive socket buffer sizing Message-ID: <3aaaa3a0612131706w5ae75edcvadd7958274a1e2e2@mail.gmail.com> In-Reply-To: <457F2D82.6000905@freebsd.org> References: <457F2D82.6000905@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 12/12/06, Andre Oppermann <andre@freebsd.org> wrote: > This is a patch adding automatic TCP send and receive socket buffer sizing. > 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. > > The automatic send buffer sizing patch is currently running on one half of > the FTP.FreeBSD.ORG cluster w/o any problems so far. Against this machine > with the automatic receive buffer sizing patch I can download at 5.7MBytes > per second. Without patch it maxed out at 1.6MBytes per second as the delay > bandwidth product became equal to the static socket buffer size without hitting > the limits of the physical link between the machines. My test machine is about > 35ms from that FTP.FreeBSD.ORG and connected through a moderately loaded 100Mbit > Internet link. > > New sysctl's 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) > > The patch is available here (it may apply with some fuzz): > > http://people.freebsd.org/~andre/tcp_auto_buf-20061212.diff > > Any tests and test reports are very welcome. > > -- > Andre Hi does this patch work on 6.x? I used the send patch on 6.x and works great please make a 6.x patch thank you and I will happily test. Chris
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3aaaa3a0612131706w5ae75edcvadd7958274a1e2e2>