aboutsummaryrefslogtreecommitdiffstats
path: root/experiment/experiment.py
diff options
context:
space:
mode:
Diffstat (limited to 'experiment/experiment.py')
-rw-r--r--experiment/experiment.py53
1 files changed, 39 insertions, 14 deletions
diff --git a/experiment/experiment.py b/experiment/experiment.py
index a95ca42..a44f798 100644
--- a/experiment/experiment.py
+++ b/experiment/experiment.py
@@ -91,16 +91,16 @@ class Experiment(object):
91 91
92 def __run_tasks(self): 92 def __run_tasks(self):
93 exec_pause = 0.3 93 exec_pause = 0.3
94 self.log("Starting the program in ({0} seconds)".format( 94 self.log("Starting the programs over ({0} seconds)".format(
95 len(self.executables) * exec_pause)) 95 len(self.executables) * exec_pause))
96 for e in self.executables: 96 for e in self.executables:
97 try: 97 try:
98 e.execute() 98 e.execute()
99 except: 99 except:
100 raise Exception("Executable failed: %s" % e) 100 raise Exception("Executable failed: %s" % e)
101 time.sleep(exec_pause) 101 time.sleep(exec_pause)
102 102
103 sleep_time = 2 103 sleep_time = len(self.executables) / litmus_util.num_cpus()
104 self.log("Sleeping for %d seconds before release" % sleep_time) 104 self.log("Sleeping for %d seconds before release" % sleep_time)
105 time.sleep(sleep_time) 105 time.sleep(sleep_time)
106 106
@@ -117,13 +117,18 @@ class Experiment(object):
117 if released != len(self.executables): 117 if released != len(self.executables):
118 # Some tasks failed to release, kill all tasks and fail 118 # Some tasks failed to release, kill all tasks and fail
119 # Need to re-release non-released tasks before we can kill them though 119 # Need to re-release non-released tasks before we can kill them though
120 self.log("Failed to release %d tasks! Re-releasing and killing".format( 120 self.log("Failed to release {} tasks! Re-releasing and killing".format(
121 len(self.experiments) - released)) 121 len(self.executables) - released, len(self.executables)))
122 122
123 time.sleep(10) 123 time.sleep(5)
124 litmus_util.release_tasks()
125 124
126 time.sleep(20) 125 released = litmus_util.release_tasks()
126
127 self.log("Re-released %d tasks" % released)
128
129 time.sleep(5)
130
131 self.log("Killing all tasks")
127 map(methodcaller('kill'), self.executables) 132 map(methodcaller('kill'), self.executables)
128 133
129 ret = False 134 ret = False
@@ -147,23 +152,46 @@ class Experiment(object):
147 152
148 def run_exp(self): 153 def run_exp(self):
149 self.setup() 154 self.setup()
155
156 succ = False
157
150 try: 158 try:
151 self.__run_tasks() 159 self.__run_tasks()
160 self.log("Saving results in %s" % self.finished_dir)
161 succ = True
152 finally: 162 finally:
153 self.teardown() 163 self.teardown()
154 164
155 def setup(self): 165 if succ:
156 self.log("Switching to %s" % self.scheduler) 166 self.__save_results()
157 litmus_util.switch_scheduler(self.scheduler) 167 self.log("Experiment done!")
158 168
169
170 def setup(self):
159 self.log("Writing %d proc entries" % len(self.proc_entries)) 171 self.log("Writing %d proc entries" % len(self.proc_entries))
160 map(methodcaller('write_proc'), self.proc_entries) 172 map(methodcaller('write_proc'), self.proc_entries)
161 173
174 time.sleep(5)
175
176 self.log("Switching to %s" % self.scheduler)
177 litmus_util.switch_scheduler(self.scheduler)
178
162 self.log("Starting %d tracers" % len(self.tracers)) 179 self.log("Starting %d tracers" % len(self.tracers))
163 map(methodcaller('start_tracing'), self.tracers) 180 map(methodcaller('start_tracing'), self.tracers)
181
182 self.exec_out = open('%s/exec-out.txt' % self.working_dir, 'w')
183 self.exec_err = open('%s/exec-err.txt' % self.working_dir, 'w')
184 def set_out(executable):
185 executable.stdout_file = self.exec_out
186 executable.stderr_file = self.exec_err
187 map(set_out, self.executables)
188
164 time.sleep(4) 189 time.sleep(4)
165 190
166 def teardown(self): 191 def teardown(self):
192 self.exec_out.close()
193 self.exec_err.close()
194
167 sleep_time = 5 195 sleep_time = 5
168 self.log("Sleeping %d seconds to allow buffer flushing" % sleep_time) 196 self.log("Sleeping %d seconds to allow buffer flushing" % sleep_time)
169 time.sleep(sleep_time) 197 time.sleep(sleep_time)
@@ -174,6 +202,3 @@ class Experiment(object):
174 self.log("Switching to Linux scheduler") 202 self.log("Switching to Linux scheduler")
175 litmus_util.switch_scheduler("Linux") 203 litmus_util.switch_scheduler("Linux")
176 204
177 self.log("Saving results in %s" % self.finished_dir)
178 self.__save_results()
179 self.log("Experiment done!")