| Index: client/tests/tracing_microbenchmark/tracers.py
|
| diff --git a/client/tests/tracing_microbenchmark/tracers.py b/client/tests/tracing_microbenchmark/tracers.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bdd5194de0ccfa8caf52f0acecb5f961378fd880
|
| --- /dev/null
|
| +++ b/client/tests/tracing_microbenchmark/tracers.py
|
| @@ -0,0 +1,60 @@
|
| +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])
|
|
|