Amos Kong writes:
> Add the support of executing multiple netperf clients on hosts,
> It can be used as a multi-nics stress test.
>
> Signed-off-by: Amos Kong <[email protected]>
> ---
> client/tests/kvm/tests/netperf.py | 49
> +++++++++++++++++++++++---------
> client/tests/kvm/tests_base.cfg.sample | 1 +
> 2 files changed, 36 insertions(+), 14 deletions(-)
>
> diff --git a/client/tests/kvm/tests/netperf.py
> b/client/tests/kvm/tests/netperf.py
> index df2c839..4f8b0a8 100644
> --- a/client/tests/kvm/tests/netperf.py
> +++ b/client/tests/kvm/tests/netperf.py
> @@ -1,16 +1,17 @@
> import logging, os, signal
> from autotest_lib.client.common_lib import error
> from autotest_lib.client.bin import utils
> -import kvm_subprocess
> +import kvm_subprocess, kvm_utils
>
>
> def run_netperf(test, params, env):
> """
> Network stress test with netperf.
>
> - 1) Boot up a VM.
> + 1) Boot up a VM with multiple nics.
> 2) Launch netserver on guest.
> - 3) Execute netperf client on host with different protocols.
> + 3) Execute multiple netperf clients on host in parallel
> + with different protocols.
> 4) Output the test result.
>
> @param test: KVM test object.
> @@ -20,12 +21,12 @@ def run_netperf(test, params, env):
> vm = env.get_vm(params["main_vm"])
> vm.verify_alive()
> login_timeout = int(params.get("login_timeout", 360))
> + session = vm.wait_for_login(timeout=login_timeout)
> + session.close()
> session_serial = vm.wait_for_serial_login(timeout=login_timeout)
>
> netperf_dir = os.path.join(os.environ['AUTODIR'], "tests/netperf2")
> setup_cmd = params.get("setup_cmd")
> - guest_ip = vm.get_address()
> - result_file = os.path.join(test.resultsdir, "output_%s" %
> test.iteration)
>
> firewall_flush = "iptables -F"
> session_serial.cmd_output(firewall_flush)
> @@ -56,34 +57,54 @@ def run_netperf(test, params, env):
> except:
> pass
>
> - try:
> - logging.info("Setup and run netperf client on host")
> - utils.run(setup_cmd % netperf_dir)
> + def netperf(i=0):
> + guest_ip = vm.get_address(i)
> + logging.info("Netperf_%s: netserver %s" % (i, guest_ip))
> + result_file = os.path.join(test.resultsdir, "output_%s_%s"
> + % (test.iteration, i ))
> list_fail = []
> result = open(result_file, "w")
> result.write("Netperf test results\n")
>
> - for i in params.get("protocols").split():
> + for p in params.get("protocols").split():
> packet_size = params.get("packet_size", "1500")
> for size in packet_size.split():
> - cmd = params.get("netperf_cmd") % (netperf_dir, i,
> + cmd = params.get("netperf_cmd") % (netperf_dir, p,
> guest_ip, size)
> - logging.info("Netperf: protocol %s", i)
> + logging.info("Netperf_%s: protocol %s" % (i, p))
> try:
> netperf_output = utils.system_output(cmd,
> retain_output=True)
> result.write("%s\n" % netperf_output)
> except:
> - logging.error("Test of protocol %s failed", i)
> - list_fail.append(i)
> + logging.error("Test of protocol %s failed", p)
> + list_fail.append(p)
>
> result.close()
> -
> if list_fail:
> raise error.TestFail("Some netperf tests failed: %s" %
> ", ".join(list_fail))
>
> + try:
> + logging.info("Setup and run netperf clients on host")
> + utils.run(setup_cmd % netperf_dir)
> +
> + bg = []
> + nic_num = len(params.get("nics").split())
> + for i in range(nic_num):
> + bg.append(kvm_utils.Thread(netperf, (i,)))
> + bg[i].start()
> +
> + completed = False
> + while not completed:
> + completed = True
> + for b in bg:
> + if b.is_alive():
> + completed = False
Is Thread.join() not enough?
> finally:
> + for b in bg:
> + if b:
> + b.join()
> session_serial.cmd_output("killall netserver")
> if tcpdump and pid:
> logging.debug("Resuming the background tcpdump")
> diff --git a/client/tests/kvm/tests_base.cfg.sample
> b/client/tests/kvm/tests_base.cfg.sample
> index c70c61b..89e2281 100644
> --- a/client/tests/kvm/tests_base.cfg.sample
> +++ b/client/tests/kvm/tests_base.cfg.sample
> @@ -701,6 +701,7 @@ variants:
> - netperf: install setup unattended_install.cdrom
> only Linux
> type = netperf
> + nics += ' nic2 nic3 nic4'
> nic_mode = tap
> netperf_files = netperf-2.4.5.tar.bz2 wait_before_data.patch
> packet_size = 1500
>
> _______________________________________________
> Autotest mailing list
> [email protected]
> http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest