diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-04-08 15:42:16 -0400 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-04-08 15:42:16 -0400 |
commit | d169debf732270c9571be6ea6e7d920345bffc33 (patch) | |
tree | d86c1ff5d0e4a116fcc916717abb29a026862c74 /run/tracer.py | |
parent | 8864a4018c9b9088f330c3ef24ed7b5313ec36a2 (diff) |
Added parameter file options for tracers and pre/post experiment commands.
Diffstat (limited to 'run/tracer.py')
-rw-r--r-- | run/tracer.py | 52 |
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 | |||
6 | from run.executable.ftcat import FTcat,Executable | 6 | from run.executable.ftcat import FTcat,Executable |
7 | 7 | ||
8 | class Tracer(object): | 8 | class 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 | |||
121 | tracers = {} | ||
122 | |||
123 | def register_tracer(tracer, name): | ||
124 | tracers[name] = tracer | ||
125 | |||
126 | def 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 | |||
153 | register_tracer(LinuxTracer, "kernelshark") | ||
154 | register_tracer(LogTracer, "log") | ||
155 | register_tracer(SchedTracer, "sched") | ||
156 | register_tracer(OverheadTracer, "overhead") | ||
157 | |||