61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
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])
|