import os from autotest_lib.client.bin import utils import base_tracer try: from site_tracers import * except ImportError: pass off = base_tracer.Tracer class ftrace(base_tracer.Tracer): mountpoint = '/sys/kernel/debug' tracing_dir = os.path.join(mountpoint, 'tracing') def warmup(self, buffer_size_kb): if not os.path.exists(self.tracing_dir): utils.system('mount -t debugfs debugfs %s' % self.mountpoint) # ensure clean state: self.trace_config('tracing_enabled', '0') self.trace_config('current_tracer', 'nop') self.trace_config('events/enable', '0') self.trace_config('trace', '') # set ring buffer size: self.trace_config('buffer_size_kb', str(buffer_size_kb)) # enable tracepoints: self.trace_config('events/syscalls/sys_enter_getuid/enable', '1') def cleanup(self): # reset ring buffer size: self.trace_config('buffer_size_kb', '1408') # disable tracepoints: self.trace_config('events/enable', '0') def start_tracing(self): self.trace_config('tracing_enabled', '1') def stop_tracing(self): self.trace_config('tracing_enabled', '0') def reset_tracing(self): self.trace_config('trace', '') def gather_stats(self, results): per_cpu = os.path.join(self.tracing_dir, 'per_cpu') for cpu in os.listdir(per_cpu): cpu_stats = os.path.join(per_cpu, cpu, 'stats') for line in utils.read_file(cpu_stats).splitlines(): key, val = line.split(': ') key = key.replace(' ', '_') val = int(val) cpu_key = '%s_%s' % (cpu, key) total_key = 'total_' + key results[cpu_key] = val results[total_key] = (results.get(total_key, 0) + results[cpu_key])