diff options
Diffstat (limited to 'experiment/experiment.py')
-rw-r--r-- | experiment/experiment.py | 53 |
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!") | ||