Automatic TCP send socker buffer sizing

Chris chrcoluk at gmail.com
Mon Nov 20 20:35:18 PST 2006


On 17/11/06, Mark Atkinson <atkin901 at yahoo.com> wrote:
> Andre Oppermann wrote:
>
> > This is a patch adding automatic TCP send 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 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%.
> >
> > New sysctl's are:
> >
> >   net.inet.tcp.sndbuf_auto=1  (enabled)
> >   net.inet.tcp.sndbuf_inc=8192        (8K, step size)
> >   net.inet.tcp.sndbuf_max=262144      (256K, growth limit)
> >
> > The patch is available here:
> >
> >   http://people.freebsd.org/~andre/tcp_auto_sndbuf-20061116.diff
> >
> > Any testers, especially with busy FTP servers, are very welcome.
>
> Did some minimal testing and it appears to apply cleanly and log:
>
> ov 17 11:15:27 ftp kernel: tcp_output: inc sockbuf, old 33304, new 41496,
> sb_cc 31776, snd_wnd 40544, sendwnd 20272
> Nov 17 11:15:27 ftp kernel: tcp_output: inc sockbuf, old 41496, new 49688,
> sb_cc 38232, snd_wnd 46336, sendwnd 27512
> Nov 17 11:15:27 ftp kernel: tcp_output: inc sockbuf, old 49688, new 57880,
> sb_cc 46960, snd_wnd 63712, sendwnd 40544
> Nov 17 11:15:27 ftp kernel: tcp_output: inc sockbuf, old 57880, new 66072,
> sb_cc 55568, snd_wnd 63712, sendwnd 60816
> Nov 17 11:15:27 ftp kernel: tcp_output: inc sockbuf, old 66072, new 74264,
> sb_cc 65168, snd_wnd 63712, sendwnd 63712
> Nov 17 11:15:27 ftp kernel: tcp_output: inc sockbuf, old 74264, new 82456,
> sb_cc 65168, snd_wnd 63712, sendwnd 63712
>
> --
> Mark Atkinson
> atkin901 at yahoo.com
> (!wired)?(coffee++):(wired);
>
> _______________________________________________
> freebsd-current at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
>

I have a ftp box that also needs large connections for an ircd so this
patch will prove very useful since it will allow small buffers for the
ircd connections and large for the ftp transfers, I also look forward
to the recieve side, I noticed linux already has this feature so this
is great this is been done.  If you can provide me instructions how to
patch I will happily test.

thanks

Chris


More information about the freebsd-net mailing list