Why am I getting 950 Mbps up but only 360 Mbps down on Gigabit Ethernet?

Solution 1:

Based on your response:

@ewhac The TCP window size on the local machine usually differs from the window size on the remote machine. The default value is 0.06 MB on local (win 8) and 0.01 MB on remote (vista). Do they have to be the same value? How do I ask it to guess the MSS? Would that be the -m switch ("print maximum segment size")? I usually don't set any of that. Why would I have to? – Sammy Nov 30 at 21:39

The TCP window size represents the maximum amount of data the TCP stack will squirt down the wire blind before stopping and waiting to receive acknowledgements from the remote machine -- in other words, the maximum amount of unacknowledged traffic on the wire. The fact that the TCP window on the Vista machine is much smaller than on the Windows Se7en machine supports the theory that you're not filling the pipe enough before stalling and waiting for ACKs.

Therefore, the first thing I would try is increasing the TCP window size on the Vista machine using the -w argument. 0.01MB is a somewhat unhelpful unit; I'm guessing it's 16KiB. So start with 16KiB and run a test:

iperf -c -w 16K ...

Double the window size and repeat the test:

iperf -c -w 32K ...

Hopefully you should observe a speed increase. Continue doubling the window size until you no longer see significant speed increases.

Solution 2:

As previously stated, you will need to modify the TCP Window size in iperf to get higher throughput over low latency high speed links. Different versions of Windows (or iPerf) may have different default window sizes. Try "-w 256k" to start with on both the client and server.

Can you confirm the arrow direction of your charts? In iPerf, data is pushed from the client to the server (opposite of what I usually think).

You can rule out the hard drives as the cause since iPerf does not touch the hard drives.

I think you already verified that you are running the latest NIC drivers. There should be no need to muck around with manually setting the speed/duplex. Same with jumbo frames -- they are not worth the hassle with modern hardware.

Verify that Large Send Offload (LSO) and Large Receive Offload (LRO) are enabled on both NICs. Some NIC drivers use different names (or multiple options that control this behavior) so you may have to hunt around. Usually the default is to have them all enabled.