Overview

The purpose of this page is to provide a dumping ground for side-by-side comparisons of OpenFlow controllers.

The OpenFlow ecosystem has seen rise to numerous controllers in multiple languages (C, C++, Java, Python and Ruby for starters). And while often raw performance numbers are published, to date there has been no central repository for performance comparisons using the same methodology. This page is very much a work in progress and only covers 4 controller implementations.

Controllers

NOX: A C++/Python controller built and open sourced by Nicira Networks [1]

Connectivity: machines are connected via 2 directly attached gigabit links. Directly connected interfaces have IP addresses in the same broadcast domain. The second connection is used to run a second instance of the benchmarker software in case more bandwidth is needed for the test.

Controller configuration:

nox: must be configured with "--enable-ndebug" passed to the configure script.

nox_d: must be configured with "--enable-ndebug --with-python=no" passed to the configure script.

beacon: see beacon.ini

maestro: see conf/openflow.conf

Control application used: Layer-2 learning switch application. The switch application is a good representative of the controller flow handling performance with tunable read/write ratio (number of unique MAC addresses).

Setting CPU affinity for controllers: The following script binds the running threads of a controller to different CPUs (on an 8-core system). Just replace $CTRLNAME with a unique part of controller's binary name (e.g., nox for nox and nox_d). (maestro's runbackground already sets cpu affinity).

Run with cbench -c $ctrladdr -p $port -s $nswitch -m $duration -l $loop -t where $ctrladdr and $port are controller IP address and port number respectively, $nswitch is the number of emulated switches, $duration is the duration of test, and $loop is the number of times to repeat the test. The -t option is for running the throughput test: omit it for the latency test.