I've run into a problem that I've spent quite a while banging my
head against. No matter what I do I can't get a linux system with a
2.6.15.2 kernel to advertise large window sizes.
Scaling is working but the advertised window sizes are really small.
I've read all the docs I could find and played with the /proc/sys/net/
parameters like crazy but no luck.
The situation is this:
2 acenic gigabit fiber cards, one in an RS6k and the other in a
fast linux box with a gig of ram.
Both machines set to mtu 9000 and tuned for gigabit.
Increased the pertinent sizes for values in linux:
==> tcp_adv_win_scale <==
2
==> tcp_app_win <==
31
==> tcp_tso_win_divisor <==
3
==> tcp_window_scaling <==
1
==> tcp_mem <==
98304 131072 196608
==> tcp_rmem <==
4096 5000000 5000000
==> tcp_wmem <==
4096 65536 5000000
Do a tcpdump and a connect (linux is 192.168.254.2):
15:18:14.610047 IP 192.168.254.1.65119 > 192.168.254.2.34294: S
3316943900:3316943900(0) win 65535 <mss 8960,nop,wscale 4,nop,nop,
timestamp 1142377116 0>
15:18:14.611586 arp who-has 192.168.254.1 tell 192.168.254.2
15:18:14.611758 arp reply 192.168.254.1 is-at 00:02:55:9a:3c:83
(oui Unknown)
15:18:14.611769 IP 192.168.254.2.34294 > 192.168.254.1.65119: S
1684295309:1684295309(0) ack 3316943901 win 17896 <mss 8960,nop,nop,
timestamp 219253038 1142377116,nop,wscale 7>
15:18:14.611935 IP 192.168.254.1.65119 > 192.168.254.2.34294: .
ack 1 win 54806 <nop,nop,timestamp 1142377116 219253038>
15:18:14.619850 IP 192.168.254.2.34294 > 192.168.254.1.65119: P 1:39(38)
ack 1 win 140 <nop,nop,timestamp 219253041 1142377116>
15:18:14.686203 IP 192.168.254.1.65119 > 192.168.254.2.34294: .
ack 39 win 54806 <nop,nop,timestamp 1142377116 219253041>
The aix box advertises a scale size of 4 and an initial window size of
65536 on syn which drops to 54806 on the first packet. I assume the
scle of 4 means to left shift the windows size 4 places which is about
256k which is what the aix kernel values are set to.
The linux box advertises a scale size of 7 and a initial window size of
17896 on syn which drops to 140 bytes on the first packet. Left
shifting that 7 places gets me back to about 18k.
I can force both sides to use scaling factors of 4 by adjusting the linux
tcp memory parameters but no matter what I do I can't get the linux window
to exceed 17896 bytes. (note that if I turn scaling off on linux I get a
32k window size).
What the heck am I doing wrong here??
|