diff options
author | QiLiang <liangqi1@huawei.com> | 2015-10-21 12:29:53 +0000 |
---|---|---|
committer | QiLiang <liangqi1@huawei.com> | 2015-10-27 03:34:28 +0000 |
commit | 2e1094d4aee93180126d3ce86db3cc7df2e87bc5 (patch) | |
tree | 221e98fd325ff6fcb4fbbb3e656a3789f3a77342 /yardstick/benchmark/scenarios/networking | |
parent | 884926d05f435217c7dac038b3bfbd7e9d05826b (diff) |
Heat context code refactor part 2
Heat context code refactor to cater for the evolution of the
Yardstick framework.
Refactor runner_cfg host/target info handle, as specified at
https://etherpad.opnfv.org/p/yardstick_framework
step 4. Get general Context info (use Context.get).
Before this refactor host and target vm must have the same user name
and ssh key, that is not general enough for later extension.
test_case.yaml do NOT need to change.
JIRA: YARDSTICK-168
Change-Id: I5cfe868f3c6f633214ef550bc9676fe1de0709db
Signed-off-by: QiLiang <liangqi1@huawei.com>
Diffstat (limited to 'yardstick/benchmark/scenarios/networking')
-rw-r--r-- | yardstick/benchmark/scenarios/networking/iperf3.py | 95 | ||||
-rwxr-xr-x | yardstick/benchmark/scenarios/networking/netperf.py | 88 | ||||
-rw-r--r-- | yardstick/benchmark/scenarios/networking/ping.py | 58 | ||||
-rw-r--r-- | yardstick/benchmark/scenarios/networking/pktgen.py | 69 |
4 files changed, 192 insertions, 118 deletions
diff --git a/yardstick/benchmark/scenarios/networking/iperf3.py b/yardstick/benchmark/scenarios/networking/iperf3.py index a324c5b85..86610c88f 100644 --- a/yardstick/benchmark/scenarios/networking/iperf3.py +++ b/yardstick/benchmark/scenarios/networking/iperf3.py @@ -48,32 +48,39 @@ For more info see http://software.es.net/iperf """ __scenario_type__ = "Iperf3" - def __init__(self, context): - self.context = context - self.user = context.get('user', 'ubuntu') - self.host_ipaddr = context['host'] - self.target_ipaddr = context['target'] - self.key_filename = self.context.get('key_filename', '~/.ssh/id_rsa') + def __init__(self, scenario_cfg, context_cfg): + self.scenario_cfg = scenario_cfg + self.context_cfg = context_cfg self.setup_done = False def setup(self): - LOG.debug("setup, key %s", self.key_filename) - LOG.info("host:%s, user:%s", self.host_ipaddr, self.user) - self.host = ssh.SSH(self.user, self.host_ipaddr, - key_filename=self.key_filename) - self.host.wait(timeout=600) - - LOG.info("target:%s, user:%s", self.target_ipaddr, self.user) - self.target = ssh.SSH(self.user, self.target_ipaddr, - key_filename=self.key_filename) + host = self.context_cfg['host'] + host_user = host.get('user', 'ubuntu') + host_ip = host.get('ip', None) + host_key_filename = host.get('key_filename', '~/.ssh/id_rsa') + target = self.context_cfg['target'] + target_user = target.get('user', 'ubuntu') + target_ip = target.get('ip', None) + target_key_filename = target.get('key_filename', '~/.ssh/id_rsa') + + LOG.info("user:%s, target:%s", target_user, target_ip) + self.target = ssh.SSH(target_user, target_ip, + key_filename=target_key_filename) self.target.wait(timeout=600) + LOG.info("user:%s, host:%s", host_user, host_ip) + self.host = ssh.SSH(host_user, host_ip, + key_filename=host_key_filename) + self.host.wait(timeout=600) + cmd = "iperf3 -s -D" LOG.debug("Starting iperf3 server with command: %s", cmd) status, _, stderr = self.target.execute(cmd) if status: raise RuntimeError(stderr) + self.setup_done = True + def teardown(self): LOG.debug("teardown") self.host.close() @@ -82,14 +89,17 @@ For more info see http://software.es.net/iperf LOG.warn(stderr) self.target.close() - def run(self, args, result): + def run(self, result): """execute the benchmark""" + if not self.setup_done: + self.setup() # if run by a duration runner, get the duration time and setup as arg - time = self.context.get('duration', None) - options = args['options'] + time = self.scenario_cfg["runner"].get("duration", None) \ + if "runner" in self.scenario_cfg else None + options = self.scenario_cfg['options'] - cmd = "iperf3 -c %s --json" % (self.target_ipaddr) + cmd = "iperf3 -c %s --json" % (self.context_cfg['target']['ipaddr']) # If there are no options specified if not options: @@ -124,8 +134,8 @@ For more info see http://software.es.net/iperf result.update(json.loads(stdout)) - if "sla" in args: - sla_iperf = args["sla"] + if "sla" in self.scenario_cfg: + sla_iperf = self.scenario_cfg["sla"] if not use_UDP: sla_bytes_per_second = int(sla_iperf["bytes_per_second"]) @@ -147,31 +157,32 @@ For more info see http://software.es.net/iperf def _test(): '''internal test function''' + key_filename = pkg_resources.resource_filename('yardstick.resources', + 'files/yardstick_key') + ctx = { + 'host': { + 'ip': '10.229.47.137', + 'user': 'root', + 'key_filename': key_filename + }, + 'target': { + 'ip': '10.229.47.137', + 'user': 'root', + 'key_filename': key_filename, + 'ipaddr': '10.229.47.137', + } + } logger = logging.getLogger('yardstick') logger.setLevel(logging.DEBUG) - key_filename = pkg_resources.resource_filename('yardstick.resources', - 'files/yardstick_key') - runner_cfg = {} - runner_cfg['type'] = 'Duration' - runner_cfg['duration'] = 5 - runner_cfg['host'] = '10.0.2.33' - runner_cfg['target_ipaddr'] = '10.0.2.53' - runner_cfg['user'] = 'ubuntu' - runner_cfg['output_filename'] = "/tmp/yardstick.out" - runner_cfg['key_filename'] = key_filename - - scenario_args = {} - scenario_args['options'] = {"bytes": 10000000000} - scenario_args['sla'] = \ - {"bytes_per_second": 2900000000, "action": "monitor"} - - from yardstick.benchmark.runners import base as base_runner - runner = base_runner.Runner.get(runner_cfg) - runner.run("Iperf3", scenario_args) - runner.join() - base_runner.Runner.release(runner) + options = {'packetsize': 120} + args = {'options': options} + result = {} + + p = Iperf(args, ctx) + p.run(result) + print result if __name__ == '__main__': _test() diff --git a/yardstick/benchmark/scenarios/networking/netperf.py b/yardstick/benchmark/scenarios/networking/netperf.py index fb5497089..dcd4ef7b6 100755 --- a/yardstick/benchmark/scenarios/networking/netperf.py +++ b/yardstick/benchmark/scenarios/networking/netperf.py @@ -50,8 +50,9 @@ class Netperf(base.Scenario): TARGET_SCRIPT = 'netperf_benchmark.bash' - def __init__(self, context): - self.context = context + def __init__(self, scenario_cfg, context_cfg): + self.scenario_cfg = scenario_cfg + self.context_cfg = context_cfg self.setup_done = False def setup(self): @@ -59,18 +60,24 @@ class Netperf(base.Scenario): self.target_script = pkg_resources.resource_filename( 'yardstick.benchmark.scenarios.networking', Netperf.TARGET_SCRIPT) - user = self.context.get('user', 'ubuntu') - host = self.context.get('host', None) - target = self.context.get('target', None) - key_filename = self.context.get('key_filename', '~/.ssh/id_rsa') + host = self.context_cfg['host'] + host_user = host.get('user', 'ubuntu') + host_ip = host.get('ip', None) + host_key_filename = host.get('key_filename', '~/.ssh/id_rsa') + target = self.context_cfg['target'] + target_user = target.get('user', 'ubuntu') + target_ip = target.get('ip', None) + target_key_filename = target.get('key_filename', '~/.ssh/id_rsa') # netserver start automatically during the vm boot - LOG.info("user:%s, target:%s", user, target) - self.server = ssh.SSH(user, target, key_filename=key_filename) + LOG.info("user:%s, target:%s", target_user, target_ip) + self.server = ssh.SSH(target_user, target_ip, + key_filename=target_key_filename) self.server.wait(timeout=600) - LOG.info("user:%s, host:%s", user, host) - self.client = ssh.SSH(user, host, key_filename=key_filename) + LOG.info("user:%s, host:%s", host_user, host_ip) + self.client = ssh.SSH(host_user, host_ip, + key_filename=host_key_filename) self.client.wait(timeout=600) # copy script to host @@ -79,17 +86,18 @@ class Netperf(base.Scenario): self.setup_done = True - def run(self, args, result): + def run(self, result): """execute the benchmark""" if not self.setup_done: self.setup() # get global options - ipaddr = args.get("ipaddr", '127.0.0.1') - options = args['options'] + ipaddr = self.context_cfg['target'].get("ipaddr", '127.0.0.1') + options = self.scenario_cfg['options'] testname = options.get("testname", 'TCP_STREAM') - duration_time = self.context.get("duration", None) + duration_time = self.scenario_cfg["runner"].get("duration", None) \ + if "runner" in self.scenario_cfg else None arithmetic_time = options.get("duration", None) if duration_time: testlen = duration_time @@ -125,8 +133,9 @@ class Netperf(base.Scenario): # sla check mean_latency = float(result['mean_latency']) - if "sla" in args: - sla_max_mean_latency = int(args["sla"]["mean_latency"]) + if "sla" in self.scenario_cfg: + sla_max_mean_latency = int( + self.scenario_cfg["sla"]["mean_latency"]) assert mean_latency <= sla_max_mean_latency, \ "mean_latency %f > sla_max_mean_latency(%f); " % \ @@ -135,28 +144,35 @@ class Netperf(base.Scenario): def _test(): '''internal test function''' - logger = logging.getLogger('yardstick') + key_filename = pkg_resources.resource_filename("yardstick.resources", + "files/yardstick_key") + ctx = { + "host": { + "ip": "10.229.47.137", + "user": "root", + "key_filename": key_filename + }, + "target": { + "ip": "10.229.47.137", + "user": "root", + "key_filename": key_filename, + "ipaddr": "10.229.47.137" + } + } + + logger = logging.getLogger("yardstick") logger.setLevel(logging.DEBUG) - key_filename = pkg_resources.resource_filename('yardstick.resources', - 'files/yardstick_key') - runner_cfg = {} - runner_cfg['type'] = 'Duration' - runner_cfg['duration'] = 5 - runner_cfg['clinet'] = '10.0.2.33' - runner_cfg['server'] = '10.0.2.53' - runner_cfg['user'] = 'ubuntu' - runner_cfg['output_filename'] = "/tmp/yardstick.out" - runner_cfg['key_filename'] = key_filename - - scenario_args = {} - scenario_args['options'] = {"testname": 'TCP_STREAM'} - - from yardstick.benchmark.runners import base as base_runner - runner = base_runner.Runner.get(runner_cfg) - runner.run("Netperf", scenario_args) - runner.join() - base_runner.Runner.release(runner) + options = { + "testname": 'TCP_STREAM' + } + + args = {"options": options} + result = {} + + netperf = Netperf(args, ctx) + netperf.run(result) + print result if __name__ == '__main__': _test() diff --git a/yardstick/benchmark/scenarios/networking/ping.py b/yardstick/benchmark/scenarios/networking/ping.py index 10964350b..34278b90f 100644 --- a/yardstick/benchmark/scenarios/networking/ping.py +++ b/yardstick/benchmark/scenarios/networking/ping.py @@ -32,28 +32,31 @@ class Ping(base.Scenario): TARGET_SCRIPT = 'ping_benchmark.bash' - def __init__(self, context): - self.context = context + def __init__(self, scenario_cfg, context_cfg): + self.scenario_cfg = scenario_cfg + self.context_cfg = context_cfg self.target_script = pkg_resources.resource_filename( 'yardstick.benchmark.scenarios.networking', Ping.TARGET_SCRIPT) - user = self.context.get('user', 'ubuntu') - host = self.context.get('host', None) - key_filename = self.context.get('key_filename', '~/.ssh/id_rsa') + host = self.context_cfg['host'] + user = host.get('user', 'ubuntu') + ip = host.get('ip', None) + key_filename = host.get('key_filename', '~/.ssh/id_rsa') - LOG.info("user:%s, host:%s", user, host) + LOG.info("user:%s, host:%s", user, ip) - self.connection = ssh.SSH(user, host, key_filename=key_filename) + self.connection = ssh.SSH(user, ip, key_filename=key_filename) self.connection.wait() - def run(self, args, result): + def run(self, result): """execute the benchmark""" - if "options" in args: - options = "-s %s" % args['options'].get("packetsize", '56') + if "options" in self.scenario_cfg: + options = "-s %s" % \ + self.scenario_cfg['options'].get("packetsize", '56') else: options = "" - destination = args.get("ipaddr", '127.0.0.1') + destination = self.context_cfg['target'].get("ipaddr", '127.0.0.1') LOG.debug("ping '%s' '%s'", options, destination) @@ -66,7 +69,36 @@ class Ping(base.Scenario): result["rtt"] = float(stdout) - if "sla" in args: - sla_max_rtt = int(args["sla"]["max_rtt"]) + if "sla" in self.scenario_cfg: + sla_max_rtt = int(self.scenario_cfg["sla"]["max_rtt"]) assert result["rtt"] <= sla_max_rtt, "rtt %f > sla:max_rtt(%f); " % \ (result["rtt"], sla_max_rtt) + + +def _test(): + '''internal test function''' + key_filename = pkg_resources.resource_filename("yardstick.resources", + "files/yardstick_key") + ctx = { + "host": { + "ip": "10.229.47.137", + "user": "root", + "key_filename": key_filename + }, + "target": { + "ipaddr": "10.229.17.105", + } + } + + logger = logging.getLogger("yardstick") + logger.setLevel(logging.DEBUG) + + args = {} + result = {} + + p = Ping(args, ctx) + p.run(result) + print result + +if __name__ == '__main__': + _test() diff --git a/yardstick/benchmark/scenarios/networking/pktgen.py b/yardstick/benchmark/scenarios/networking/pktgen.py index f373fd2ec..9dac4c90c 100644 --- a/yardstick/benchmark/scenarios/networking/pktgen.py +++ b/yardstick/benchmark/scenarios/networking/pktgen.py @@ -37,8 +37,9 @@ class Pktgen(base.Scenario): TARGET_SCRIPT = 'pktgen_benchmark.bash' - def __init__(self, context): - self.context = context + def __init__(self, scenario_cfg, context_cfg): + self.scenario_cfg = scenario_cfg + self.context_cfg = context_cfg self.setup_done = False def setup(self): @@ -46,17 +47,23 @@ class Pktgen(base.Scenario): self.target_script = pkg_resources.resource_filename( 'yardstick.benchmark.scenarios.networking', Pktgen.TARGET_SCRIPT) - user = self.context.get('user', 'ubuntu') - host = self.context.get('host', None) - target = self.context.get('target', None) - key_filename = self.context.get('key_filename', '~/.ssh/id_rsa') - - LOG.info("user:%s, target:%s", user, target) - self.server = ssh.SSH(user, target, key_filename=key_filename) + host = self.context_cfg['host'] + host_user = host.get('user', 'ubuntu') + host_ip = host.get('ip', None) + host_key_filename = host.get('key_filename', '~/.ssh/id_rsa') + target = self.context_cfg['target'] + target_user = target.get('user', 'ubuntu') + target_ip = target.get('ip', None) + target_key_filename = target.get('key_filename', '~/.ssh/id_rsa') + + LOG.info("user:%s, target:%s", target_user, target_ip) + self.server = ssh.SSH(target_user, target_ip, + key_filename=target_key_filename) self.server.wait(timeout=600) - LOG.info("user:%s, host:%s", user, host) - self.client = ssh.SSH(user, host, key_filename=key_filename) + LOG.info("user:%s, host:%s", host_user, host_ip) + self.client = ssh.SSH(host_user, host_ip, + key_filename=host_key_filename) self.client.wait(timeout=600) # copy script to host @@ -86,19 +93,20 @@ class Pktgen(base.Scenario): raise RuntimeError(stderr) return int(stdout) - def run(self, args, result): + def run(self, result): """execute the benchmark""" if not self.setup_done: self.setup() - ipaddr = args.get("ipaddr", '127.0.0.1') + ipaddr = self.context_cfg["target"].get("ipaddr", '127.0.0.1') - options = args['options'] + options = self.scenario_cfg['options'] packetsize = options.get("packetsize", 60) self.number_of_ports = options.get("number_of_ports", 10) # if run by a duration runner - duration_time = self.context.get("duration", None) + duration_time = self.scenario_cfg["runner"].get("duration", None) \ + if "runner" in self.scenario_cfg else None # if run by an arithmetic runner arithmetic_time = options.get("duration", None) @@ -123,11 +131,11 @@ class Pktgen(base.Scenario): result['packets_received'] = self._iptables_get_result() - if "sla" in args: + if "sla" in self.scenario_cfg: sent = result['packets_sent'] received = result['packets_received'] ppm = 1000000 * (sent - received) / sent - sla_max_ppm = int(args["sla"]["max_ppm"]) + sla_max_ppm = int(self.scenario_cfg["sla"]["max_ppm"]) assert ppm <= sla_max_ppm, "ppm %d > sla_max_ppm %d; " \ % (ppm, sla_max_ppm) @@ -136,22 +144,29 @@ def _test(): '''internal test function''' key_filename = pkg_resources.resource_filename('yardstick.resources', 'files/yardstick_key') - ctx = {'host': '172.16.0.137', - 'target': '172.16.0.138', - 'user': 'ubuntu', - 'key_filename': key_filename - } + ctx = { + 'host': { + 'ip': '10.229.47.137', + 'user': 'root', + 'key_filename': key_filename + }, + 'target': { + 'ip': '10.229.47.137', + 'user': 'root', + 'key_filename': key_filename, + 'ipaddr': '10.229.47.137', + } + } logger = logging.getLogger('yardstick') logger.setLevel(logging.DEBUG) - p = Pktgen(ctx) - options = {'packetsize': 120} + args = {'options': options} + result = {} - args = {'options': options, - 'ipaddr': '192.168.111.31'} - result = p.run(args) + p = Pktgen(args, ctx) + p.run(result) print result if __name__ == '__main__': |