Use server receive rate rather than client send()/buffering rate

Fixes #412
This commit is contained in:
Bob Lantz
2014-10-13 17:52:47 -07:00
parent 501eb4f916
commit e1711f357a
2 changed files with 12 additions and 4 deletions
+4 -1
View File
@@ -689,7 +689,10 @@ class Mininet( object ):
"""Run iperf between two hosts. """Run iperf between two hosts.
hosts: list of hosts; if None, uses opposite hosts hosts: list of hosts; if None, uses opposite hosts
l4Type: string, one of [ TCP, UDP ] l4Type: string, one of [ TCP, UDP ]
returns: results two-element array of server and client speeds""" returns: results two-element array of [ server, client ] speeds
note: send() is buffered, so client rate can be much higher than
the actual transmission rate; on an unloaded system, server
rate should be much closer to the actual receive rate"""
if not quietRun( 'which telnet' ): if not quietRun( 'which telnet' ):
error( 'Cannot find telnet in $PATH - required for iperf test' ) error( 'Cannot find telnet in $PATH - required for iperf test' )
return return
+8 -3
View File
@@ -136,9 +136,14 @@ class testOptionsTopoCommon( object ):
'switch = %s\n' 'switch = %s\n'
% ( BW, bw_strs, N, loptsStr, self.switchClass ) ) % ( BW, bw_strs, N, loptsStr, self.switchClass ) )
for bw_str in bw_strs: # On the client side, iperf doesn't wait for ACKs - it simply
bw = float( bw_str.split(' ')[0] ) # reports how long it took to fill up the TCP send buffer.
self.assertWithinTolerance( bw, BW, BW_TOLERANCE, msg ) # As long as the kernel doesn't wait a long time before
# delivering bytes to the iperf server, its reported data rate
# should be close to the actual receive rate.
serverRate, clientRate = bw_strs
bw = float( serverRate.split(' ')[0] )
self.assertWithinTolerance( bw, BW, BW_TOLERANCE, msg )
def testLinkDelay( self ): def testLinkDelay( self ):
"Verify that link delays are accurate within a bound." "Verify that link delays are accurate within a bound."