On Tue, 2010-07-20 at 09:36 +0800, Amos Kong wrote: > Add network load by netperf, server is launched on guest, execute netperf > client with different protocols on host. if all clients execute successfully, > case will be pass. Test result will be record into result.txt. > Now this case only tests with "TCP_RR TCP_CRR UDP_RR TCP_STREAM TCP_MAERTS > TCP_SENDFILE UDP_STREAM". DLPI only supported by Unix, unix domain test is > not necessary, so drop test of DLPI and unix domain. Some general thoughts about this test: * netperf2 has a fairly good wrapper code, that can do postprocessing of the results. It'd be good to make use of it. What I was thinking: - Import the netperf2 wrapper class on host and call run_once with appropriate parameters on host - Create a client control file and run it on guest using kvm_test_utils.run_autotest() - As this approach wouldn't work on windows, we could make a netperf_windows test that would be very much like this test. Of course, we could do that on a later time, I don't think it is something urgent anyway. > Signed-off-by: Amos Kong <akong@xxxxxxxxxx> > --- > 0 files changed, 0 insertions(+), 0 deletions(-) > > diff --git a/client/tests/kvm/tests/netperf.py b/client/tests/kvm/tests/netperf.py > new file mode 100644 > index 0000000..00a91f0 > --- /dev/null > +++ b/client/tests/kvm/tests/netperf.py > @@ -0,0 +1,56 @@ > +import logging, commands, os > +from autotest_lib.client.common_lib import error > +import kvm_subprocess, kvm_test_utils, kvm_utils > + > +def run_netperf(test, params, env): > + """ > + Network stress test with netperf > + > + 1) Boot up a virtual machine > + 2) Launch netserver on guest > + 3) Execute netperf client on host with different protocols > + 4) Outout the test result > + > + @param test: Kvm test object > + @param params: Dictionary with the test parameters. > + @param env: Dictionary with test environment. > + """ > + vm = kvm_test_utils.get_living_vm(env, params.get("main_vm")) > + session = kvm_test_utils.wait_for_login(vm, > + timeout=int(params.get("login_timeout", 360))) > + 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.debugdir, "result.txt") ^ test.resultsdir would be better. Also, it's better if we take into account the fact that we can have more than one iteration of the test, so we'd have something like: self.results_path = os.path.join(self.resultsdir, 'raw_output_%s' %self.iteration) Which is what we are doing currently for other benchmarks. > + session.get_command_output("service iptables stop") ^ Again I think it'd be better to simply flush the firewall rules with iptables -F because that's more likely to work on different linux guests. Also, this linux specific command makes the entire test linux specific, so we have to put a rule telling the kvm autotest to not run it on windows guests. > + for i in params.get("netperf_files").split(): > + if not vm.copy_files_to(os.path.join(netperf_dir, i), "/tmp"): > + raise error.TestError("Could not copy files to guest") > + if session.get_command_status(setup_cmd % "/tmp", timeout=100) != 0: > + raise error.TestFail("Fail to setup netperf on guest") > + if session.get_command_status(params.get("netserver_cmd") % "/tmp") != 0: > + raise error.TestFail("Fail to start netperf server on guest") > + > + try: > + logging.info("Setup and run netperf client on host") > + s, o = commands.getstatusoutput(setup_cmd % netperf_dir) > + if s != 0: > + raise error.TestFail("Fail to setup netperf on host, o: %s" % o) > + success = True > + file(result_file, "w").write("Netperf Test Result\n") > + for i in params.get("protocols").split(): > + cmd = params.get("netperf_cmd") % (netperf_dir, i, guest_ip) > + logging.debug("Execute netperf client test: %s" % cmd) > + s, o = commands.getstatusoutput(cmd) > + if s != 0: > + logging.error("Fail to execute netperf test, protocol:%s" % i) > + success = False > + else: > + logging.info(o) > + file(result_file, "a+").write("%s\n" % o) > + if not success: > + raise error.TestFail("Not all the test passed") ^ "Some of the netperf tests failed" > + finally: > + session.get_command_output("killall netserver") > + session.close() > diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample > index 7716d48..dec988e 100644 > --- a/client/tests/kvm/tests_base.cfg.sample > +++ b/client/tests/kvm/tests_base.cfg.sample > @@ -398,6 +398,16 @@ variants: > type = mac_change > kill_vm = yes > > + - netperf: install setup unattended_install.cdrom > + type = netperf > + nic_mode = tap > + netperf_files = netperf-2.4.5.tar.bz2 wait_before_data.patch > + setup_cmd = "cd %s && tar xvfj netperf-2.4.5.tar.bz2 && cd netperf-2.4.5 && patch -p0 < ../wait_before_data.patch && ./configure && make" > + netserver_cmd = %s/netperf-2.4.5/src/netserver > + # test time is 60 seconds, set the buffer size to 1 for more hardware interrupt > + netperf_cmd = %s/netperf-2.4.5/src/netperf -t %s -H %s -l 60 -- -m 1 > + protocols = "TCP_STREAM TCP_MAERTS TCP_RR TCP_CRR UDP_RR TCP_SENDFILE UDP_STREAM" > + > - physical_resources_check: install setup unattended_install.cdrom > type = physical_resources_check > catch_uuid_cmd = dmidecode | awk -F: '/UUID/ {print $2}' > > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html