TOOL WISHLIST
Open Source, of course
Tool Wishlist
Cover many code paths
TOOL WISHLIST
Documentation
(Bonus if it covers *why* vs just what/how)
TOOL WISHLIST
Readable code
(Thought-out var names, elegant->simple design, formatting)
TOOL WISHLIST
Appropriate language choice
TOOL WISHLIST
Unit tests
(I wish it could go without saying)
TOOL WISHLIST
Community-enabling distribution
(GitHub, not tarballs, emailed scripts or VMs)
TOOL WISHLIST
Support for multiple controllers
Wrapped CBench (WCBEnch)
CBench, wrapped in stuff that makes it useful
WRAPPED CBENCH (WCBENCH)
Three main scripts
WRAPPED CBENCH (WCBENCH)
wcbench.sh
# Install CBench and OpenDaylight, make required config changes
[fedora@dfarrell-wcbench wcbench]$ ./wcbench.sh -ci
CBench is not installed
Installing CBench dependencies
Cloning CBench repo
Cloning openflow source code
Building oflops/configure file
Building CBench
CBench is installed
Successfully installed CBench
Installing OpenDaylight dependencies
Downloading last successful ODL build
Unzipping last successful ODL build
Downloading openflowplugin
Removing simpleforwarding plugin
Removing arphandler plugin
WRAPPED CBENCH (WCBENCH)
wcbench.sh
# Start OpenDaylight, issue required config
[fedora@dfarrell-wcbench wcbench]$ ./wcbench.sh -o
Starting OpenDaylight
Giving ODL 90 seconds to get up and running
80 seconds remaining
<snip>
0 seconds remaining
Installing telnet, as it's required for issuing ODL config.
Issuing `dropAllPacketsRpc on` command via telnet to localhost:2400
Trying ::1...
Connected to localhost.
Escape character is '^]'.
osgi> dropAllPacketsRpc on
DropAllFlows transitions to on
osgi> Connection closed by foreign host.
WRAPPED CBENCH (WCBENCH)
wcbench.sh
# Two minute CBench run
[fedora@dfarrell-wcbench wcbench]$ ./wcbench.sh -t 2 -r
Set MS_PER_TEST to 120000, TESTS_PER_SWITCH to 1, CBENCH_WARMUP to 0
Collecting pre-test stats
Running CBench against ODL on localhost:6633
Collecting post-test stats
Collecting time-irrelevant stats
Average responses/second: 22384.52
/home/fedora/results.csv not found or empty, building fresh one
WRAPPED CBENCH (WCBENCH)
wcbench.sh
ODL+WCBench on same machine or different ones
WRAPPED CBENCH (WCBENCH)
wcbench.sh
Usage ./wcbench.sh [options]
Setup and/or run CBench and/or OpenDaylight.
OPTIONS:
-h Show this message
-c Install CBench
-t <time> Run CBench for given number of minutes
-r Run CBench against OpenDaylight
-i Install ODL from last successful build
-p <processors> Pin ODL to given number of processors
-o Run ODL from last successful build
-k Kill OpenDaylight
-d Delete local ODL and CBench code
WRAPPED CBENCH (WCBENCH)
loop_wcbench.sh
# Two minute CBench run, restart OpenDaylight between runs
[fedora@dfarrell-wcbench wcbench]$ ./loop_wcbench.sh -t 2 -r
# I'm not going to let this run, you get the idea
Wrapped CBench (WCBench)
Usage ./loop_wcbench.sh [options]
Run WCBench against OpenDaylight in a loop.
OPTIONS:
-h Show this help message
-l Loop WCBench runs without restarting ODL
-r Loop WCBench runs, restart ODL between runs
-t <time> Run WCBench for a given number of minutes
-p <processors> Pin ODL to given number of processors
WRAPPED CBENCH (WCBENCH)
stats.py
# CBench flows/sec stats
./stats.py -s flows
{'flows': {'max': 15036,
'mean': 8958.426,
'min': 4981,
'relstddev': 32.032,
'stddev': 2869.584},
'sample_size': 115}
WRAPPED CBENCH (WCBENCH)
stats.py
Flows/sec, RAM, iowait, steal time, load
(many others, 22 total)
WRAPPED CBENCH (WCBENCH)
stats.py
# Command for graphs of flows/sec and used RAM stats
./stats.py -g flows ram
WRAPPED CBENCH (WCBENCH)
WRAPPED CBENCH (WCBENCH)
Solid README
WRAPPED CBENCH (WCBENCH)
Good code style
TLDP/Google Shell Guide
[~/wcbench]$ ./bash8.py wcbench.sh loop_wcbench.sh
[~/wcbench]$ pep8 stats.py
WRAPPED CBENCH (WCBENCH)
Solid in-line docs
# Total number of lines
[~/wcbench]$ cat wcbench.sh | wc -l
749
# Total number of lines that contain comments
[~/wcbench]$ cat wcbench.sh | grep "^# \| # " | wc -l
280
kC-CBench
OpenFlow 1.3 improvements added to CBench
KC-CBench
Less-than-ideal fork :(
OFNet
Feature-rich controller testing tool by Ganesh Shankar
OFNet
Easy to model topologies
OFNet
Easy to simulate various types of traffic
OFNet
Real-time stats graphs
OFNET
Distributed dev-to-dev via
VM/tarball :(
OFNet
"Throw code over wall" approach :(
OFNet
Poor docs
^^As you can see, those don't exist
OFNet
Ganesh is working on the docs, he tells me
OFNet
No tests
^^Tiny file that's not actually a test
OFNET
Enough features to pay attention?
TestOn
Supports various SDN devices (yay!)
TestON
Coded like C (but it's Python)
Jan's Scripts
- Load up controller with flows via REST
- Delete flows via REST
JAN'S SCRIPTS
There's an updated version that I haven't seen
JAN'S SCRIPTS
Please, let's put them in a repo
NETCONF scripts
Just learned these exist
NETCONF SCRIPTS
Let's put them in a repo
Datastore Scripts
Just heard about them
DATASTORE SCRIPTS
More info? Are they shared anywhere?
IXIA
Phil Rob tells me they are working on support
IXIA
Anyone know anything else about this?
SPIRENT
Maybe support OF switch simulation?
No docs, but informal assurance to LuisGomez
SPIRENT
Anyone know anything else about this?
Others?
Do you know of any other perf tools for controllers?
(contact slide soon)
PROPOSED FRAMEWORK
Properly architect controller perf testing landscape
PROPOSED FRAMEWORK
Enable code reuse
PROPOSED FRAMEWORK
Clarify test options for community
PROPOSED FRAMEWORK
Start with focus on ODL, iterate to generalize
PROPOSED FRAMEWORK
As it generalizes, bring in devs from other controller projects
PROPOSED FRAMEWORK
Start with IETF-recommended tests
PROPOSED FRAMEWORK
Honor "Better Tools Wishlist"
PROPOSED FRAMEWORK
Python for fast development and readability
(build elegantly first, optimize critical path if needed)
PROPOSED FRAMEWORK
Solid docs: Sphinx-style docstrings, guides
PROPOSED FRAMEWORK
All the obvious things
(tests, GitHub, Open Source, PEP8)
PROPOSED FRAMEWORK
In research phase
Input solicited!