Message ID | 20110802033902.422.82801.stgit@t (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 >
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: