From: Lucas Meneghel Rodrigues <lmr@redhat.com>
To: autotest@test.kernel.org
Cc: kvm@vger.kernel.org, Alexey Eromenko <aeromenk@redhat.com>,
Yaniv Kaul <ykaul@redhat.com>
Subject: Re: [KVM-AUTOTEST PATCH] Adding iperf test
Date: Tue, 16 Jun 2009 18:40:25 -0300 [thread overview]
Message-ID: <1245188453.2894.9.camel@freedom> (raw)
In-Reply-To: <1245187799-7757-1-git-send-email-lmr@redhat.com>
On Tue, 2009-06-16 at 18:29 -0300, Lucas Meneghel Rodrigues wrote:
> Adding iperf network performance test. Basically it tests
> networking functionality, stability and performance of guest OSes.
> This test is cross-platform -- i.e. it works on both Linux and
> Windows VMs.
Ok, now that I had rebased the test, I have a few comments to say:
* I don't like the idea to ship binaries inside the test. Fair enough
that we don't support other archs than x86 and x86_64 (also there's the
problem windows usually doesn't ship a working toolchain), but I would
like to think a bit more about it.
* Autotest already does have an iperf test, that could be used on Linux
guests. Sure there's a problem of matching what's being executed on
windows, but it's worth a look
* Autotest iperf test usually runs with 2 machines, one in 'server'
role and other in 'client' mode. I would like to pursue the same model,
2 vms, one running as a server and another as a client.
Alexey and Yaniv, I'd like to hear your opinions on this.
Thanks,
> Signed-off-by: Alexey Eromenko <aeromenk@redhat.com>
> ---
> client/tests/kvm/kvm.py | 1 +
> client/tests/kvm/kvm_iperf.py | 105 +++++++++++++++++++++++++++++++++
> client/tests/kvm/kvm_tests.cfg.sample | 8 +++
> 3 files changed, 114 insertions(+), 0 deletions(-)
> create mode 100644 client/tests/kvm/kvm_iperf.py
>
> diff --git a/client/tests/kvm/kvm.py b/client/tests/kvm/kvm.py
> index 9428162..e1a6e27 100644
> --- a/client/tests/kvm/kvm.py
> +++ b/client/tests/kvm/kvm.py
> @@ -53,6 +53,7 @@ class kvm(test.test):
> "autotest": test_routine("kvm_tests", "run_autotest"),
> "kvm_install": test_routine("kvm_install", "run_kvm_install"),
> "linux_s3": test_routine("kvm_tests", "run_linux_s3"),
> + "iperf": test_routine("kvm_iperf", "run_iperf"),
> }
>
> # Make it possible to import modules from the test's bindir
> diff --git a/client/tests/kvm/kvm_iperf.py b/client/tests/kvm/kvm_iperf.py
> new file mode 100644
> index 0000000..927c9e5
> --- /dev/null
> +++ b/client/tests/kvm/kvm_iperf.py
> @@ -0,0 +1,105 @@
> +import time, os, logging
> +from autotest_lib.client.common_lib import utils, error
> +import kvm_utils
> +
> +def run_iperf(test, params, env):
> + """
> + Runs iperf on the guest system and brings back the result.
> +
> + @see: http://sourceforge.net/projects/iperf
> + @param test: kvm test object
> + @param params: Dictionary with test parameters
> + @param env: Test environment
> + """
> + vm = kvm_utils.env_get_vm(env, params.get("main_vm"))
> + if not vm:
> + message = "VM object not found in environment"
> + logging.error(message)
> + raise error.TestError, message
> + if not vm.is_alive():
> + message = "VM seems to be dead; Test requires a living VM"
> + logging.error(message)
> + raise error.TestError(message)
> +
> + logging.info("Waiting for guest to be up...")
> +
> + session = kvm_utils.wait_for(vm.ssh_login, 240, 0, 2)
> + if not session:
> + message = "Could not log into guest"
> + logging.error(message)
> + raise error.TestFail, message
> +
> + logging.info("Logged in")
> +
> + # Checking for GuestOS-compatible iPerf binary existence on host.
> + iperf_binary = params.get("iperf_binary", "misc/iperf")
> + iperf_duration = params.get("iperf_duration", 5)
> + iperf_parallel_threads = params.get("iperf_parallel_threads", 1)
> + iperf_dest_ip = params.get("iperf_dest_ip", "10.0.2.2")
> + iperf_binary = os.path.join(test.bindir, iperf_binary)
> + if not os.path.exists(iperf_binary):
> + message = "iPerf binary: %s was not found on host" % iperf_binary
> + logging.error(message)
> + raise error.TestError, message
> + else:
> + logging.info("iPerf binary: %s was found on host" % iperf_binary)
> +
> + # Starting HostOS-compatible iPerf Server on host
> + logging.info('VM is up ... \n starting iPerf Server on host')
> + kvm_utils.run_bg("iperf -s", timeout=5)
> +
> + # Detecting GuestOS
> + if iperf_binary.__contains__("exe"):
> + vm_type="win32"
> + else:
> + vm_type="linux32"
> +
> + # Copying GuestOS-compatible iPerf binary to guest.
> + # Starting iPerf Client on guest, plus connect to host.
> + if vm_type == "win32":
> + win_dir = "/cygdrive/c/"
> + logging.info('starting copying %s to Windows VM to %s' % (iperf_binary,
> + win_dir))
> + if not vm.scp_to_remote(iperf_binary, win_dir):
> + message = "Could not copy Win32 iPerf to guest"
> + logging.error(message)
> + raise error.TestError(message)
> + logging.debug("Enabling file permissions of iPerf.exe on Windows VM...")
> + session.sendline('cacls C:\iperf.exe /P Administrator:F')
> + session.sendline('y')
> + session.sendline('')
> + time.sleep(2)
> + session.sendline('')
> + logging.info("starting iPerf client on Windows VM, connecting to host")
> + session.sendline('C:\iperf -t %s -c %s -P %s' % (int(iperf_duration),
> + iperf_dest_ip,
> + int(iperf_parallel_threads)))
> + else:
> + logging.info('starting copying %s to Linux VM ' % iperf_binary)
> + if not vm.scp_to_remote(iperf_binary, "/usr/local/bin"):
> + message = "Could not copy Linux iPerf to guest"
> + logging.error(message)
> + raise error.TestError, message
> + print "starting iPerf client on VM, connecting to host"
> + session.sendline('iperf -t %s -c %s -P %s' % (int(iperf_duration),
> + iperf_dest_ip,
> + int(iperf_parallel_threads)))
> +
> + # Analyzing results
> + iperf_result_match, iperf_result = session.read_up_to_prompt()
> + logging.debug("iperf_result =", iperf_result)
> +
> + if iperf_result.__contains__(" 0.00 bits/sec"):
> + msg = 'Guest returned 0.00 bits/sec during iperf test.'
> + raise error.TestError(msg)
> + elif iperf_result.__contains__("No route to host"):
> + msg = 'SSH to guest returned: No route to host.'
> + raise error.TestError(msg)
> + elif iperf_result.__contains__("Access is denied"):
> + msg = 'SSH to guest returned: Access is denied.'
> + raise error.TestError(msg)
> + elif not iperf_result.__contains__("bits/sec"):
> + msg = 'SSH result unrecognizeable.'
> + raise error.TestError(msg)
> +
> + session.close()
> diff --git a/client/tests/kvm/kvm_tests.cfg.sample b/client/tests/kvm/kvm_tests.cfg.sample
> index 2c0b321..931f748 100644
> --- a/client/tests/kvm/kvm_tests.cfg.sample
> +++ b/client/tests/kvm/kvm_tests.cfg.sample
> @@ -82,6 +82,10 @@ variants:
> - linux_s3: install setup
> type = linux_s3
>
> + - iperf: install setup
> + type = iperf
> + extra_params += " -snapshot"
> +
> # NICs
> variants:
> - @rtl8139:
> @@ -102,6 +106,8 @@ variants:
> ssh_status_test_command = echo $?
> username = root
> password = 123456
> + iperf:
> + iperf_binary = misc/iperf
>
> variants:
> - Fedora:
> @@ -292,6 +298,8 @@ variants:
> password = 123456
> migrate:
> migration_test_command = ver && vol
> + iperf:
> + iperf_binary = misc/iperf.exe
>
> variants:
> - Win2000:
--
Lucas Meneghel Rodrigues
Software Engineer (QE)
Red Hat - Emerging Technologies
next prev parent reply other threads:[~2009-06-16 21:40 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-16 21:29 [KVM-AUTOTEST PATCH] Adding iperf test Lucas Meneghel Rodrigues
2009-06-16 21:40 ` Lucas Meneghel Rodrigues [this message]
2009-06-16 23:43 ` Lucas Meneghel Rodrigues
2009-06-25 15:54 ` [KVM-AUTOTEST PATCH] bugfix for changing kvm_log to logging Yolkfull Chow
2009-07-01 3:24 ` Lucas Meneghel Rodrigues
2009-06-30 8:52 ` [KVM-AUTOTEST PATCH] Adding iperf test sudhir kumar
2009-06-30 22:46 ` Lucas Meneghel Rodrigues
2009-07-01 11:43 ` Alexey Eremenko
2009-07-01 15:57 ` Lucas Meneghel Rodrigues
2009-07-01 16:18 ` [Autotest] " Martin Bligh
2009-07-01 17:14 ` Avi Kivity
2009-07-01 17:16 ` Martin Bligh
2009-07-01 20:29 ` Lucas Meneghel Rodrigues
2009-07-02 8:26 ` Avi Kivity
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1245188453.2894.9.camel@freedom \
--to=lmr@redhat.com \
--cc=aeromenk@redhat.com \
--cc=autotest@test.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=ykaul@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.