[netperf-talk] Why the test results were diffentent between netperf win32 version and Vmware+RedHat9 version

Rick Jones rick.jones2 at hp.com
Tue Feb 24 09:49:56 PST 2009


Ye wrote:
> Hi, 
> I am using netperf to test a Netcard. 
> I built two version of netperf . One is win32 version with VS.net 
> 2003.The other is RedHat9 version running on the Vmware workstation.
> Both are netperf clients and  ran on the same PC. The netperf server ran 
> at a Linux server and it is linux version.
> The test command :  netperf -H 172.16.52.56
> I was expecting this two version would report the same result. But they 
> didn't .

Given that Linux and Windows have two very different TCP/IP implementations, 
expecting them to have the same TCP performance is generally going to be incorrect.

> Linux version result:
> $ netperf -H 172.16.52.56
> TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 172.16.52.65 
> (172.16.52.65) port 0 AF_INET
> Recv   Send    Send                          
> Socket Socket  Message  Elapsed              
> Size   Size    Size     Time     Throughput  
> bytes  bytes   bytes    secs.    10^6bits/sec  
> 
>  87380  16384  16384    10.01      91.15  
> 
> Win32 version result:
> ./winnetperfclient.exe -H 172.16.52.65
> TCP STREAM TEST from (null) (0.0.0.0) port 0 AF_INET to (null) 
> (172.16.52.65) port 0 AF_INET
> Recv   Send    Send                          
> Socket Socket  Message  Elapsed              
> Size   Size    Size     Time     Throughput  
> bytes  bytes   bytes    secs.    10^6bits/sec  
> 
>  87380   8192   8192    10.00      82.93   
> 
> Dose anyone know why the results were different? 
> Did it mean win32 socket implement is poor than linux implement? 

One limit to the performance of a TCP connection is discussed in an attachment 
along with a checklist of sorts.

"Classic" (non-omni) netperf tests on Linux cannot account for the automatic 
growth of the TCP window over the life of a connection.  So, while it is 
reporting a recv socket size of 87380 and send of 16384, by the end of the 
connection those were probably rather larger.

Windows does not "grow" the window like Linux does - in this case then you can 
presume that the Window was 8192 bytes.

If you add some test-specific -s and -S options you can get the two stacks to use 
the same socket buffer sizes.

netperf -H <remote> -- -s 16K -S 16K -m 16K

This will turn-off the Linux autotuning. however, you will notice on Linux 
netperf will report 32K - the Linux stack does a "2x" (up to a sysctl limit) for 
overhead tracking that it exposes to the user.

To be certain you get the same window in both cases you should take a packet 
trace which includes the connection establishement (to see the window scaling 
options) and then calculate the window sizes being advertised by the remote.

Even if you see the two stacks reporting the same throughput, that still does not 
_really_ mean the two stacks have the same "performance."   One stack might use 
more CPU to achieve the same level of throughput.  That is why you should also 
enable CPU utilization in all your tests.  Then netperf will report the CPU 
utilization and will also calculate a measure of efficiency called a "service 
demand" - the quantity of CPU time required to perform a unit of work.

netperf -c -C -H <remote> -- -s 16K -S 16K -m 16K


> 
> best regards
> Ye
> 
> 
>  
> 
>  
>   
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> netperf-talk mailing list
> netperf-talk at netperf.org
> http://www.netperf.org/cgi-bin/mailman/listinfo/netperf-talk

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: net_perf_list
Url: http://www.netperf.org/pipermail/netperf-talk/attachments/20090224/1a67f160/attachment.txt 


More information about the netperf-talk mailing list