use udp with iperf to measure loss. pings are not reliable
This commit is contained in:
@@ -31,17 +31,16 @@ class SingleSwitchTopo(Topo):
|
|||||||
|
|
||||||
def perfTest():
|
def perfTest():
|
||||||
"Create network and run simple performance test"
|
"Create network and run simple performance test"
|
||||||
topo = SingleSwitchTopo(n=4)
|
topo = SingleSwitchTopo( n=4 )
|
||||||
net = Mininet(topo=topo,
|
net = Mininet( topo=topo,
|
||||||
host=CPULimitedHost, link=TCLink)
|
host=CPULimitedHost, link=TCLink,
|
||||||
|
autoStaticArp=True )
|
||||||
net.start()
|
net.start()
|
||||||
print "Dumping host connections"
|
print "Dumping host connections"
|
||||||
dumpNodeConnections(net.hosts)
|
dumpNodeConnections(net.hosts)
|
||||||
print "Testing network connectivity"
|
|
||||||
net.pingAll()
|
|
||||||
print "Testing bandwidth between h1 and h4"
|
print "Testing bandwidth between h1 and h4"
|
||||||
h1, h4 = net.getNodeByName('h1', 'h4')
|
h1, h4 = net.getNodeByName('h1', 'h4')
|
||||||
net.iperf((h1, h4))
|
results = net.iperf( ( h1, h4 ), l4Type='UDP' )
|
||||||
net.stop()
|
net.stop()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
@@ -6,12 +6,8 @@ Test for simpleperf.py
|
|||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
import pexpect
|
import pexpect
|
||||||
import re
|
|
||||||
import sys
|
import sys
|
||||||
from mininet.log import setLogLevel
|
from mininet.log import setLogLevel
|
||||||
from mininet.net import Mininet
|
|
||||||
from mininet.node import CPULimitedHost
|
|
||||||
from mininet.link import TCLink
|
|
||||||
|
|
||||||
from mininet.examples.simpleperf import SingleSwitchTopo
|
from mininet.examples.simpleperf import SingleSwitchTopo
|
||||||
|
|
||||||
@@ -19,35 +15,20 @@ class testSimplePerf( unittest.TestCase ):
|
|||||||
|
|
||||||
@unittest.skipIf( '-quick' in sys.argv, 'long test' )
|
@unittest.skipIf( '-quick' in sys.argv, 'long test' )
|
||||||
def testE2E( self ):
|
def testE2E( self ):
|
||||||
"Run the example and verify ping and iperf results"
|
"Run the example and verify iperf results"
|
||||||
|
BW = 10
|
||||||
|
TOLERANCE = .8
|
||||||
|
expectedBw = BW * TOLERANCE
|
||||||
p = pexpect.spawn( 'python -m mininet.examples.simpleperf' )
|
p = pexpect.spawn( 'python -m mininet.examples.simpleperf' )
|
||||||
# check ping results
|
|
||||||
p.expect( "Results: (\d+)% dropped", timeout=120 )
|
|
||||||
loss = int( p.match.group( 1 ) )
|
|
||||||
self.assertTrue( 0 < loss < 100 )
|
|
||||||
# check iperf results
|
# check iperf results
|
||||||
p.expect( "Results: \['([\d\.]+) .bits/sec", timeout=480 )
|
p.expect( "Results: \['10M', '([\d\.]+) .bits/sec", timeout=480 )
|
||||||
bw = float( p.match.group( 1 ) )
|
measuredBw = float( p.match.group( 1 ) )
|
||||||
self.assertTrue( bw > 0 )
|
lowerBound = expectedBw * TOLERANCE
|
||||||
|
upperBound = expectedBw + expectedBw * ( 1 - TOLERANCE )
|
||||||
|
self.assertGreaterEqual( measuredBw, lowerBound )
|
||||||
|
self.assertLessEqual( measuredBw, upperBound )
|
||||||
p.wait()
|
p.wait()
|
||||||
|
|
||||||
def testTopo( self ):
|
|
||||||
"""Import SingleSwitchTopo from example and test connectivity between two hosts
|
|
||||||
Note: this test may fail very rarely because it is non-deterministic
|
|
||||||
i.e. links are configured with 10% packet loss, but if we get unlucky and
|
|
||||||
none or all of the packets are dropped, the test will fail"""
|
|
||||||
topo = SingleSwitchTopo( n=4 )
|
|
||||||
net = Mininet( topo=topo, host=CPULimitedHost, link=TCLink )
|
|
||||||
net.start()
|
|
||||||
h1, h4 = net.get( 'h1', 'h4' )
|
|
||||||
# have h1 ping h4 ten times
|
|
||||||
expectStr = '(\d+) packets transmitted, (\d+) received, (\d+)% packet loss'
|
|
||||||
output = h1.cmd( 'ping -c 10 %s' % h4.IP() )
|
|
||||||
m = re.search( expectStr, output )
|
|
||||||
loss = int( m.group( 3 ) )
|
|
||||||
net.stop()
|
|
||||||
self.assertTrue( 0 < loss < 100 )
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
setLogLevel( 'warning' )
|
setLogLevel( 'warning' )
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
Reference in New Issue
Block a user