IPv6 window scaling factor always 1 on initial SYN
sthaug at nethelp.no
sthaug at nethelp.no
Mon Apr 6 03:20:02 PDT 2009
> Ok, both versions had: < so->so_rcv.sb_hiwat)
>
> http://svn.freebsd.org/viewvc/base?view=revision&revision=166403
>
> changed it for IPv4 the first time,
>
> http://svn.freebsd.org/viewvc/base?view=revision&revision=172795
>
> changed it a second time for IPv4.
>
> Noone changed the IPv6 version.
>
> The syncache already seems to do it for both v4/v6 (common code).
>
> Can you try changing it to < sb_max) for IPv6 as well and see if
> things work (better) for you?
I changed it, and that worked like a dream. Now I get basically the
same throughput with IPv4 and IPv6. There are of course still issues
like lots of IPv6 tunnels that add extra latency - but that's not the
fault of FreeBSD.
Anyway, thanks for your work. Below is a context diff (against 7-STABLE
cvsupped last night). Do we need a PR to get this into FreeBSD?
Steinar Haug, Nethelp consulting, sthaug at nethelp.no
----------------------------------------------------------------------
*** tcp_usrreq.c.orig Sun Apr 5 22:51:49 2009
--- tcp_usrreq.c Mon Apr 6 11:15:11 2009
***************
*** 1153,1159 ****
/* Compute window scaling to request. */
while (tp->request_r_scale < TCP_MAX_WINSHIFT &&
! (TCP_MAXWIN << tp->request_r_scale) < so->so_rcv.sb_hiwat)
tp->request_r_scale++;
soisconnecting(so);
--- 1153,1159 ----
/* Compute window scaling to request. */
while (tp->request_r_scale < TCP_MAX_WINSHIFT &&
! (TCP_MAXWIN << tp->request_r_scale) < sb_max)
tp->request_r_scale++;
soisconnecting(so);
More information about the freebsd-net
mailing list