blob: 08ca7e335ab8ae552b7ebd7cb10889fb89c4a0ef [file] [log] [blame]
Eric Lie0493a42010-11-15 13:05:43 -08001import os
2from autotest_lib.client.bin import utils
3
4import base_tracer
5try:
6 from site_tracers import *
7except ImportError:
8 pass
9
10
11off = base_tracer.Tracer
12
13
14class 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
Eric Li861b2d52011-02-04 14:50:35 -080059 results[total_key] = (results.get(total_key, 0) +
Eric Lie0493a42010-11-15 13:05:43 -080060 results[cpu_key])