Unexplained slow gigabit network speeds

gigabitslow-connectionwindows 7windows-server-2008

Update

Ok, I've tried the answers below and nothing has changed. I've identified the chipset in the laptop as the NVIDIA nForce 520. I downloaded the latest Vista x64 drivers for the nForce 520 (NVIDIA doesn't have any drivers for that chipset for Win 7 yet). I've tried installing the included firewall software (thinking maybe it is interfering – it's not). I've completely uninstalled my anti virus software (I am using Avast!) thinking its network filter driver may be causing a problem, that hasn't helped either.

I took my laptop over to my brothers house and was able to copy files at 10 – 12 MB/s over his 100Mbit network so I don't think it's the hardware.

I have run iperf with some surprising results:
iperf from the laptop sending to the server (upload)

> iperf -c naru
------------------------------------------------------------
Client connecting to naru, TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[328] local 192.168.7.100 port 8549 connected with 192.168.7.6 port 5001
[ ID] Interval       Transfer     Bandwidth
[328]  0.0-10.0 sec   162 MBytes   136 Mbits/sec

> iperf -c naru -w 64k
------------------------------------------------------------
Client connecting to naru, TCP port 5001
TCP window size: 64.0 KByte
------------------------------------------------------------
[328] local 192.168.7.100 port 8550 connected with 192.168.7.6 port 5001
[ ID] Interval       Transfer     Bandwidth
[328]  0.0-10.0 sec  1.06 GBytes   909 Mbits/sec

iperf from the server sending to the laptop (download)

> iperf -c miyuki
------------------------------------------------------------
Client connecting to miyuki, TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[256] local 192.168.7.6 port 51871 connected with 192.168.7.100 port 5001
[ ID] Interval       Transfer     Bandwidth
[256]  0.0-10.1 sec  25.2 MBytes  20.8 Mbits/sec

> iperf -c miyuki -w 64k
------------------------------------------------------------
Client connecting to miyuki, TCP port 5001
TCP window size: 64.0 KByte
------------------------------------------------------------
[256] local 192.168.7.6 port 51872 connected with 192.168.7.100 port 5001
[ ID] Interval       Transfer     Bandwidth
[256]  0.0-10.0 sec  21.1 MBytes  17.6 Mbits/sec

For comparison here are the iperf numbers between the HTPC and the server

Server: Naru, Host: CC (CC sends to Naru)
iperf -c naru:        0.0-10.0 sec   363 MBytes   305 Mbits/sec
iperf -c naru -w 64k: 0.0-10.0 sec  1.06 GBytes   912 Mbits/sec

Server: CC, Host: Naru (Naru sends to CC)
iperf -c cc:        0.0-10.0 sec   322 MBytes   270 Mbits/sec
iperf -c cc -w 64k: 0.0-10.0 sec  1020 MBytes   855 Mbits/sec

Using wireshark to watch a transfer from the server to the laptop nets a lot of the following entries:

(:51aa is the server, :37a1 is the laptop)
No.   Time      Source                    Destination               Proto Info
37785 27.286240 fe80::3820:2199:1623:37a1 fe80::1569:8500:b24a:51aa  TCP  [TCP Dup ACK 37753#13] 8360 > microsoft-ds [ACK] Seq=80228 Ack=40489174 Win=64800 Len=0 SLE=40499254 SRE=40517974
37786 27.286258 fe80::3820:2199:1623:37a1 fe80::1569:8500:b24a:51aa  TCP  [TCP Dup ACK 37753#14] 8360 > microsoft-ds [ACK] Seq=80228 Ack=40489174 Win=64800 Len=0 SLE=40499254 SRE=40519414
37787 27.286277 fe80::3820:2199:1623:37a1 fe80::1569:8500:b24a:51aa  TCP  [TCP Dup ACK 37753#15] 8360 > microsoft-ds [ACK] Seq=80228 Ack=40489174 Win=64800 Len=0 SLE=40499254 SRE=40520854
37788 27.286295 fe80::3820:2199:1623:37a1 fe80::1569:8500:b24a:51aa  TCP  [TCP Dup ACK 37753#16] 8360 > microsoft-ds [ACK] Seq=80228 Ack=40489174 Win=64800 Len=0 SLE=40499254 SRE=40522294
37789 27.286313 fe80::3820:2199:1623:37a1 fe80::1569:8500:b24a:51aa  TCP  [TCP Dup ACK 37753#17] 8360 > microsoft-ds [ACK] Seq=80228 Ack=40489174 Win=64800 Len=0 SLE=40499254 SRE=40523734
37790 27.286332 fe80::3820:2199:1623:37a1 fe80::1569:8500:b24a:51aa  TCP  [TCP Dup ACK 37753#18] 8360 > microsoft-ds [ACK] Seq=80228 Ack=40489174 Win=64800 Len=0 SLE=40499254 SRE=40525174
37791 27.286351 fe80::3820:2199:1623:37a1 fe80::1569:8500:b24a:51aa  TCP  [TCP Dup ACK 37753#19] 8360 > microsoft-ds [ACK] Seq=80228 Ack=40489174 Win=64800 Len=0 SLE=40499254 SRE=40526614
37792 27.286370 fe80::1569:8500:b24a:51aa fe80::3820:2199:1623:37a1  TCP  [TCP Previous segment lost] [TCP segment of a reassembled PDU]
37793 27.286372 fe80::1569:8500:b24a:51aa fe80::3820:2199:1623:37a1  TCP  [TCP segment of a reassembled PDU]
37794 27.286375 fe80::1569:8500:b24a:51aa fe80::3820:2199:1623:37a1  TCP  [TCP Fast Retransmission] [TCP segment of a reassembled PDU]
37795 27.286377 fe80::1569:8500:b24a:51aa fe80::3820:2199:1623:37a1  TCP  [TCP Out-Of-Order] [TCP segment of a reassembled PDU]
37796 27.286379 fe80::1569:8500:b24a:51aa fe80::3820:2199:1623:37a1  TCP  [TCP Out-Of-Order] [TCP segment of a reassembled PDU]
37797 27.286382 fe80::1569:8500:b24a:51aa fe80::3820:2199:1623:37a1  TCP  [TCP Out-Of-Order] [TCP segment of a reassembled PDU]
37798 27.286413 fe80::3820:2199:1623:37a1 fe80::1569:8500:b24a:51aa  TCP  [TCP Dup ACK 37753#20] 8360 > microsoft-ds [ACK] Seq=80228 Ack=40489174 Win=64800 Len=0 SLE=40528054 SRE=40529494 SLE=40499254 SRE=40526614
37799 27.286432 fe80::3820:2199:1623:37a1 fe80::1569:8500:b24a:51aa  TCP  [TCP Dup ACK 37753#21] 8360 > microsoft-ds [ACK] Seq=80228 Ack=40489174 Win=64800 Len=0 SLE=40528054 SRE=40530934 SLE=40499254 SRE=40526614

At this point I am at a complete and utter loss as to what to try next.

Original Question

Background

I am currently experiencing an issue on my freshly installed Windows 7 laptop. The issue originally occurred after I had installed the Windows 7 RC. When Windows Vista and the Windows 7 Beta 1 were installed on this laptop I was able to transfer at gigabit speeds with Jumbo frames turned on to the 9KB/9014 range. The two switches between the laptop support Jumbo frames as well.

When copying files from my server to my laptop, they run at a snails pace (usually less than 1 MB/sec) while other devices going through the same switches can transfer at higher speeds (45 – 55 MB/sec). It seems copying from the laptop to the server nets a faster speed but nothing like it should be.

Machines involved

  • Miyuki: Laptop with the issue. Windows 7 x64 RTM. HP Pavilion dv9700 CTO. Uses a NVIDIA nForce 10/100/1000 Mbps Ethernet adapter. (Video is GeForce 8400M GS)
  • Naru: Server with files. Custom Windows Server 2008 R2 x64 SP2. Uses a D-Link DGE-560T PCI Express Gigabit adapter.
  • CC: HTPC on same switch without issue. Windows Vista x86 SP2. Uses an on-board Realtek RTL8168B/8111B PCI-E GBE adapter.

When these images were taken jumbo frames have all been turned off.

The images

Copying initiated from the laptop

Server -> Laptop

(source: gibixonline.com)
Laptop -> Server

Copying initiated from the server

Server -> Laptop

(source: gibixonline.com)
Unexpectedly having the server copy a file from the laptop to itself results in speeds I would expect. (Laptop -> Server)

(source: gibixonline.com)

I stated earlier that the other machine on the same switch doesn't have this issue. High DPI is turned on since this is displayed on a HDTV.
Server -> HTPC

(source: gibixonline.com)

Naturally as a test I decided to see what the speeds were between my laptop and the HTPC. Unfortunately they were exactly what I expected.
HTPC -> Laptop

(source: gibixonline.com)

Final notes

I have tried everything I can think of. Even jumbo frames are turned off at this point and nothing seems to affect it. I've tried turning my Anti-Virus protection off to changing the cables that I use. Currently all cables in use are CAT-5e that I have built. I tried taking the cable from the HTPC and plugged it into my laptop to see if cabling was an issue. The two switches in question are a D-Link DGS-1216T and a "dumb" switch that supports jumbo frames, the D-Link DGS-2208.

Best Answer

Try disabling Window's auto-tuning feature.

In a CMD window:

netsh interface tcp set global autotuning=disabled 

Re-run your test, and see if you notice a performance improvement. I've had to do this on a couple of laptops running Windows 7 in my house, and it's helped.

If things get worse, or you don't notice any improvement, you can re-enable autotuning by:

netsh interface tcp set global autotuning=normal