Subject: Re: TCP socket buffers automatic sizing
To: None <tech-net@NetBSD.org>
From: Mindaugas R. <rmind@NetBSD.org>
List: tech-net
Date: 07/21/2007 17:20:58
Greg Troxel <gdt@ir.bbn.com> wrote:
> Is there an RFC about this, or an implementation elsewhere?

As I wrote in the primary email - this is a port from FreeBSD. One could take
a look at extensions written in RFC1323, but I do not know a concrete RFC
about this.

> FreeBSD had a patch in the fall - I don't know if it's in now:
> 
>   http://www.freebsd.org/news/status/report-2006-10-2006-12.html#Automatic-TCP-Send-and-Receive-Socket-Buffer-Sizing

They have it in -current about 5 months, enabled by default.

> Have you looked at connections with tcpdump2xplot and xplot (both in
> pkgsrc/graphics/xplot)?  It's very illuminating about TCP behavior.

No, that is why I would be happy if someone would do some analysis of TCP
behaviour :)

>   @@ -4015,8 +4088,7 @@ syn_cache_add(struct sockaddr *src, stru
>                   sc->sc_requested_s_scale = tb.requested_s_scale;
>                   sc->sc_request_r_scale = 0;
>                   while (sc->sc_request_r_scale < TCP_MAX_WINSHIFT &&
>   -                   TCP_MAXWIN << sc->sc_request_r_scale <
>   -                   so->so_rcv.sb_hiwat)
>   +                   (0x1 << sc->sc_request_r_scale) < tcp_minmss)
>                           sc->sc_request_r_scale++;
>           } else {
>                   sc->sc_requested_s_scale = 15;
> 
> I didn't understand this hunk.

The patch is updated. Please take a look at this place, there is a comment
from FreeBSD.

> <...> But, we have to advertise a large window to get the sender to open
> up, even if our application reads the data promptly.
> <...>
> 
> How does the receive window get set?  Should it be the max that autosize
> will go to?  If it's not large, how does this help?

I am not sure what do you mean. The window scaling is done by stepping, as
written in the description of criteria, and algorithm.

> Shouldn't SB_AUTOSIZE only be enabled on sockets if the sysctl is on?
I do not see the necessity, right now.

> Shouldn't there be a socket option?  Does expliciting setting a buffer
> size clear SB_AUTOSIZE?
Currently, autosizing is a global setting, not per-socket. If we would make
it per-socket - both your points are reasonable.

> Probably this should default to off at first (sysctl intial setting)
> until more people have run it, which will happen once it's in current -
> sysctl -w is easier than patch/rebuild.  I'd turn it on, but haven't
> done a reboot cycle to try it.

Yes, I just have not mentioned that I would commit this with default off.

-- 
Best regards,
Mindaugas
www.NetBSD.org