Index: client/tests/kvm/tests/netperf.py |
diff --git a/client/tests/kvm/tests/netperf.py b/client/tests/kvm/tests/netperf.py |
index df2c839588704357a333d55180527b8fc6bf2ca7..5fdd4813c8be3db74466101131f0271a3b323920 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 |
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") |