Linux – Possible to force TCP window scaling to a higher value

linuxlinux-networkingnetworking

Is it possible to increase the TCP window scaling factor on Linux (CentOS 7.2)? I have a long fat network (100 Mbps) from London to Chicago and I'm getting 16 Mbps throughput in TCP on an sftp from a London machine (Windows Server 2012r2) to my Chicago CentOS machine. I'd like to play with the scaling factor and see if my throughput changes.

My latency is 88 ms roundtrip.

I ask because with UDP I get over 90 Mbps, so I was thinking it would be nice to perhaps double my TCP throughput if I could.

I understand that TCP is connection-oriented, requires an ACK, etc., and that I may actually negatively affect my throughput. What I am doing is second-guessing the wisdom of the makers and trying to assume control myself, rather than allow autotuning to autotune.

Wireshark shows that my sftp from Windows to Linux is indeed using TCP window scaling, so I know it's supported in my path.

Otherwise I'll look into TCP multipath (http://www.multipath-tcp.org/) for my LFN.

Thanks.

Best Answer

You can increase tcp window scale factor increasing net.core.rmem_max and net.ipv4.tcp_rmem. When increasing rmem (receiver memory buffer), indirectly it increases *rcv_wscale.

For example, increasing receive window buffer to 32MB, I got a window scale factor of 1024:

echo 'net.core.rmem_max=33554432' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_rmem=4096 33554432 33554432' >> /etc/sysctl.conf
sysctl -p

Anyway, reading your previous comments, it seems to me that you have a sender bound throughput, so changing receiver parameters will not improve bps. It's possible to post a capture file?