From d7fd300e9a9bd480ad9f1500494021c42ec6ecee Mon Sep 17 00:00:00 2001 From: Hans Feldt Date: Fri, 26 Jun 2015 11:53:21 +0200 Subject: Add support to list and show runners & scenarios Example usage and output: $ yardstick runner list +------------------------------------------------------------------------------+ | Type | Description +------------------------------------------------------------------------------+ | Duration | Run a scenario for a certain amount of time | Arithmetic | Run a scenario arithmetically stepping an input value | Constant | Run a scenario a certain number of times +------------------------------------------------------------------------------+ $ yardstick runner show Duration Run a scenario for a certain amount of time If the scenario ends before the time has elapsed, it will be started again. Parameters duration - amount of time the scenario will be run for type: int unit: seconds default: 1 sec interval - time to wait between each scenario invocation type: int unit: seconds default: 1 sec $ yardstick scenario list +------------------------------------------------------------------------------+ | Type | Description +------------------------------------------------------------------------------+ | Iperf3 | Execute iperf3 between two hosts | Pktgen | Execute pktgen between two hosts | Ping | Execute ping between two hosts +------------------------------------------------------------------------------+ $ yardstick scenario show Iperf3 Execute iperf3 between two hosts By default TCP is used but UDP can also be configured. For more info see http://software.es.net/iperf Parameters bytes - number of bytes to transmit only valid with a non duration runner, mutually exclusive with blockcount type: int unit: bytes default: 56 udp - use UDP rather than TCP type: bool unit: na default: false nodelay - set TCP no delay, disabling Nagle's Algorithm type: bool unit: na default: false blockcount - number of blocks (packets) to transmit, only valid with a non duration runner, mutually exclusive with bytes type: int unit: bytes default: - JIRA: - Change-Id: If218e129a30af7e20792190003c214677e732252 Signed-off-by: Hans Feldt --- yardstick/benchmark/scenarios/base.py | 17 ++++++++++++++ yardstick/benchmark/scenarios/networking/iperf3.py | 26 +++++++++++++++++++++- yardstick/benchmark/scenarios/networking/ping.py | 10 ++++++++- yardstick/benchmark/scenarios/networking/pktgen.py | 6 ++++- 4 files changed, 56 insertions(+), 3 deletions(-) (limited to 'yardstick/benchmark/scenarios') diff --git a/yardstick/benchmark/scenarios/base.py b/yardstick/benchmark/scenarios/base.py index e1e31fd2a..8146067ba 100644 --- a/yardstick/benchmark/scenarios/base.py +++ b/yardstick/benchmark/scenarios/base.py @@ -27,6 +27,23 @@ class Scenario(object): ''' default impl for scenario teardown ''' pass + @staticmethod + def get_types(): + '''return a list of known runner type (class) names''' + scenarios = [] + for scenario in utils.itersubclasses(Scenario): + scenarios.append(scenario) + return scenarios + + @staticmethod + def get_cls(scenario_type): + '''return class of specified type''' + for scenario in utils.itersubclasses(Scenario): + if scenario_type == scenario.__scenario_type__: + return scenario + + raise RuntimeError("No such scenario type %s" % scenario_type) + @staticmethod def get(scenario_type): """Returns instance of a scenario runner for execution type. diff --git a/yardstick/benchmark/scenarios/networking/iperf3.py b/yardstick/benchmark/scenarios/networking/iperf3.py index 9901444cd..88423725e 100644 --- a/yardstick/benchmark/scenarios/networking/iperf3.py +++ b/yardstick/benchmark/scenarios/networking/iperf3.py @@ -22,7 +22,31 @@ LOG.setLevel(logging.DEBUG) class Iperf(base.Scenario): - """Executes an iperf3 benchmark between two hosts""" + """Execute iperf3 between two hosts + +By default TCP is used but UDP can also be configured. +For more info see http://software.es.net/iperf + + Parameters + bytes - number of bytes to transmit + only valid with a non duration runner, mutually exclusive with blockcount + type: int + unit: bytes + default: 56 + udp - use UDP rather than TCP + type: bool + unit: na + default: false + nodelay - set TCP no delay, disabling Nagle's Algorithm + type: bool + unit: na + default: false + blockcount - number of blocks (packets) to transmit, + only valid with a non duration runner, mutually exclusive with bytes + type: int + unit: bytes + default: - + """ __scenario_type__ = "Iperf3" def __init__(self, context): diff --git a/yardstick/benchmark/scenarios/networking/ping.py b/yardstick/benchmark/scenarios/networking/ping.py index ddf6864dc..630b007c2 100644 --- a/yardstick/benchmark/scenarios/networking/ping.py +++ b/yardstick/benchmark/scenarios/networking/ping.py @@ -19,7 +19,15 @@ LOG = logging.getLogger(__name__) class Ping(base.Scenario): - """Executes a ping benchmark between two hosts""" + """Execute ping between two hosts + + Parameters + packetsize - number of data bytes to send + type: int + unit: bytes + default: 56 + """ + __scenario_type__ = "Ping" TARGET_SCRIPT = 'ping_benchmark.bash' diff --git a/yardstick/benchmark/scenarios/networking/pktgen.py b/yardstick/benchmark/scenarios/networking/pktgen.py index 8038cad60..430c95905 100644 --- a/yardstick/benchmark/scenarios/networking/pktgen.py +++ b/yardstick/benchmark/scenarios/networking/pktgen.py @@ -18,7 +18,11 @@ LOG.setLevel(logging.DEBUG) class Pktgen(base.Scenario): - """Executes a pktgen benchmark between two hosts""" + """Execute pktgen between two hosts + + Parameters + TBD + """ __scenario_type__ = "Pktgen" TARGET_SCRIPT = 'pktgen_benchmark.bash' -- cgit 1.2.3-korg