diff mbox

Add a new profiler to autotest, kvm_stat

Message ID 1263081583-3277-1-git-send-email-lmr@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Lucas Meneghel Rodrigues Jan. 9, 2010, 11:59 p.m. UTC
None
diff mbox

Patch

diff --git a/client/profilers/kvm_stat/__init__.py b/client/profilers/kvm_stat/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/client/profilers/kvm_stat/kvm_stat.py b/client/profilers/kvm_stat/kvm_stat.py
new file mode 100644
index 0000000..b2c0b32
--- /dev/null
+++ b/client/profilers/kvm_stat/kvm_stat.py
@@ -0,0 +1,61 @@ 
+"""
+kvm_stat prints statistics generated by the kvm module.
+It depends on debugfs. If no debugfs is mounted, the profiler
+will try to mount it so it's possible to proceed.
+
+@copyright: Red Hat 2010
+@author: Lucas Meneghel Rodrigues (lmr@redhat.com)
+"""
+import time, os, subprocess, commands
+from autotest_lib.client.bin import utils, profiler, os_dep
+
+
+class kvm_stat(profiler.profiler):
+    """
+    kvm_stat based profiler. Consists on executing kvm_stat -l during a given
+    test execution, redirecting its output to a file on the profile dir.
+    """
+    version = 1
+    def initialize(self):
+        """
+        Gets path of kvm_stat and verifies if debugfs needs to be mounted.
+        """
+        self.stat_path = os_dep.command('kvm_stat')
+        (ret, output) = commands.getstatusoutput("%s --batch" % self.stat_path)
+        if ret != 0:
+            if 'debugfs' in output:
+                utils.system('mount -t debugfs debugfs /sys/kernel/debug')
+            else:
+                raise error.AutotestError('kvm_stat failed due to an '
+                                          'unknown reason: %s' % output)
+
+
+    def start(self, test):
+        """
+        Starts kvm_stat subprocess.
+
+        @param test: Autotest test on which this profiler will operate on.
+        """
+        cmd = "%s -l" % self.stat_path
+        logfile = open(os.path.join(test.profdir, "kvm_stat"), 'w')
+        p = subprocess.Popen(cmd, shell=True, stdout=logfile,
+                             stderr=subprocess.STDOUT)
+        self.pid = p.pid
+
+
+    def stop(self, test):
+        """
+        Stops profiler execution by sending a SIGTERM to kvm_stat process.
+
+        @param test: Autotest test on which this profiler will operate on.
+        """
+        os.kill(self.pid, 15)
+
+
+    def report(self, test):
+        """
+        Report function. Does nothing as there's no postprocesing needed.
+
+        @param test: Autotest test on which this profiler will operate on.
+        """
+        return None