qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC PATCH 12/14] KVM-test: Add a subtest of netperf


From: Lucas Meneghel Rodrigues
Subject: Re: [Qemu-devel] [RFC PATCH 12/14] KVM-test: Add a subtest of netperf
Date: Fri, 30 Jul 2010 13:32:11 -0300

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 <address@hidden>
> ---
>  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}'
> 
> 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]