aboutsummaryrefslogtreecommitdiffstats
path: root/run/tracer.py
diff options
context:
space:
mode:
Diffstat (limited to 'run/tracer.py')
-rw-r--r--run/tracer.py52
1 files changed, 49 insertions, 3 deletions
diff --git a/run/tracer.py b/run/tracer.py
index 065797c..6e1d05c 100644
--- a/run/tracer.py
+++ b/run/tracer.py
@@ -6,10 +6,17 @@ from operator import methodcaller
6from run.executable.ftcat import FTcat,Executable 6from run.executable.ftcat import FTcat,Executable
7 7
8class Tracer(object): 8class Tracer(object):
9 def __init__(self, name, output_dir): 9 def __init__(self, name, output_dir, exact=False):
10 self.name = name 10 self.name = name
11 self.output_dir = output_dir 11 self.output_dir = output_dir
12 self.bins = [] 12 self.bins = []
13 self.exact=exact
14
15 def get_name(self):
16 return self.name
17
18 def is_exact(self):
19 return self.exact
13 20
14 def start_tracing(self): 21 def start_tracing(self):
15 map(methodcaller("execute"), self.bins) 22 map(methodcaller("execute"), self.bins)
@@ -23,7 +30,7 @@ class LinuxTracer(Tracer):
23 LITMUS_EVENTS = "%s/events/litmus" % EVENT_ROOT 30 LITMUS_EVENTS = "%s/events/litmus" % EVENT_ROOT
24 31
25 def __init__(self, output_dir): 32 def __init__(self, output_dir):
26 super(LinuxTracer, self).__init__("trace-cmd", output_dir) 33 super(LinuxTracer, self).__init__("Trace-cmd / Kernelshark", output_dir)
27 34
28 extra_args = ["record", # "-e", "sched:sched_switch", 35 extra_args = ["record", # "-e", "sched:sched_switch",
29 "-e", "litmus:*", 36 "-e", "litmus:*",
@@ -89,7 +96,7 @@ class OverheadTracer(Tracer):
89 DEVICE_STR = '/dev/litmus/ft_trace0' 96 DEVICE_STR = '/dev/litmus/ft_trace0'
90 97
91 def __init__(self, output_dir): 98 def __init__(self, output_dir):
92 super(OverheadTracer, self).__init__("Overhead Trace", output_dir) 99 super(OverheadTracer, self).__init__("Overhead Trace", output_dir, True)
93 100
94 stdout_f = open('{0}/{1}'.format(self.output_dir, conf.FILES['ft_data']), 'w') 101 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') 102 stderr_f = open('{0}/{1}.stderr.txt'.format(self.output_dir, conf.FILES['ft_data']), 'w')
@@ -109,3 +116,42 @@ class PerfTracer(Tracer):
109 @staticmethod 116 @staticmethod
110 def enabled(): 117 def enabled():
111 return False 118 return False
119
120
121tracers = {}
122
123def register_tracer(tracer, name):
124 tracers[name] = tracer
125
126def get_tracer_types(names):
127 error = True # Error if name is not present
128 errors = []
129
130 if not names:
131 # Just return all enabled tracers if none specified
132 names = tracers.keys()
133 error = False
134
135 ret = []
136
137 for name in names:
138 if name not in tracers:
139 raise ValueError("Invalid tracer '%s', valid names are: %s" %
140 (name, tracers.keys()))
141
142 if tracers[name].enabled():
143 ret += [ tracers[name] ]
144 elif error:
145 errors += ["Tracer '%s' requested, but not enabled." % name]
146
147 if errors:
148 raise ValueError("Check your kernel compile configuration!\n" +
149 "\n".join(errors))
150
151 return ret
152
153register_tracer(LinuxTracer, "kernelshark")
154register_tracer(LogTracer, "log")
155register_tracer(SchedTracer, "sched")
156register_tracer(OverheadTracer, "overhead")
157