* [PATCH] KVM-test: Add hdparm subtest
@ 2011-08-02 3:39 Amos Kong
2011-08-03 14:19 ` [Autotest] " Lukáš Doktor
0 siblings, 1 reply; 3+ messages in thread
From: Amos Kong @ 2011-08-02 3:39 UTC (permalink / raw)
To: autotest, lmr; +Cc: kvm
This test uses 'hdparm' to set disk device to low/high
performance status, and compare the reading speed.
The emulated device should pass all the tests.
Signed-off-by: Feng Yang <fyang@redhat.com>
Signed-off-by: Amos Kong <akong@redhat.com>
---
client/tests/kvm/tests/hdparm.py | 84 ++++++++++++++++++++++++++++++++
client/tests/kvm/tests_base.cfg.sample | 13 +++++
2 files changed, 97 insertions(+), 0 deletions(-)
create mode 100644 client/tests/kvm/tests/hdparm.py
diff --git a/client/tests/kvm/tests/hdparm.py b/client/tests/kvm/tests/hdparm.py
new file mode 100644
index 0000000..79ce5db
--- /dev/null
+++ b/client/tests/kvm/tests/hdparm.py
@@ -0,0 +1,84 @@
+import re, logging
+from autotest_lib.client.common_lib import error
+
+
+@error.context_aware
+def run_hdparm(test, params, env):
+ """
+ Test hdparm setting on linux guest os, this case will:
+ 1) Set/record parameters value of hard disk to low performance status.
+ 2) Perform device/cache read timings then record the results.
+ 3) Set/record parameters value of hard disk to high performance status.
+ 4) Perform device/cache read timings then compare two results.
+
+ @param test: kvm test object
+ @param params: Dictionary with the test parameters
+ @param env: Dictionary with test environmen.
+ """
+
+ def check_setting_result(set_cmd, timeout):
+ params = re.findall("(-[a-zA-Z])([0-9]*)", set_cmd)
+ disk = re.findall("(\/+[a-z]*\/[a-z]*$)", set_cmd)[0]
+ for (param, value) in params:
+ cmd = "hdparm %s %s" % (param, disk)
+ (s, output) = session.cmd_status_output(cmd, timeout)
+ if s != 0:
+ raise error.TestError("Fail to get %s parameter value\n"
+ "Output is: %s" % (param, output))
+ if value not in output:
+ raise error.TestFail("Fail to set %s parameter to value: %s"
+ % (param, value))
+
+
+ def perform_read_timing(disk, timeout, num=5):
+ results = 0
+ for i in range(num):
+ cmd = params.get("device_cache_read_cmd") % disk
+ (s, output) = session.cmd_status_output(cmd, timeout)
+ if s != 0:
+ raise error.TestFail("Fail to perform device/cache read"
+ " timings \nOutput is: %s\n" % output)
+ logging.info("Output of device/cache read timing check(%s of %s):"
+ " %s" % (i + 1, num, output))
+ (result, post) = re.findall("= *([0-9]*.+[0-9]*) ([a-zA-Z]*)",
+ output)[1]
+ if post == "kB":
+ result = float(result)/1024.0
+ results += float(result)
+ return results/num
+
+ vm = env.get_vm(params["main_vm"])
+ vm.create()
+ session = vm.wait_for_login(timeout=int(params.get("login_timeout", 360)))
+ try:
+ timeout = float(params.get("cmd_timeout", 60))
+ cmd = params.get("get_disk_cmd")
+ (s, output) = session.cmd_status_output(cmd)
+ disk = output.strip()
+
+ error.context("Setting hard disk to lower performance")
+ cmd = params.get("low_status_cmd") % disk
+ session.cmd(cmd, timeout)
+
+ error.context("Checking hard disk keyval under lower performance")
+ check_setting_result(cmd, timeout)
+ low_result = perform_read_timing(disk, timeout)
+ logging.info("Buffered disk read speed under low performance"
+ " configuration: %s" % low_result)
+ error.context("Setting hard disk to higher performance")
+ cmd = params.get("high_status_cmd") % disk
+ session.cmd(cmd, timeout)
+
+ error.context("Checking hard disk keyval under higher performance")
+ check_setting_result(cmd, timeout)
+ high_result = perform_read_timing(disk, timeout)
+ logging.info("Buffered disk read speed under high performance"
+ " configuration: %s" % high_result)
+ if not float(high_result) > float(low_result):
+ raise error.TestFail("High performance setting does not "
+ "increase read speed\n")
+ logging.debug("High performance setting increased read speed!")
+
+ finally:
+ if session:
+ session.close()
diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
index d597b52..5491630 100644
--- a/client/tests/kvm/tests_base.cfg.sample
+++ b/client/tests/kvm/tests_base.cfg.sample
@@ -1115,6 +1115,19 @@ variants:
image_snapshot = yes
only Linux
+ - hdparm:
+ type = hdparm
+ get_disk_cmd = \ls /dev/[vhs]da
+ low_status_cmd = hdparm -a64 -d0 -u0 %s
+ device_cache_read_cmd = hdparm -tT %s
+ high_status_cmd = hdparm -a256 -d1 -u1 %s
+ cmd_timeout = 540
+ only Linux
+ virtio_blk:
+ get_disk_cmd = \ls /dev/vda
+ low_status_cmd = hdparm -a32 -r0 %s
+ high_status_cmd = hdparm -a256 -r1 %s
+
# NICs
variants:
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [Autotest] [PATCH] KVM-test: Add hdparm subtest
2011-08-02 3:39 [PATCH] KVM-test: Add hdparm subtest Amos Kong
@ 2011-08-03 14:19 ` Lukáš Doktor
2011-08-03 23:40 ` Lucas Meneghel Rodrigues
0 siblings, 1 reply; 3+ messages in thread
From: Lukáš Doktor @ 2011-08-03 14:19 UTC (permalink / raw)
To: Amos Kong; +Cc: autotest, lmr, kvm
Reviewed, looks sane.
Lukáš
Dne 2.8.2011 05:39, Amos Kong napsal(a):
> This test uses 'hdparm' to set disk device to low/high
> performance status, and compare the reading speed.
> The emulated device should pass all the tests.
>
> Signed-off-by: Feng Yang<fyang@redhat.com>
> Signed-off-by: Amos Kong<akong@redhat.com>
> ---
> client/tests/kvm/tests/hdparm.py | 84 ++++++++++++++++++++++++++++++++
> client/tests/kvm/tests_base.cfg.sample | 13 +++++
> 2 files changed, 97 insertions(+), 0 deletions(-)
> create mode 100644 client/tests/kvm/tests/hdparm.py
>
> diff --git a/client/tests/kvm/tests/hdparm.py b/client/tests/kvm/tests/hdparm.py
> new file mode 100644
> index 0000000..79ce5db
> --- /dev/null
> +++ b/client/tests/kvm/tests/hdparm.py
> @@ -0,0 +1,84 @@
> +import re, logging
> +from autotest_lib.client.common_lib import error
> +
> +
> +@error.context_aware
> +def run_hdparm(test, params, env):
> + """
> + Test hdparm setting on linux guest os, this case will:
> + 1) Set/record parameters value of hard disk to low performance status.
> + 2) Perform device/cache read timings then record the results.
> + 3) Set/record parameters value of hard disk to high performance status.
> + 4) Perform device/cache read timings then compare two results.
> +
> + @param test: kvm test object
> + @param params: Dictionary with the test parameters
> + @param env: Dictionary with test environmen.
> + """
> +
> + def check_setting_result(set_cmd, timeout):
> + params = re.findall("(-[a-zA-Z])([0-9]*)", set_cmd)
> + disk = re.findall("(\/+[a-z]*\/[a-z]*$)", set_cmd)[0]
> + for (param, value) in params:
> + cmd = "hdparm %s %s" % (param, disk)
> + (s, output) = session.cmd_status_output(cmd, timeout)
> + if s != 0:
> + raise error.TestError("Fail to get %s parameter value\n"
> + "Output is: %s" % (param, output))
> + if value not in output:
> + raise error.TestFail("Fail to set %s parameter to value: %s"
> + % (param, value))
> +
> +
> + def perform_read_timing(disk, timeout, num=5):
> + results = 0
> + for i in range(num):
> + cmd = params.get("device_cache_read_cmd") % disk
> + (s, output) = session.cmd_status_output(cmd, timeout)
> + if s != 0:
> + raise error.TestFail("Fail to perform device/cache read"
> + " timings \nOutput is: %s\n" % output)
> + logging.info("Output of device/cache read timing check(%s of %s):"
> + " %s" % (i + 1, num, output))
> + (result, post) = re.findall("= *([0-9]*.+[0-9]*) ([a-zA-Z]*)",
> + output)[1]
> + if post == "kB":
> + result = float(result)/1024.0
> + results += float(result)
> + return results/num
> +
> + vm = env.get_vm(params["main_vm"])
> + vm.create()
> + session = vm.wait_for_login(timeout=int(params.get("login_timeout", 360)))
> + try:
> + timeout = float(params.get("cmd_timeout", 60))
> + cmd = params.get("get_disk_cmd")
> + (s, output) = session.cmd_status_output(cmd)
> + disk = output.strip()
> +
> + error.context("Setting hard disk to lower performance")
> + cmd = params.get("low_status_cmd") % disk
> + session.cmd(cmd, timeout)
> +
> + error.context("Checking hard disk keyval under lower performance")
> + check_setting_result(cmd, timeout)
> + low_result = perform_read_timing(disk, timeout)
> + logging.info("Buffered disk read speed under low performance"
> + " configuration: %s" % low_result)
> + error.context("Setting hard disk to higher performance")
> + cmd = params.get("high_status_cmd") % disk
> + session.cmd(cmd, timeout)
> +
> + error.context("Checking hard disk keyval under higher performance")
> + check_setting_result(cmd, timeout)
> + high_result = perform_read_timing(disk, timeout)
> + logging.info("Buffered disk read speed under high performance"
> + " configuration: %s" % high_result)
> + if not float(high_result)> float(low_result):
> + raise error.TestFail("High performance setting does not "
> + "increase read speed\n")
> + logging.debug("High performance setting increased read speed!")
> +
> + finally:
> + if session:
> + session.close()
> diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
> index d597b52..5491630 100644
> --- a/client/tests/kvm/tests_base.cfg.sample
> +++ b/client/tests/kvm/tests_base.cfg.sample
> @@ -1115,6 +1115,19 @@ variants:
> image_snapshot = yes
> only Linux
>
> + - hdparm:
> + type = hdparm
> + get_disk_cmd = \ls /dev/[vhs]da
> + low_status_cmd = hdparm -a64 -d0 -u0 %s
> + device_cache_read_cmd = hdparm -tT %s
> + high_status_cmd = hdparm -a256 -d1 -u1 %s
> + cmd_timeout = 540
> + only Linux
> + virtio_blk:
> + get_disk_cmd = \ls /dev/vda
> + low_status_cmd = hdparm -a32 -r0 %s
> + high_status_cmd = hdparm -a256 -r1 %s
> +
>
> # NICs
> variants:
>
> _______________________________________________
> Autotest mailing list
> Autotest@test.kernel.org
> http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] KVM-test: Add hdparm subtest
2011-08-03 14:19 ` [Autotest] " Lukáš Doktor
@ 2011-08-03 23:40 ` Lucas Meneghel Rodrigues
0 siblings, 0 replies; 3+ messages in thread
From: Lucas Meneghel Rodrigues @ 2011-08-03 23:40 UTC (permalink / raw)
To: Lukáš Doktor; +Cc: autotest, kvm
It does look sane to me too. However, I find this to work only under
virtio_blk. (ide hard drive that qemu has doesn't have the needed
ioctls for hdparm to work)
Amos and Feng, I'll trust that this somehow should pass on non-virtio,
so I won't restrict it to virtio_blk. I made some minor changes to the
test that make the logs look a lot better. Other than that, excellent
work, thank you very much!
http://autotest.kernel.org/changeset/5519
On Wed, Aug 3, 2011 at 11:19 AM, Lukáš Doktor <ldoktor@redhat.com> wrote:
> Reviewed, looks sane.
>
> Lukáš
>
> Dne 2.8.2011 05:39, Amos Kong napsal(a):
>> This test uses 'hdparm' to set disk device to low/high
>> performance status, and compare the reading speed.
>> The emulated device should pass all the tests.
>>
>> Signed-off-by: Feng Yang<fyang@redhat.com>
>> Signed-off-by: Amos Kong<akong@redhat.com>
>> ---
>> client/tests/kvm/tests/hdparm.py | 84 ++++++++++++++++++++++++++++++++
>> client/tests/kvm/tests_base.cfg.sample | 13 +++++
>> 2 files changed, 97 insertions(+), 0 deletions(-)
>> create mode 100644 client/tests/kvm/tests/hdparm.py
>>
>> diff --git a/client/tests/kvm/tests/hdparm.py b/client/tests/kvm/tests/hdparm.py
>> new file mode 100644
>> index 0000000..79ce5db
>> --- /dev/null
>> +++ b/client/tests/kvm/tests/hdparm.py
>> @@ -0,0 +1,84 @@
>> +import re, logging
>> +from autotest_lib.client.common_lib import error
>> +
>> +
>> +@error.context_aware
>> +def run_hdparm(test, params, env):
>> + """
>> + Test hdparm setting on linux guest os, this case will:
>> + 1) Set/record parameters value of hard disk to low performance status.
>> + 2) Perform device/cache read timings then record the results.
>> + 3) Set/record parameters value of hard disk to high performance status.
>> + 4) Perform device/cache read timings then compare two results.
>> +
>> + @param test: kvm test object
>> + @param params: Dictionary with the test parameters
>> + @param env: Dictionary with test environmen.
>> + """
>> +
>> + def check_setting_result(set_cmd, timeout):
>> + params = re.findall("(-[a-zA-Z])([0-9]*)", set_cmd)
>> + disk = re.findall("(\/+[a-z]*\/[a-z]*$)", set_cmd)[0]
>> + for (param, value) in params:
>> + cmd = "hdparm %s %s" % (param, disk)
>> + (s, output) = session.cmd_status_output(cmd, timeout)
>> + if s != 0:
>> + raise error.TestError("Fail to get %s parameter value\n"
>> + "Output is: %s" % (param, output))
>> + if value not in output:
>> + raise error.TestFail("Fail to set %s parameter to value: %s"
>> + % (param, value))
>> +
>> +
>> + def perform_read_timing(disk, timeout, num=5):
>> + results = 0
>> + for i in range(num):
>> + cmd = params.get("device_cache_read_cmd") % disk
>> + (s, output) = session.cmd_status_output(cmd, timeout)
>> + if s != 0:
>> + raise error.TestFail("Fail to perform device/cache read"
>> + " timings \nOutput is: %s\n" % output)
>> + logging.info("Output of device/cache read timing check(%s of %s):"
>> + " %s" % (i + 1, num, output))
>> + (result, post) = re.findall("= *([0-9]*.+[0-9]*) ([a-zA-Z]*)",
>> + output)[1]
>> + if post == "kB":
>> + result = float(result)/1024.0
>> + results += float(result)
>> + return results/num
>> +
>> + vm = env.get_vm(params["main_vm"])
>> + vm.create()
>> + session = vm.wait_for_login(timeout=int(params.get("login_timeout", 360)))
>> + try:
>> + timeout = float(params.get("cmd_timeout", 60))
>> + cmd = params.get("get_disk_cmd")
>> + (s, output) = session.cmd_status_output(cmd)
>> + disk = output.strip()
>> +
>> + error.context("Setting hard disk to lower performance")
>> + cmd = params.get("low_status_cmd") % disk
>> + session.cmd(cmd, timeout)
>> +
>> + error.context("Checking hard disk keyval under lower performance")
>> + check_setting_result(cmd, timeout)
>> + low_result = perform_read_timing(disk, timeout)
>> + logging.info("Buffered disk read speed under low performance"
>> + " configuration: %s" % low_result)
>> + error.context("Setting hard disk to higher performance")
>> + cmd = params.get("high_status_cmd") % disk
>> + session.cmd(cmd, timeout)
>> +
>> + error.context("Checking hard disk keyval under higher performance")
>> + check_setting_result(cmd, timeout)
>> + high_result = perform_read_timing(disk, timeout)
>> + logging.info("Buffered disk read speed under high performance"
>> + " configuration: %s" % high_result)
>> + if not float(high_result)> float(low_result):
>> + raise error.TestFail("High performance setting does not "
>> + "increase read speed\n")
>> + logging.debug("High performance setting increased read speed!")
>> +
>> + finally:
>> + if session:
>> + session.close()
>> diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
>> index d597b52..5491630 100644
>> --- a/client/tests/kvm/tests_base.cfg.sample
>> +++ b/client/tests/kvm/tests_base.cfg.sample
>> @@ -1115,6 +1115,19 @@ variants:
>> image_snapshot = yes
>> only Linux
>>
>> + - hdparm:
>> + type = hdparm
>> + get_disk_cmd = \ls /dev/[vhs]da
>> + low_status_cmd = hdparm -a64 -d0 -u0 %s
>> + device_cache_read_cmd = hdparm -tT %s
>> + high_status_cmd = hdparm -a256 -d1 -u1 %s
>> + cmd_timeout = 540
>> + only Linux
>> + virtio_blk:
>> + get_disk_cmd = \ls /dev/vda
>> + low_status_cmd = hdparm -a32 -r0 %s
>> + high_status_cmd = hdparm -a256 -r1 %s
>> +
>>
>> # NICs
>> variants:
>>
>> _______________________________________________
>> 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
>
--
Lucas
_______________________________________________
Autotest mailing list
Autotest@test.kernel.org
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-08-03 23:40 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-08-02 3:39 [PATCH] KVM-test: Add hdparm subtest Amos Kong
2011-08-03 14:19 ` [Autotest] " Lukáš Doktor
2011-08-03 23:40 ` Lucas Meneghel Rodrigues
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox