As well as reports, one of the other most useful things you can
generate from perf is trace output. Support generating that with
trace=True added to the profiler, e.g.:

        job.profilers.add('perf', events=['fs:*'], trace=True)

the output is a raw trace file in the profiling directory.

Change-Id: I84e1e0332611f5d31b44a4a5e9e7a11e73005364
Signed-off-by: Scott James Remnant <[email protected]>
---
 client/profilers/perf/perf.py |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/client/profilers/perf/perf.py b/client/profilers/perf/perf.py
index e6f9bb7..70ed8aa 100644
--- a/client/profilers/perf/perf.py
+++ b/client/profilers/perf/perf.py
@@ -13,11 +13,12 @@ from autotest_lib.client.bin import profiler, os_dep, utils
 class perf(profiler.profiler):
     version = 1
 
-    def initialize(self, events=["cycles","instructions"]):
+    def initialize(self, events=["cycles","instructions"], trace=False):
         if type(events) == str:
             self.events = [events]
         else:
             self.events = events
+        self.trace = trace
         self.perf_bin = os_dep.command('perf')
         perf_help = utils.run('%s report help' % self.perf_bin,
                               ignore_status=True).stderr
@@ -36,6 +37,8 @@ class perf(profiler.profiler):
         self.logfile = os.path.join(test.profdir, "perf")
         cmd = ("%s record -a -o %s" %
                (self.perf_bin, self.logfile))
+        if self.trace:
+            cmd += " -R"
         for event in self.events:
             cmd += " -e %s" % event
         self._process = subprocess.Popen(cmd, shell=True,
@@ -57,6 +60,16 @@ class perf(profiler.profiler):
             p = subprocess.Popen(cmd, shell=True, stdout=outfile,
                                  stderr=subprocess.STDOUT)
             p.wait()
+
+        if self.trace:
+            tracefile = os.path.join(test.profdir, 'trace')
+            cmd = ("%s trace -i %s" % (self.perf_bin, self.logfile,))
+
+            outfile = open(tracefile, 'w')
+            p = subprocess.Popen(cmd, shell=True, stdout=outfile,
+                                 stderr=subprocess.STDOUT)
+            p.wait()
+
         # The raw detailed perf output is HUGE.  We cannot store it by default.
         perf_log_size = os.stat(self.logfile)[stat.ST_SIZE]
         logging.info('Removing %s after generating reports (saving %s bytes).',
-- 
1.7.3.1

_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

Reply via email to