Home | History | Annotate | Download | only in blktrace
      1 """
      2 Autotest profiler for blktrace
      3 blktrace - generate traces of the i/o traffic on block devices
      4 """
      5 import os
      6 from autotest_lib.client.common_lib import error
      7 from autotest_lib.client.bin import profiler, utils
      8 
      9 
     10 class blktrace(profiler.profiler):
     11     version = 2
     12 
     13     def initialize(self, **dargs):
     14         self.mountpoint = '/sys/kernel/debug'
     15         self.blktrace = os.path.join(self.srcdir, 'blktrace')
     16         self.blkparse = os.path.join(self.srcdir, 'blkparse')
     17         self.blktrace_job = None
     18 
     19         self.job.require_gcc()
     20         self.job.setup_dep(['libaio'])
     21         ldflags = '-L ' + self.job.autodir + '/deps/libaio/lib'
     22         cflags = '-I ' + self.job.autodir + '/deps/libaio/include'
     23         self.gcc_flags = ldflags + ' ' + cflags
     24         self.device = dargs.get('device', None)
     25 
     26 
     27     def setup(self, tarball='blktrace.tar.bz2', **dargs):
     28         # v1.0.1, pulled from git, 2009/06/10
     29         # commit 1e09f6e9012826fca69fa07222b7bc53c3e629ee
     30         self.tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
     31         utils.extract_tarball_to_dir(self.tarball, self.srcdir)
     32         os.chdir(self.srcdir)
     33         utils.make('"CFLAGS=' + self.gcc_flags + '"')
     34 
     35 
     36     def get_device(self, test):
     37         if getattr(test, 'device', None):
     38             device = test.device
     39         else:
     40             if self.device:
     41                 device=self.device
     42             else:
     43                 raise error.TestWarn('No device specified for blktrace')
     44         return device
     45 
     46 
     47     def start(self, test):
     48         result = utils.system("mount | grep '%s'" % self.mountpoint,
     49                               ignore_status=True)
     50         if result:
     51             utils.system('mount -t debugfs debugfs /sys/kernel/debug')
     52         device = self.get_device(test)
     53         self.blktrace_job = utils.BgJob('%s /dev/%s' % (self.blktrace, device))
     54 
     55 
     56     def stop(self, test):
     57         if self.blktrace_job is not None:
     58             utils.nuke_subprocess(self.blktrace_job.sp)
     59         self.blktrace_job = None
     60 
     61 
     62     def report(self, test):
     63         output_file = os.path.join(test.profdir, 'blktrace')
     64         if getattr(test, 'profile_tag', None):
     65             output_file += '.' + test.profile_tag
     66         device = self.get_device(test)
     67         utils.system('%s %s > %s' % (self.blkparse, device, output_file))
     68