Newer
Older
Test bandwidth (using iperf) on linear networks of varying size,
using both kernel and user datapaths.
Bob Lantz
committed
Each network has N switches and N+1 hosts, connected as follows:
Bob Lantz
committed
h0 <-> s0 <-> s1 .. sN-1
| | |
h1 h2 hN
Note: by default, the reference controller only supports 16
switches, so this test WILL NOT WORK unless you have recompiled
Bob Lantz
committed
your controller to support 100 switches (or more.)
from mininet.mininet import init, Network, defaultNames, Host, Switch
from mininet.mininet import createLink, flush, iperf, pingTestVerbose, Cli
Bob Lantz
committed
class LinearNet( Network ):
def __init__( self, switchCount, **kwargs ):
self.switchCount = switchCount
Network.__init__( self, **kwargs )
def makeNet( self, controller ):
snames, hnames, dpnames = defaultNames()
previous = None
hosts = []
switches = []
def newHost( switch ):
host = Host( hnames.next() )
createLink( host, switch )
print host.name, ; flush()
return [ host ]
print "*** Creating linear network of size", self.switchCount
for s in range( 0, self.switchCount ):
dp = dpnames.next() if self.kernel else None
switch = Switch( snames.next(), dp )
switches += [ switch ]
print switch.name, ; flush()
if not self.kernel: createLink( controller, switch )
if s == 0: hosts += newHost( switch )
hosts += newHost( switch)
if previous is not None: createLink( previous, switch)
previous = switch
return switches, hosts
def linearBandwidthTest( lengths ):
Bob Lantz
committed
"Check bandwidth at various lengths along a switch chain."
Bob Lantz
committed
switchCount = max( lengths )
for datapath in datapaths:
k = datapath == 'kernel'
results[ datapath ] = []
Bob Lantz
committed
network = LinearNet( switchCount, kernel=k)
network.start()
for n in lengths:
def test( controllers, switches, hosts ):
print "testing h0 <-> h" + `n`, ; flush()
result = iperf( [ hosts[ 0 ], hosts[ n ] ] )
print result ; flush()
return result
bandwidth = network.runTest( test )
results[ datapath ] += [ ( n, bandwidth ) ]
network.stop()
for datapath in datapaths:
print
print "*** Linear network results for", datapath, "datapath:"
print
result = results[ datapath ]
for switchCount, bandwidth in result:
print switchCount, '\t\t',
print bandwidth[ 0 ], 'server, ', bandwidth[ 1 ], 'client'
print
print
if __name__ == '__main__':
init()
linearBandwidthTest( [ 1, 10, 20, 40, 60, 80, 100 ] )