aboutsummaryrefslogtreecommitdiffstats
path: root/run
diff options
context:
space:
mode:
Diffstat (limited to 'run')
-rw-r--r--run/experiment.py38
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 @@
1import os 1import os
2import time 2import time
3import litmus_util 3import litmus_util as lu
4from operator import methodcaller 4from operator import methodcaller
5from tracer import SchedTracer, LogTracer, PerfTracer, LinuxTracer, OverheadTracer 5from 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