From 680f46b2d51db66ac5028a6a8df7cdf82958bb54 Mon Sep 17 00:00:00 2001 From: Florian Fischer <florian.fl.fischer@fau.de> Date: Sun, 28 Apr 2019 22:52:52 +0200 Subject: [PATCH] use special allocator "malt" during analyse to run the benchmark only once --- bench.py | 41 +++++++++++++++++++++++++++++++---------- src/benchmark.py | 10 ++++------ 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, -- GitLab