HTTP download speed difference in windows 7 vs linux

2

3

I have a strange situation regarding a Windows 7 Home Premium PC which is showing limited internet transfer speeds for no apparent reason.

The setup:

  • internal gigabit LAN, behind a TP-Link WDR3600 router running DD-WRT
  • fiber internet connection with 100Mbit/s download, 8Mbit/s upload
  • Windows 7 Home Premium PC connected via wired interface (gigabit)
  • Virtualbox Linux guest Virtual Machine running on the Windows PC
  • The VM has its network interface bridged on the wired host interface, and has a LAN IP address
  • on the same LAN there's a NAS providing files over HTTP (gigabit)
  • no HTTP proxy setup in windows, "automatically detect settings" is disabled in the LAN settings menu in Windows
  • QoS is disabled in the router
  • all tests are done via gigabit ethernet

Facts:

  • Transfer speeds from the internet aren't getting past ~20Mbit/s on the Windows PC, despite the internet connection not being saturated.
  • The exact same internet download from the Linux VM reaches the connection's limit of 100Mbit/s with no issues. This is true when the download is piped to /dev/null but also when it's written to disk
  • Downloading a file from the NAS to the Windows PC over HTTP hits ~600Mbit/s transfer speeds easily
  • MTU in both Windows and Linux is the same
  • Tried disabling Large Segment Offload on the wired network interface (windows), with no effect
  • Switched between Firefox, Chrome, and IE with no change in results
  • Speedtest.net in Windows reaches the 100/8 transfer speeds

Some discarded hipotheses:

  • not a hardware issue, since the Linux VM can download fast using the same interface, and LAN downloads also work fine
  • not a router issue, VM downloads are fast
  • not an internet connection issue, VM downloads are fast
  • not a disk speed limitation, VM downloads to disk are fast
  • not a browser-specific issue
  • not a fragmentation issue, MTU is the same in Windows and VM

Some possibilities:

  • Windows TCP stack limitation, or configuration related to HTTP

Any idea what's going on here? Why is Windows not taking up all the bandwidth it can?

André Fernandes

Posted 2015-01-29T23:33:41.817

Reputation: 389

Answers

2

Well, after some investigation it seems to have been a problem with Windows 7 TCP receive window scaling.

These were my initial TCP settings:

C:\Windows\system32>netsh interface tcp show global
Querying active state...

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State          : disabled
Chimney Offload State               : automatic
NetDMA State                        : enabled
Direct Cache Acess (DCA)            : disabled
Receive Window Auto-Tuning Level    : disabled
Add-On Congestion Control Provider  : none
ECN Capability                      : disabled
RFC 1323 Timestamps                 : disabled
** The above autotuninglevel setting is the result of Windows Scaling heuristics
overriding any local/policy configuration on at least one profile.


C:\Windows\system32>netsh interface tcp show heuristics
TCP Window Scaling heuristics Parameters
----------------------------------------------
Window Scaling heuristics         : enabled
Qualifying Destination Threshold  : 3
Profile type unknown              : normal
Profile type public               : normal
Profile type private              : restricted
Profile type domain               : normal

My ethernet connection is classified as a "home" network, which seems to fall under the "Profile type private" category in the heuristics output.

According to this excellent article, disabling the heuristics should fix the issue.

Thus I did:

# disable heuristics
C:\Windows\system32>netsh interface tcp set heuristics wsh=disabled
Ok.

# enable receive-side scaling
C:\Windows\system32>netsh int tcp set global rss=enabled
Ok.

# manually set autotuning profile
C:\Windows\system32>netsh interface tcp set global autotuning=experimental
Ok.

# set congestion provider
C:\Windows\system32>netsh interface tcp set global congestionprovider=ctcp
Ok.

C:\Windows\system32>netsh interface tcp show global
Querying active state...

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State          : enabled
Chimney Offload State               : automatic
NetDMA State                        : enabled
Direct Cache Acess (DCA)            : disabled
Receive Window Auto-Tuning Level    : experimental
Add-On Congestion Control Provider  : ctcp
ECN Capability                      : disabled
RFC 1323 Timestamps                 : disabled

After changing these settings downloading is fast again, hitting the internet connection's limit.

André Fernandes

Posted 2015-01-29T23:33:41.817

Reputation: 389

0

The issue with slow download speeds under Windows 7 and Windows Server 2008 R2 is due to a bug in TCP/IP stack. If between location A and location B you have very low latency (1-8 ms), you will notice slower than normal download speed. Apply KB2675785 from Microsoft https://support.microsoft.com/en-us/kb/2675785 to resolve the issue.

INTEQ

Posted 2015-01-29T23:33:41.817

Reputation: 1

Please read the question again carefully. Your answer does not answer the original question. OP's issue is with his internet connection not a LAN connection to a Windows Server. – DavidPostill – 2016-02-08T22:08:23.853

1I read the issue again and I stand by my response. The KB mentioned in my response is not limited to LAN-LAN connections or Windows Server. please read the KB description again. – INTEQ – 2016-02-09T22:08:01.607