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])