Poor Speeds from NZ to US in Windows
Poor Speeds from NZ to US in Windows
Hey guys,
I have a tricky issue and I need the help of your networking expertise!
Problem:
I am located in New Zealand and get virtually full line speed to the US (west coast) when running Linux.
However, with all the same hardware etc, I get relatively poor speeds under Windows 10.
I have seen reports on the net about others with similar issues, but I have yet to see anyone come up with a working solution.
Details:
Advertised Speed:
930/550Mbps (DS/US) Fibre connection
Performance (iPerf3, 10 threads):
LAN - 930/930Mbps
Auckland (2ms) - 930/530Mbps
Sydney (25ms) - 900/500Mbps
Los Angeles (125ms) - 450/150Mbps (900/500Mbps under Linux)
Current Settings:
Client OS/browser: Windows 10 (Firefox 66.0)
TCP options string: 020405b40103030801010402
MSS: 1460
MTU: 1500
TCP Window: 262656 (not multiple of MSS)
RWIN Scaling: 8 bits (2^8=256)
Unscaled RWIN : 1026
Recommended RWINs: 64240, 128480, 256960, 513920, 1027840
BDP limit (200ms): 10506kbps (1313KBytes/s)
BDP limit (500ms): 4202kbps (525KBytes/s)
MTU Discovery: ON
TTL: 52
Timestamps: OFF
SACKs: ON
IP ToS: 00000000 (0)
Router / Firewall:
Sophos SG 135 (UTM v9.602-3)
OS:
Windows 10 Pro v1809
LAN connection:
1Gbit wired
Additional Testing / Diagnosis:
- Tested with different PCs (also Windows 10) - no change
- Updated network card drivers - no change
- Tested to different iPerf3 servers - no change
- CPU utilization is nominal on all test PCs
- Checked / changed anything which looked relevant on the tweaks page (https://www.speedguide.net/articles/win ... weaks-5077)
- I have fully eliminated all local LAN network equipment & cabling, including the router / firewall.
Questions:
- Is there any way to monitor the current TCP Window size in real time as it scales?
Any input / ideas / hail Marys gratefully accepted!
I have a tricky issue and I need the help of your networking expertise!
Problem:
I am located in New Zealand and get virtually full line speed to the US (west coast) when running Linux.
However, with all the same hardware etc, I get relatively poor speeds under Windows 10.
I have seen reports on the net about others with similar issues, but I have yet to see anyone come up with a working solution.
Details:
Advertised Speed:
930/550Mbps (DS/US) Fibre connection
Performance (iPerf3, 10 threads):
LAN - 930/930Mbps
Auckland (2ms) - 930/530Mbps
Sydney (25ms) - 900/500Mbps
Los Angeles (125ms) - 450/150Mbps (900/500Mbps under Linux)
Current Settings:
Client OS/browser: Windows 10 (Firefox 66.0)
TCP options string: 020405b40103030801010402
MSS: 1460
MTU: 1500
TCP Window: 262656 (not multiple of MSS)
RWIN Scaling: 8 bits (2^8=256)
Unscaled RWIN : 1026
Recommended RWINs: 64240, 128480, 256960, 513920, 1027840
BDP limit (200ms): 10506kbps (1313KBytes/s)
BDP limit (500ms): 4202kbps (525KBytes/s)
MTU Discovery: ON
TTL: 52
Timestamps: OFF
SACKs: ON
IP ToS: 00000000 (0)
Router / Firewall:
Sophos SG 135 (UTM v9.602-3)
OS:
Windows 10 Pro v1809
LAN connection:
1Gbit wired
Additional Testing / Diagnosis:
- Tested with different PCs (also Windows 10) - no change
- Updated network card drivers - no change
- Tested to different iPerf3 servers - no change
- CPU utilization is nominal on all test PCs
- Checked / changed anything which looked relevant on the tweaks page (https://www.speedguide.net/articles/win ... weaks-5077)
- I have fully eliminated all local LAN network equipment & cabling, including the router / firewall.
Questions:
- Is there any way to monitor the current TCP Window size in real time as it scales?
Any input / ideas / hail Marys gratefully accepted!
Different OSes have slightly different behavior on how fast RWIN scales when the connection starts, and may use different congestion avoidance algorithms by default. I would check what congestion avoidance your Linux uses vs your Windows 10? (CUBIC, NewReno, CTCP, etc.)
Disclaimer: Please use caution when opening messages, my grasp on reality may have shaken loose during transmission (going on rusty memory circuits), even though my tin foil hat is regularly audited for potential supply chain tampering. I also eat whatever crayons are put in front of me.
๑۩۞۩๑
๑۩۞۩๑
It really depends on the latency/packet loss balance, it is not constant. Newer algorithms (CUBIC, CTCP, NewReno) scale up faster at the beginning of the connection, and newer OSes (updated Windows 10 versions, for example) start with 10 packets instead of 4 before waiting for an ACK, so there are many variables. 30 seconds should be enough to scale up the speed, provided there are no other issues like packet loss getting in the way.
It could also be some other simple issue, like different Network Adapter driver's allocation of buffers, regardless of TCP/IP settings.
It could also be some other simple issue, like different Network Adapter driver's allocation of buffers, regardless of TCP/IP settings.
I would compare the Linux TCP/IP settings with the Windows OS.
The NIC send/receive buffers may be the same, but the Windows driver may not be as well optimized for higher speeds, it may have additional overhead imposed by the OS interaction, or additional options/coalescing, etc. that come into play
The NIC send/receive buffers may be the same, but the Windows driver may not be as well optimized for higher speeds, it may have additional overhead imposed by the OS interaction, or additional options/coalescing, etc. that come into play
Disclaimer: Please use caution when opening messages, my grasp on reality may have shaken loose during transmission (going on rusty memory circuits), even though my tin foil hat is regularly audited for potential supply chain tampering. I also eat whatever crayons are put in front of me.
๑۩۞۩๑
๑۩۞۩๑
I just wanted to add a note here that I have just discovered that currently, iPerf3 v3.1.3 for Windows comes bundled with a version of Cygwin1.dll (2.5.1) which has a hard-coded TCP window size setting of 278,775.
This causes results to be limited to 12.6Mb/s per thread.
This is why iPerf speeds in Linux are much better that in Windows.
Updating the Cygwin dll to the latest version resolves this issue.
I have informed the iPerf devs of this issue.
Thanks to the Argon Systems article which directed me to this line of inquiry!
https://argonsys.com/microsoft-cloud/li ... -buffering
This causes results to be limited to 12.6Mb/s per thread.
This is why iPerf speeds in Linux are much better that in Windows.
Updating the Cygwin dll to the latest version resolves this issue.
I have informed the iPerf devs of this issue.
Thanks to the Argon Systems article which directed me to this line of inquiry!
https://argonsys.com/microsoft-cloud/li ... -buffering