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 <ak...@redhat.com> > --- > 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 > Autotest@test.kernel.org > http://test.kernel.org/cgi-bin/mailman/listinfo/autotest _______________________________________________ Autotest mailing list Autotest@test.kernel.org http://test.kernel.org/cgi-bin/mailman/listinfo/autotest