aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbench.py41
-rw-r--r--src/benchmark.py10
2 files changed, 35 insertions, 16 deletions
diff --git a/bench.py b/bench.py
index eef861a..023614e 100755
--- a/bench.py
+++ b/bench.py
@@ -36,15 +36,17 @@ parser.add_argument("--license", help="print license info and exit", action='sto
"""Run tasks on exit"""
def epilog():
- if os.listdir(src.globalvars.resdir) == []:
- print_warn("Remove empty resultdir")
- os.removedirs(src.globalvars.resdir)
- else:
- endtime = datetime.datetime.now().isoformat()
- endtime = endtime[:endtime.rfind(':')]
- src.globalvars.facts["endtime"] = endtime
- with open(os.path.join(src.globalvars.resdir, "facts.save"), "wb") as f:
- pickle.dump(src.globalvars.facts, f)
+ # After early errors resdir may not be set
+ if src.globalvars.resdir != None:
+ if os.listdir(src.globalvars.resdir) == []:
+ print_warn("Remove empty resultdir")
+ os.removedirs(src.globalvars.resdir)
+ else:
+ endtime = datetime.datetime.now().isoformat()
+ endtime = endtime[:endtime.rfind(':')]
+ src.globalvars.facts["endtime"] = endtime
+ with open(os.path.join(src.globalvars.resdir, "facts.save"), "wb") as f:
+ pickle.dump(src.globalvars.facts, f)
def main():
args = parser.parse_args()
@@ -162,9 +164,28 @@ def main():
if find_cmd("malt") is not None:
print_status("Analysing {} ...".format(bench))
+
malt_cmd = "malt -o output:name={}/malt.{}.%3"
malt_cmd = malt_cmd.format(bench_res_dir, "{perm}")
- bench.run(runs=1, dry_run=True, cmd_prefix=malt_cmd)
+
+ old_allocs = bench.allocators
+ # use malt as allocator
+ src.globalvars.allocators = {"malt": {"cmd_prefix" : malt_cmd,
+ "binary_suffix" : "",
+ "LD_PRELOAD" : ""}}
+ try:
+ bench.run(runs=1)
+ except Exception:
+ print_error(traceback.format_exc())
+ print_error("Skipping analysis of", bench, "!")
+
+ if "malt" in bench.results:
+ del(bench.results["malt"])
+ if "malt" in bench.results["stats"]
+ del(bench.results["stats"]["malt"])
+ # restore allocs
+ bench.allocators = old_allocs
+
else:
print_error("malt not found. Skipping analyse.")
diff --git a/src/benchmark.py b/src/benchmark.py
index 4bab146..4737799 100644
--- a/src/benchmark.py
+++ b/src/benchmark.py
@@ -168,7 +168,7 @@ class Benchmark (object):
if is_fixed:
yield p
- def run(self, runs=5, dry_run=False, cmd_prefix=""):
+ def run(self, runs=5):
if runs < 1:
return
@@ -238,7 +238,6 @@ class Benchmark (object):
actual_cmd = "{} {} {} {}{}".format(self.measure_cmd,
t["cmd_prefix"],
- cmd_prefix,
binary,
actual_cmd[cmd_start:])
# substitute again
@@ -297,10 +296,9 @@ class Benchmark (object):
if valid_result != None:
valid_result = result
- if not dry_run:
- if not perm in self.results[alloc_name]:
- self.results[alloc_name][perm] = []
- self.results[alloc_name][perm].append(result)
+ if not perm in self.results[alloc_name]:
+ self.results[alloc_name][perm] = []
+ self.results[alloc_name][perm].append(result)
if hasattr(self, "postallocator_hook"):
self.postallocator_hook((alloc_name, t), run,