diff options
Diffstat (limited to 'run')
-rw-r--r-- | run/experiment.py | 38 |
1 files changed, 14 insertions, 24 deletions
diff --git a/run/experiment.py b/run/experiment.py index ee1438d..c8fc228 100644 --- a/run/experiment.py +++ b/run/experiment.py | |||
@@ -1,6 +1,6 @@ | |||
1 | import os | 1 | import os |
2 | import time | 2 | import time |
3 | import litmus_util | 3 | import litmus_util as lu |
4 | from operator import methodcaller | 4 | from operator import methodcaller |
5 | from tracer import SchedTracer, LogTracer, PerfTracer, LinuxTracer, OverheadTracer | 5 | from tracer import SchedTracer, LogTracer, PerfTracer, LinuxTracer, OverheadTracer |
6 | 6 | ||
@@ -92,6 +92,8 @@ class Experiment(object): | |||
92 | map(assign_cwd, self.executables) | 92 | map(assign_cwd, self.executables) |
93 | 93 | ||
94 | def __run_tasks(self): | 94 | def __run_tasks(self): |
95 | already_waiting = lu.waiting_tasks() | ||
96 | |||
95 | self.log("Starting the programs") | 97 | self.log("Starting the programs") |
96 | for e in self.executables: | 98 | for e in self.executables: |
97 | try: | 99 | try: |
@@ -99,12 +101,12 @@ class Experiment(object): | |||
99 | except: | 101 | except: |
100 | raise Exception("Executable failed: %s" % e) | 102 | raise Exception("Executable failed: %s" % e) |
101 | 103 | ||
102 | waiting = litmus_util.waiting_tasks() | 104 | self.log("Sleeping until tasks are ready for release...") |
103 | 105 | start = time.clock() | |
104 | if waiting: | 106 | while (lu.waiting_tasks() - already_waiting) < len(self.executables): |
105 | sleep_time = len(self.executables) / litmus_util.num_cpus() | 107 | if time.clock() - start > 30.0: |
106 | self.log("Sleeping for %d seconds before release" % sleep_time) | 108 | raise Exception("Too much time has passed waiting for tasks!") |
107 | time.sleep(sleep_time) | 109 | time.sleep(1) |
108 | 110 | ||
109 | # Overhead tracer must be started right after release or overhead | 111 | # Overhead tracer must be started right after release or overhead |
110 | # measurements will be full of irrelevant records | 112 | # measurements will be full of irrelevant records |
@@ -112,11 +114,8 @@ class Experiment(object): | |||
112 | self.log("Starting overhead trace") | 114 | self.log("Starting overhead trace") |
113 | self.overhead_trace.start_tracing() | 115 | self.overhead_trace.start_tracing() |
114 | 116 | ||
115 | if waiting: | 117 | self.log("Releasing %d tasks" % len(self.executables)) |
116 | self.log("Releasing %d tasks" % len(self.executables)) | 118 | released = lu.release_tasks() |
117 | released = litmus_util.release_tasks() | ||
118 | else: | ||
119 | released = len(self.executables) | ||
120 | 119 | ||
121 | ret = True | 120 | ret = True |
122 | if released != len(self.executables): | 121 | if released != len(self.executables): |
@@ -127,7 +126,7 @@ class Experiment(object): | |||
127 | 126 | ||
128 | time.sleep(5) | 127 | time.sleep(5) |
129 | 128 | ||
130 | released = litmus_util.release_tasks() | 129 | released = lu.release_tasks() |
131 | 130 | ||
132 | self.log("Re-released %d tasks" % released) | 131 | self.log("Re-released %d tasks" % released) |
133 | 132 | ||
@@ -170,7 +169,7 @@ class Experiment(object): | |||
170 | self.teardown() | 169 | self.teardown() |
171 | finally: | 170 | finally: |
172 | self.log("Switching to Linux scheduler") | 171 | self.log("Switching to Linux scheduler") |
173 | litmus_util.switch_scheduler("Linux") | 172 | lu.switch_scheduler("Linux") |
174 | 173 | ||
175 | if succ: | 174 | if succ: |
176 | self.__save_results() | 175 | self.__save_results() |
@@ -181,11 +180,8 @@ class Experiment(object): | |||
181 | self.log("Writing %d proc entries" % len(self.proc_entries)) | 180 | self.log("Writing %d proc entries" % len(self.proc_entries)) |
182 | map(methodcaller('write_proc'), self.proc_entries) | 181 | map(methodcaller('write_proc'), self.proc_entries) |
183 | 182 | ||
184 | if len(self.proc_entries): | ||
185 | time.sleep(2) | ||
186 | |||
187 | self.log("Switching to %s" % self.scheduler) | 183 | self.log("Switching to %s" % self.scheduler) |
188 | litmus_util.switch_scheduler(self.scheduler) | 184 | lu.switch_scheduler(self.scheduler) |
189 | 185 | ||
190 | self.log("Starting %d tracers" % len(self.tracers)) | 186 | self.log("Starting %d tracers" % len(self.tracers)) |
191 | map(methodcaller('start_tracing'), self.tracers) | 187 | map(methodcaller('start_tracing'), self.tracers) |
@@ -197,16 +193,10 @@ class Experiment(object): | |||
197 | executable.stderr_file = self.exec_err | 193 | executable.stderr_file = self.exec_err |
198 | map(set_out, self.executables) | 194 | map(set_out, self.executables) |
199 | 195 | ||
200 | time.sleep(4) | ||
201 | |||
202 | def teardown(self): | 196 | def teardown(self): |
203 | self.exec_out and self.exec_out.close() | 197 | self.exec_out and self.exec_out.close() |
204 | self.exec_err and self.exec_err.close() | 198 | self.exec_err and self.exec_err.close() |
205 | 199 | ||
206 | sleep_time = 10 | ||
207 | self.log("Sleeping %d seconds to allow buffer flushing" % sleep_time) | ||
208 | time.sleep(sleep_time) | ||
209 | |||
210 | self.log("Stopping tracers") | 200 | self.log("Stopping tracers") |
211 | map(methodcaller('stop_tracing'), self.tracers) | 201 | map(methodcaller('stop_tracing'), self.tracers) |
212 | 202 | ||