Different versions of iperf for windows give totally different results
- by Albert Mata
Measuring TCP output from a Windows client to Solaris server:
WXP SP3 with iperf 1.7.0 -- returns an average around 90Mbit
Same client, same server but iperf 2.0.5 for windows -- returns an average of 8.5 Mbit
Similar discrepancies have been observed connecting to other servers (W2008, W2003)
It's difficult to get to some conclusions when different versions of the same tool provide vastly different results.
Example below:
C:\tempiperf -v (from iperf.fr)
iperf version 2.0.5 (08 Jul 2010) pthreads
C:\tempiperf -c solaris10
Client connecting to solaris10, TCP port 5001
TCP window size: 64.0 KByte (default)
[ 3] local 10.172.181.159 port 2124 connected with 10.172.180.209 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.2 sec 10.6 MBytes 8.74 Mbits/sec
Abysmal perfomance, but now I test from the same host (Windows XP SP3 32bit and 100Mbit) to the same server (Solaris 10/sparc 64bit and 1Gbit running iperf 2.0.5 with default window of 48k) with the old iperf
C:\temp1iperf -v
iperf version 1.7.0 (13 Mar 2003) win32 threads
C:\temp1iperf.exe -c solaris10 -w64k
Client connecting to solaris10, TCP port 5001
TCP window size: 64.0 KByte
[1208] local 10.172.181.159 port 2128 connected with 10.172.180.209 port 5001
[ ID] Interval Transfer Bandwidth
[1208] 0.0-10.0 sec 112 MBytes 94.0 Mbits/sec
So one iperf with a 64k window says 8.75Mbit and the old iperf with the same window size
says 94.0Mbit. These results are constant through repeated tests.
From my testing launching iperf(old) with window size "x" and iperf(new) with window size "x" instead of producing the same or very close results produce totally different results.
The only difference I see is the old compiled as win32 threads vs. pthreads but parallelism (-P 10) appears to work in both.
Anyone has a clue or can recommend a tool that gives results I can trust??
EDIT: Looking at traces from (old) iperf it sets the TCP Window Scale flag to 3 in the SYN packet, when I run the (new) iperf this is set to 0 in the initial packet. A quick analysis of the window size through the exchange shows the (old) iperf moving back and forth but mostly at 32k while the (new) iperf mostly keeps at 64k. Maybe it will help somebody to connect the dots.