From c62813e00fd3975fb3b7d94b7b633b68c65a6bf7 Mon Sep 17 00:00:00 2001 From: Hans Feldt Date: Wed, 20 May 2015 14:08:22 +0200 Subject: add ping benchmark type This simple benchmark can be used to measure network latency. Change-Id: I41f5b9f32544b2e668d39220fcfb87ed493f4baa JIRA: - Signed-off-by: Hans Feldt --- .../benchmark/scenarios/networking/__init__.py | 0 yardstick/benchmark/scenarios/networking/ping.py | 78 ++++++++++++++++++++++ .../scenarios/networking/ping_benchmark.bash | 22 ++++++ 3 files changed, 100 insertions(+) create mode 100644 yardstick/benchmark/scenarios/networking/__init__.py create mode 100644 yardstick/benchmark/scenarios/networking/ping.py create mode 100644 yardstick/benchmark/scenarios/networking/ping_benchmark.bash diff --git a/yardstick/benchmark/scenarios/networking/__init__.py b/yardstick/benchmark/scenarios/networking/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/yardstick/benchmark/scenarios/networking/ping.py b/yardstick/benchmark/scenarios/networking/ping.py new file mode 100644 index 000000000..cd4054fcd --- /dev/null +++ b/yardstick/benchmark/scenarios/networking/ping.py @@ -0,0 +1,78 @@ +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# ping scenario + +import pkg_resources +import logging + +import yardstick.ssh as ssh +from yardstick.benchmark.scenarios import base + +LOG = logging.getLogger(__name__) + + +class Ping(base.Scenario): + """Executes a ping benchmark between two hosts""" + __scenario_type__ = "Ping" + + TARGET_SCRIPT = 'ping_benchmark.bash' + + def __init__(self, context): + self.context = context + 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') + + LOG.debug("user:%s, host:%s", user, host) + + self.connection = ssh.SSH(user, host, key_filename=key_filename) + self.connection.wait() + + def run(self, args): + """execute the benchmark""" + + self.options = "-s %s" % args['options'].get("packetsize", '56') + self.ipaddr = args.get("ipaddr", '127.0.0.1') + + LOG.debug("ping %s %s", self.options, self.ipaddr) + + exit_status, stdout, stderr = self.connection.execute( + "/bin/sh -s {0} {1}".format(self.ipaddr, self.options), + stdin=open(self.target_script, "r")) + + if exit_status != 0: + raise RuntimeError(stderr) + + rtt = float(stdout) + + if "sla" in args: + sla_max_rtt = int(args["sla"]["max_rtt"]) + assert rtt <= sla_max_rtt, "rtt %f > sla_max_rtt" % rtt + + return rtt + + +def _test(): + '''internal test function''' + key_filename = pkg_resources.resource_filename('yardstick.resources', + 'files/yardstick_key') + ctx = {'host': '172.16.0.137', + 'user': 'cirros', + 'key_filename': key_filename} + p = Ping(ctx) + args = {'options': '-c 2 -s 200', + 'ipaddr': '172.16.0.138'} + result = p.run(args) + print result + +if __name__ == '__main__': + _test() diff --git a/yardstick/benchmark/scenarios/networking/ping_benchmark.bash b/yardstick/benchmark/scenarios/networking/ping_benchmark.bash new file mode 100644 index 000000000..6916b771a --- /dev/null +++ b/yardstick/benchmark/scenarios/networking/ping_benchmark.bash @@ -0,0 +1,22 @@ +#!/bin/bash + +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +# Run a single ping command towards a destination and outputs the round trip +# time in milliseconds on stdout. The count (-c) option is deliberately not +# supported since it is supposed to be handled by the runner. + +set -e + +destination=$1 +shift +options="$@" + +ping -c 1 $options $destination | grep ttl | awk -F [=\ ] '{printf $10}' -- cgit 1.2.3-korg