aboutsummaryrefslogtreecommitdiffstats
path: root/run/tracer.py
diff options
context:
space:
mode:
Diffstat (limited to 'run/tracer.py')
-rw-r--r--run/tracer.py112
1 files changed, 112 insertions, 0 deletions
diff --git a/run/tracer.py b/run/tracer.py
new file mode 100644
index 0000000..5d00e86
--- /dev/null
+++ b/run/tracer.py
@@ -0,0 +1,112 @@
1import litmus_util
2import os
3import config.config as conf
4
5from operator import methodcaller
6from executable.ftcat import FTcat,Executable
7
8
9class Tracer(object):
10 def __init__(self, name, output_dir):
11 self.name = name
12 self.output_dir = output_dir
13 self.bins = []
14
15 def start_tracing(self):
16 map(methodcaller("execute"), self.bins)
17
18 def stop_tracing(self):
19 map(methodcaller('terminate'), self.bins)
20 map(methodcaller('wait'), self.bins)
21
22
23class LinuxTracer(Tracer):
24 EVENT_ROOT = "/sys/kernel/debug/tracing"
25 LITMUS_EVENTS = "%s/events/litmus" % EVENT_ROOT
26
27 def __init__(self, output_dir):
28 super(LinuxTracer, self).__init__("trace-cmd", output_dir)
29
30 extra_args = ["record", # "-e", "sched:sched_switch",
31 "-e", "litmus:*",
32 "-o", "%s/%s" % (output_dir, conf.FILES['linux_data'])]
33 stdout = open('%s/trace-cmd-stdout.txt' % self.output_dir, 'w')
34 stderr = open('%s/trace-cmd-stderr.txt' % self.output_dir, 'w')
35
36 execute = Executable(conf.BINS['trace-cmd'], extra_args, stdout, stderr)
37 execute.cwd = output_dir
38 self.bins.append(execute)
39
40 @staticmethod
41 def enabled():
42 return os.path.exists(LinuxTracer.LITMUS_EVENTS)
43
44 def stop_tracing(self):
45 map(methodcaller('interrupt'), self.bins)
46 map(methodcaller('wait'), self.bins)
47
48
49class LogTracer(Tracer):
50 DEVICE_STR = '/dev/litmus/log'
51
52 def __init__(self, output_dir):
53 super(LogTracer, self).__init__("Logger", output_dir)
54
55 out_file = open("%s/%s" % (self.output_dir, conf.FILES['log_data']), 'w')
56
57 cat = (Executable("/bin/cat", [LogTracer.DEVICE_STR]))
58 cat.stdout_file = out_file
59
60 self.bins.append(cat)
61
62 @staticmethod
63 def enabled():
64 return litmus_util.is_device(LogTracer.DEVICE_STR)
65
66
67class SchedTracer(Tracer):
68 DEVICE_STR = '/dev/litmus/sched_trace'
69
70 def __init__(self, output_dir):
71 super(SchedTracer, self).__init__("Sched Trace", output_dir)
72
73 if SchedTracer.enabled():
74 for cpu in range(litmus_util.num_cpus()):
75 # Executable will close the stdout/stderr files
76 stdout_f = open('%s/st-%d.bin' % (self.output_dir, cpu), 'w')
77 stderr_f = open('%s/st-%d-stderr.txt' % (self.output_dir, cpu), 'w')
78 dev = '{0}{1}'.format(SchedTracer.DEVICE_STR, cpu)
79 ftc = FTcat(conf.BINS['ftcat'], stdout_f, stderr_f, dev, conf.SCHED_EVENTS, cpu=cpu)
80
81 self.bins.append(ftc)
82
83 @staticmethod
84 def enabled():
85 return litmus_util.is_device("%s%d" % (SchedTracer.DEVICE_STR, 0))
86
87
88class OverheadTracer(Tracer):
89 DEVICE_STR = '/dev/litmus/ft_trace0'
90
91 def __init__(self, output_dir):
92 super(OverheadTracer, self).__init__("Overhead Trace", output_dir)
93
94 stdout_f = open('{0}/{1}'.format(self.output_dir, conf.FILES['ft_data']), 'w')
95 stderr_f = open('{0}/{1}.stderr.txt'.format(self.output_dir, conf.FILES['ft_data']), 'w')
96 ftc = FTcat(conf.BINS['ftcat'], stdout_f, stderr_f,
97 OverheadTracer.DEVICE_STR, conf.OVH_ALL_EVENTS)
98
99 self.bins.append(ftc)
100
101 @staticmethod
102 def enabled():
103 return litmus_util.is_device(OverheadTracer.DEVICE_STR)
104
105
106class PerfTracer(Tracer):
107 def __init__(self, output_dir):
108 super(PerfTracer, self).__init__("CPU perf counters", output_dir)
109
110 @staticmethod
111 def enabled():
112 return False