Skip to contentSkip to conversation

KVM test: Make the profiler could be configurated

PATCH Superseded Jason Wang 3 participants 5 messages Mar 30, 2010 – Apr 1, 2010 KVM

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore

Jason Wang

author
#0 lore raw

PATCH 1/2 KVM test: Make the profiler could be configurated

The patch let the profilers could be specified through configuration file. kvm_stat was kept as the default profiler.

---
 client/tests/kvm/kvm_utils.py          |   23 ++++++++++-------------
 client/tests/kvm/tests_base.cfg.sample |    2 +-
 2 files changed, 11 insertions(+), 14 deletions(-)
client/tests/kvm/kvm_utils.py +10 -13
index 8531c79..a73d5d4 100644
@@ -866,24 +866,21 @@ def run_tests(test_list, job):
         if dependencies_satisfied:
             test_iterations = int(dict.get("iterations", 1))
             test_tag = dict.get("shortname")
-            # Setting up kvm_stat profiling during test execution.
-            # We don't need kvm_stat profiling on the build tests.
-            if dict.get("run_kvm_stat") == "yes":
-                profile = True
-            else:
-                # None because it's the default value on the base_test class
-                # and the value None is specifically checked there.
-                profile = None
+            # Setting up profilers during test execution.
+            profilers = dict.get("profilers")
+            if profilers is not None:
+                for profiler in profilers.split():
+                    job.profilers.add(profiler)
 
-            if profile:
-                job.profilers.add('kvm_stat')
             # We need only one execution, profiled, hence we're passing
             # the profile_only parameter to job.run_test().
             current_status = job.run_test("kvm", params=dict, tag=test_tag,
                                           iterations=test_iterations,
-                                          profile_only=profile)
-            if profile:
-                job.profilers.delete('kvm_stat')
+                                          profile_only= profilers is not None)
+
+            if profilers is not None:
+                for profiler in profilers.split():
+                    job.profilers.delete(profiler)
 
             if not current_status:
                 failed = True
client/tests/kvm/tests_base.cfg.sample +1 -1
index d162cf8..cc10713 100644
@@ -41,7 +41,7 @@ nic_script = scripts/qemu-ifup
 address_index = 0
 
 # Misc
-run_kvm_stat = yes
+profilers = "kvm_stat "
 
 
 # Tests
author
#1 lore raw

PATCH 2/2 KVM test: Add the hwclock test into guest test

Hwclock is useful to do the basic testing of emulated RTC.

---
 client/tests/kvm/autotest_control/hwclock.control |   12 ++++++++++++
 client/tests/kvm/tests_base.cfg.sample            |    3 +++
 2 files changed, 15 insertions(+), 0 deletions(-)
 create mode 100644 client/tests/kvm/autotest_control/hwclock.control
client/tests/kvm/autotest_control/hwclock.control new file +12 -0
new file mode 100644
index 0000000..bf3e9d3
@@ -0,0 +1,12 @@
+AUTHOR = "Martin J. Bligh <[email protected]>"
+NAME = "Hwclock"
+TIME = "SHORT"
+TEST_CATEGORY = "Functional"
+TEST_CLASS = "General"
+TEST_TYPE = "client"
+
+DOC = """
+This test checks that we can set and read the hwclock successfully
+"""
+
+job.run_test('hwclock')
client/tests/kvm/tests_base.cfg.sample +3 -0
index cc10713..00b80c3 100644
@@ -145,6 +145,9 @@ variants:
             - scrashme:
                 test_name = scrashme
                 test_control_file = scrashme.control
+            - hwclock:
+                test_name = hwclock
+                test_control_file = hwclock.control
 
     - linux_s3:     install setup unattended_install
         type = linux_s3
#2 lore raw
In reply to Jason Wang
Quoted 2 lines · ----- "Jason Wang

The patch let the profilers could be specified through configuration file. kvm_stat was kept as the default profiler.

Looks good. Some minor style comments:

Quoted 17 lines
---
 client/tests/kvm/kvm_utils.py          |   23
++++++++++-------------
 client/tests/kvm/tests_base.cfg.sample |    2 +-
 2 files changed, 11 insertions(+), 14 deletions(-)
client/tests/kvm/kvm_utils.py +0 -1
index 8531c79..a73d5d4 100644
@@ -866,24 +866,21 @@ def run_tests(test_list, job):
         if dependencies_satisfied:
             test_iterations = int(dict.get("iterations", 1))
             test_tag = dict.get("shortname")
-            # Setting up kvm_stat profiling during test execution.

client/tests/kvm/kvm_utils.py def run_tests(test_list, job): · line 871

Quoted 10 lines
client/tests/kvm/kvm_utils.py +3 -7
-            # We don't need kvm_stat profiling on the build tests.
-            if dict.get("run_kvm_stat") == "yes":
-                profile = True
-            else:
-                # None because it's the default value on the base_test class
-                # and the value None is specifically checked there.
-                profile = None
+            # Setting up profilers during test execution.
+            profilers = dict.get("profilers")
+            if profilers is not None:

I think it's nicer and shorter to say "if profilers" instead of "if profilers is not None".
Better yet, use 'profilers = dict.get("profilers", "")' so that if profilers isn't defined, or if the user said 'profilers = ""', you can still call profilers.split(), i.e.:

profilers = dict.get("profilers", "")
for profiler in profilers.split():
job.profilers.add(profiler)

and then you don't need the 'if'.
This is also relevant to the job.profilers.delete() code below.

client/tests/kvm/kvm_utils.py def run_tests(test_list, job): · line 879

Quoted 13 lines
client/tests/kvm/kvm_utils.py +3 -5
+                for profiler in profilers.split():
+                    job.profilers.add(profiler)
 
-            if profile:
-                job.profilers.add('kvm_stat')
             # We need only one execution, profiled, hence we're passing
             # the profile_only parameter to job.run_test().
             current_status = job.run_test("kvm", params=dict, tag=test_tag,
                                           iterations=test_iterations,
-                                          profile_only=profile)
-            if profile:
-                job.profilers.delete('kvm_stat')
+                                          profile_only= profilers is not None)

AFAIK, profile_only needs to be either True or None (Lucas, please correct me if I'm wrong).
In that case, it would be appropriate to use

profile_only=bool(profilers) or None

so that if profilers is e.g. "kvm_stat", profile_only will be True, and if profilers is "", profile_only will be None.

Quoted 13 lines
client/tests/kvm/kvm_utils.py +4 -0
+
+            if profilers is not None:
+                for profiler in profilers.split():
+                    job.profilers.delete(profiler)
 
             if not current_status:
                 failed = True
client/tests/kvm/tests_base.cfg.sample +0 -0
index d162cf8..cc10713 100644

client/tests/kvm/tests_base.cfg.sample nic_script = scripts/qemu-ifup · line 44

Quoted 5 lines
client/tests/kvm/tests_base.cfg.sample +1 -1
@@ -41,7 +41,7 @@ nic_script = scripts/qemu-ifup
 address_index = 0
 
 # Misc
-run_kvm_stat = yes
+profilers = "kvm_stat "

We don't need the quotes here now. We'll need them later if we add more profilers. So it's OK to use

profilers = kvm_stat

and then later if we need another profiler:

profilers += " some_other_profiler"

Quoted 8 lines
client/tests/kvm/tests_base.cfg.sample +0 -1
 # Tests
 
--

To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

author
#3 lore raw
Quoted 10 lines · Michael Goldish
Quoted 3 lines · ----- "Jason Wang

The patch let the profilers could be specified through configuration file. kvm_stat was kept as the default profiler.

Looks good. Some minor style comments:

Thanks for the comment, would re-send the patch.

#4 lore raw
In reply to Michael Goldish
Quoted 63 lines · Michael Goldish
Quoted 2 lines · ----- "Jason Wang

The patch let the profilers could be specified through configuration file. kvm_stat was kept as the default profiler.

Looks good.  Some minor style comments:

Quoted 19 lines

---
 client/tests/kvm/kvm_utils.py          |   23
++++++++++-------------
 client/tests/kvm/tests_base.cfg.sample |    2 +-

 2 files changed, 11 insertions(+), 14 deletions(-)
client/tests/kvm/kvm_utils.py +0 -0
index 8531c79..a73d5d4 100644
@@ -866,24 +866,21 @@ def run_tests(test_list, job):

         if dependencies_satisfied:
             test_iterations = int(dict.get("iterations", 1)) test_tag = dict.get("shortname")
-            # Setting up kvm_stat profiling during test execution.
-            # We don't need kvm_stat profiling on the build tests.
-            if dict.get("run_kvm_stat") == "yes":

Quoted 8 lines

-                profile = True
-            else:
-                # None because it's the default value on the base_test class
-                # and the value None is specifically checked there.
-                profile = None
+            # Setting up profilers during test execution.
+            profilers = dict.get("profilers")
+            if profilers is not None:

I think it's nicer and shorter to say "if profilers" instead of "if profilers is not None".
Better yet, use 'profilers = dict.get("profilers", "")' so that if profilers isn't defined, or if the user said 'profilers = ""', you can still call profilers.split(), i.e.:

profilers = dict.get("profilers", "")
for profiler in profilers.split():
   job.profilers.add(profiler)

and then you don't need the 'if'.
This is also relevant to the job.profilers.delete() code below.

Quoted 6 lines

+                for profiler in profilers.split():
+                    job.profilers.add(profiler)

-            if profile:
-                job.profilers.add('kvm_stat')
             # We need only one execution, profiled, hence we're passing

Quoted 7 lines
             # the profile_only parameter to job.run_test().
             current_status = job.run_test("kvm", params=dict, tag=test_tag,
                                           iterations=test_iterations,
-                                          profile_only=profile)
-            if profile:
-                job.profilers.delete('kvm_stat')
+                                          profile_only= profilers is not None)
Quoted 2 lines

AFAIK, profile_only needs to be either True or None (Lucas, please correct me if I'm wrong).

You're right, Michael, the test class code checks specifically for None. I have just reviewed the 2nd version of the patch and it looks good. Applied:

http://autotest.kernel.org/changeset/4365