[arch] Kernel 2.6.17 and TCP window scaling
Jose M. Prieto
jmprieto at gmx.net
Sat Sep 9 07:46:50 EDT 2006
El Sábado, 9 de Septiembre de 2006 12:09, Benoit Myard escribió:
> On Fri, Sep 08, 2006 at 11:11:18PM +0200, Jose M. Prieto wrote:
> > TCP window scaling can be disabled by setting the kernel parameter
> > net.ipv4.tcp_window_scaling to 0 (I am sending this email from a 2.6.17,
> > after adding that setting to /etc/sysctl.conf). Disabling window scaling
> > will only slightly affect performance over high speed, long distance
> > network links, while having it enabled will greatly affect performance
> > much more often. So I think it would be wise to disable it in the default
> > sysctl.conf. If someone wants window scaling (s)he can comment out the
> > line.
>
> Allthough I'm not sure to really understand the problem, Mark Lord submited
> a quick fix on the LKML [1] :
I have just found a good explanation of the problem [1]. It also explains the
change made to "fix" the 2.6.8 kernel version.
> On Tue, Jun 13, 2006 at 12:58:05PM -0400, Mark Lord wrote:
> > Okay. More progress here. The calculation of the "wscale" values is based
> > on the "tcp_rmem" sysctl numbers.
> >
> > The defaults for these *differ* between 2.6.16.18 and 2.6.17-rc*.
> >
> > 2.6.16: 4096 87380 174760
> > 2.6.17: 4096 87380 2097152
> >
> > If I change the tcp_rmem setting on 2.6.17 to match the old value, then
> > the website www.everymac.com becomes accessible again:
> >
> > echo 4096 87380 174760 > /proc/sys/net/ipv4/tcp_rmem
>
> As argued Linus Torvalds [2] and David Miller [3], disabling Window scaling
> is a bad idea since according to David Miller " It is impossible to fill a
> cross-continental connection without using window scaling. "
>
> I would suggest people to use this trick instead of purely disabling Window
> Scaling:
>
> echo 4096 87380 174760 > /proc/sys/net/ipv4/tcp_rmem
>
> At least, that's what I do since I got hit by this problem. It *does* work
> fine.
This does not completely disable window scaling, but lowers the default scale
factor.
And yes, without window scaling it is impossible to fill a cross-continental
connection but, how many of as have enough bandwith to fill such a link even
with window scaling? 1 in 100, 1 in 1000?
On the other hand, when the problem arises, a lot of packets need to be
retransmitted, creating congestion in the network.
And if I have read correctly, most other operating systems, including Windows
XP, don't use window scaling at all.
For a long time before upgrading to 2.6.17, I have been experiencing low
download rates when upgrading my system via pacman. I thought it was the load
on the mirror servers, but now that I have disabled window scaling, pacman
uses my whole bandwith. So I get much better network performance disabling
scaling than with the tcp_rmem setting.
I think disabling window scaling is the best option. Anyways, if others agree
that the tcp_rmem setting is better, I have no objection. My main point was
that Arch should provide a workaround by default.
[1] http://lwn.net/Articles/92727/
More information about the arch
mailing list