OpenDaylight Performance Test Suite =================================== The performance tests in this suite use ODL's RESTCONF API to add/delete flows into/from ODL's configuration data store. The test suite contains the following scripts: - inventory_crawler.py: Retrieves all nodes from either the confg or operational data store and prints a flow summary to the console. Depending on the print level specified in a command line option, the summary can shows the overall number of flows in the network, the number of flows in each node, or detailed data for each flow - flow_config_blaster.py: Adds and deletes ("blasts") flows into ODL's config space. Command line options control the number of "blaster" threads, the number of blast cycles, the number of flows blasted in each cycle by each thread, etc. flow_config_blaster.py provides the FlowConfigBlaster class that is reusable in other tests, such as in flow_add_delete_test.py - config_cleanup.py: Cleans up the config data store by deleting the entire inventory. - flow_add_delete_test.py: Adds/deletes ("blasts") flows into ODL's config space. Similar to the flow_config_blaster (in fact, flow_config_blaster is used in this test), but has more advanced handling of the add/delete cycles. The test executes in three steps: 1. The specified number of flows is added in the 'add cycle' (uses flow_config_blaster to blast flows) 2. The network is polled for flow statistics statistics from the network (using the inventory_crawler) to make sure that all flows have been properly programmed into the network and stats can properly read them 3. The flows are deleted in the flow cycle (either in 'bulk' using the config_cleanup script or one by one using the flow_config_blaster) The Inventory Crawler: ====================== To see the command line options, type: > ./inventory_cralwer --help usage: inventory_crawler.py [-h] [--odlhost ODLHOST] [--odlport ODLPORT] [--plevel PLEVEL] [--datastore {operational,config}] [--no-auth] [--auth] [--debug] optional arguments: -h, --help show this help message and exit --odlhost ODLHOST host where odl controller is running (default is 127.0.0.1) --odlport ODLPORT port on which odl's RESTCONF is listening (default is 8181) --plevel PLEVEL Print Level: 0 - Summary (stats only); 1 - Node names; 2 - Node details;3 - Flow details --datastore {operational,config} Which data store to crawl; default operational --no-auth Do not use authenticated access to REST (default) --auth Use authenticated access to REST (username: 'admin', password: 'admin'). --debug List nodes that have not provided proper statistics data The Flow Config Blaster: ======================== To see the command line options, type: > ./flow_config_blaster.py --help usage: flow_config_blaster.py [-h] [--host HOST] [--port PORT] [--flows FLOWS] [--cycles CYCLES] [--threads THREADS] [--nodes NODES] [--delay DELAY] [--delete] [--no-delete] [--no-auth] [--auth] [--startflow STARTFLOW] optional arguments: -h, --help show this help message and exit --host HOST Host where odl controller is running (default is 127.0.0.1) --port PORT Port on which odl's RESTCONF is listening (default is 8181) --flows FLOWS Number of flow add/delete requests to send in each cycle; default 10 --cycles CYCLES Number of flow add/delete cycles to send in each thread; default 1 --threads THREADS Number of request worker threads, default=1. Each thread will add/delete nflows. --nodes NODES Number of nodes if mininet is not connected; default=16. If mininet is connected, flows will be evenly distributed (programmed) into connected nodes. --delay DELAY Time to wait between the add and delete cycles; default=0 --delete Delete all added flows one by one, benchmark delete performance. --no-delete Do not perform the delete cycle. --no-auth Do not use authenticated access to REST (default) --auth Use authenticated access to REST (username: 'admin', password: 'admin'). --startflow STARTFLOW The starting Flow ID; default=0 The 'startflow' command line parameter is used with multiple flow_config_blasters blasting flows at the same ODL instance. With Python's GIL any given blastr can not use more than one CPU even when multiple blaster threads are specified. Therefore, multiple blaster processes must be used to test ODL's preformance limits. The 'startflow' parameter gives each blaster process its own flow id space so that each injects unique flows into ODL's config data store. The Config Cleanup ================== To see the command line options, type: > ./config_cleanup.py --help usage: config_cleanup.py [-h] [--odlhost ODLHOST] [--odlport ODLPORT] [--no-auth] [--auth] Cleans up the config space optional arguments: -h, --help show this help message and exit --odlhost ODLHOST host where odl controller is running (default is 127.0.0.1) --odlport ODLPORT port on which odl's RESTCONF is listening (default is 8181) --no-auth Do not use authenticated access to REST (default) --auth Use authenticated access to REST (username: 'admin', password: 'admin'). The Flow Add/Delete Test ======================== To see the command line options, type: >./flow_add_delete_test.py --help usage: flow_add_delete_test.py [-h] [--host HOST] [--port PORT] [--flows FLOWS] [--cycles CYCLES] [--threads THREADS] [--nodes NODES] [--delay DELAY] [--timeout TIMEOUT] [--delete] [--bulk-delete] [--auth] [--startflow STARTFLOW] Flow programming performance test: First adds and then deletes flows into the config tree, as specified by optional parameters. optional arguments: -h, --help show this help message and exit --host HOST Host where odl controller is running (default is 127.0.0.1) --port PORT Port on which odl's RESTCONF is listening (default is 8181) --flows FLOWS Number of flow add/delete requests to send in each cycle; default 10 --cycles CYCLES Number of flow add/delete cycles to send in each thread; default 1 --threads THREADS Number of request worker threads, default=1. Each thread will add/delete nflows. --nodes NODES Number of nodes if mininet is not connected; default=16. If mininet is connected, flows will be evenly distributed (programmed) into connected nodes. --delay DELAY Time to wait between the add and delete cycles; default=0 --timeout TIMEOUT The maximum time to wait between the add and delete cycles; default=100 --delete Delete all added flows one by one, benchmark delete performance. --bulk-delete Delete all flows in bulk; default=False --auth Use authenticated access to REST (username: 'admin', password: 'admin'); default=False --startflow STARTFLOW The starting Flow ID; default=0