diff options
| author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-02-14 14:10:16 -0500 |
|---|---|---|
| committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-02-14 14:10:16 -0500 |
| commit | ea121dd26076998ffdc89792f62da5d585a1f35c (patch) | |
| tree | 5c052d5b82e8aa6a121dc2976d2b28158cef567e | |
| parent | 0663c432764117c42e226d8cac623a9fcf3e8daf (diff) | |
Replaced fixed sleep times in experiment setup with loops which sleep until events occur.
| -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 | ||
