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.
hosts: list of hosts; if None, uses opposite hosts
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' ):
error( 'Cannot find telnet in $PATH - required for iperf test' )
return
+7 -2
View File
@@ -136,8 +136,13 @@ class testOptionsTopoCommon( object ):
'switch = %s\n'
% ( BW, bw_strs, N, loptsStr, self.switchClass ) )
for bw_str in bw_strs:
bw = float( bw_str.split(' ')[0] )
# On the client side, iperf doesn't wait for ACKs - it simply
# reports how long it took to fill up the TCP send buffer.
# 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 ):