Home | History | Annotate | Download | only in tracing_microbenchmark
      1 import os
      2 from autotest_lib.client.bin import utils
      3 
      4 import base_tracer
      5 try:
      6     from site_tracers import *
      7 except ImportError:
      8     pass
      9 
     10 
     11 off = base_tracer.Tracer
     12 
     13 
     14 class ftrace(base_tracer.Tracer):
     15 
     16     mountpoint = '/sys/kernel/debug'
     17     tracing_dir = os.path.join(mountpoint, 'tracing')
     18 
     19     def warmup(self, buffer_size_kb):
     20         if not os.path.exists(self.tracing_dir):
     21             utils.system('mount -t debugfs debugfs %s' % self.mountpoint)
     22 
     23         # ensure clean state:
     24         self.trace_config('tracing_enabled', '0')
     25         self.trace_config('current_tracer', 'nop')
     26         self.trace_config('events/enable', '0')
     27         self.trace_config('trace', '')
     28         # set ring buffer size:
     29         self.trace_config('buffer_size_kb', str(buffer_size_kb))
     30         # enable tracepoints:
     31         self.trace_config('events/syscalls/sys_enter_getuid/enable', '1')
     32 
     33     def cleanup(self):
     34         # reset ring buffer size:
     35         self.trace_config('buffer_size_kb', '1408')
     36         # disable tracepoints:
     37         self.trace_config('events/enable', '0')
     38 
     39     def start_tracing(self):
     40         self.trace_config('tracing_enabled', '1')
     41 
     42     def stop_tracing(self):
     43         self.trace_config('tracing_enabled', '0')
     44 
     45     def reset_tracing(self):
     46         self.trace_config('trace', '')
     47 
     48     def gather_stats(self, results):
     49         per_cpu = os.path.join(self.tracing_dir, 'per_cpu')
     50         for cpu in os.listdir(per_cpu):
     51             cpu_stats = os.path.join(per_cpu, cpu, 'stats')
     52             for line in utils.read_file(cpu_stats).splitlines():
     53                 key, val = line.split(': ')
     54                 key = key.replace(' ', '_')
     55                 val = int(val)
     56                 cpu_key = '%s_%s' % (cpu, key)
     57                 total_key = 'total_' + key
     58                 results[cpu_key] = val
     59                 results[total_key] = (results.get(total_key, 0) +
     60                                       results[cpu_key])
     61