From 0980de3da64e273a363dace79e56345bc4ed2dbc Mon Sep 17 00:00:00 2001 From: Florian Fischer <florian.fl.fischer@fau.de> Date: Fri, 13 Dec 2019 16:14:37 +0100 Subject: [PATCH] move allocbench_version to facter and make the facts a global variable of facter.py --- bench.py | 11 ++++++----- merge.py | 6 ++++-- src/benchmark.py | 2 +- src/facter.py | 45 +++++++++++++++++++++++++++++---------------- src/globalvars.py | 3 --- src/util.py | 25 ------------------------- summarize.py | 5 +++-- 7 files changed, 43 insertions(+), 54 deletions(-) diff --git a/bench.py b/bench.py index fa16854..9f4a6c1 100755 --- a/bench.py +++ b/bench.py @@ -33,7 +33,7 @@ import src.globalvars from src.util import find_cmd from src.util import print_status, print_warn, print_error from src.util import print_info, print_info2, print_debug -from src.util import print_license_and_exit, print_version_and_exit +from src.util import print_license_and_exit def epilog(): @@ -46,7 +46,7 @@ def epilog(): else: endtime = datetime.datetime.now().isoformat() endtime = endtime[:endtime.rfind(':')] - src.globalvars.facts["endtime"] = endtime + src.facter.FACTS["endtime"] = endtime src.facter.store_facts(src.globalvars.resdir) # remove a left over status file if some is present @@ -116,7 +116,8 @@ def main(): print_license_and_exit() if args.version: - print_version_and_exit() + print(src.facter.allocbench_version()) + exit(0) atexit.register(epilog) @@ -156,8 +157,8 @@ def main(): src.globalvars.resdir = os.path.join(args.resultdir) else: src.globalvars.resdir = os.path.join("results", - src.globalvars.facts["hostname"], - src.globalvars.facts["starttime"]) + src.facter.FACTS["hostname"], + src.facter.FACTS["starttime"]) print_status("Writing results to:", src.globalvars.resdir) os.makedirs(src.globalvars.resdir, exist_ok=True) diff --git a/merge.py b/merge.py index 4812c37..77fe73c 100755 --- a/merge.py +++ b/merge.py @@ -25,7 +25,8 @@ import os import pickle import sys -from src.util import print_license_and_exit, print_version_and_exit +import src.facter +from src.util import print_license_and_exit def load_file(filename): if filename.endswith("json"): @@ -41,7 +42,8 @@ def main(): print_license_and_exit() if "--version" in sys.argv: - print_version_and_exit() + print(src.facter.allocbench_version()) + exit(0) parser = argparse.ArgumentParser(description="Merge to allocbench results") parser.add_argument("src", help="results which should be merged into dest", type=str) diff --git a/src/benchmark.py b/src/benchmark.py index bbb6d50..905a11f 100644 --- a/src/benchmark.py +++ b/src/benchmark.py @@ -734,7 +734,7 @@ class Benchmark: print(comment_symbol, self.name, file=f) print(file=f) print(comment_symbol, "Common facts:", file=f) - for k, v in src.globalvars.facts.items(): + for k, v in src.facter.FACTS.items(): print(comment_symbol, k + ":", v, file=f) print(file=f) print(comment_symbol, "Benchmark facts:", file=f) diff --git a/src/facter.py b/src/facter.py index fe0b316..4c1c14d 100644 --- a/src/facter.py +++ b/src/facter.py @@ -26,31 +26,31 @@ import platform import subprocess import src.globalvars as gv -from src.util import print_error, print_info +from src.util import print_error, print_info, run_cmd +FACTS = {} def collect_facts(): - """Collect facts ad store them in src.globalvars.facts""" + """Collect general facts about the benchmark environment""" # Populate src.globalvars.facts on import _uname = platform.uname() - gv.facts["hostname"] = _uname.node - gv.facts["system"] = _uname.system - gv.facts["kernel"] = _uname.release - gv.facts["arch"] = _uname.machine - gv.facts["cpus"] = multiprocessing.cpu_count() - gv.facts["LD_PRELOAD"] = os.environ.get("LD_PRELOAD", None) + FACTS["hostname"] = _uname.node + FACTS["system"] = _uname.system + FACTS["kernel"] = _uname.release + FACTS["arch"] = _uname.machine + FACTS["cpus"] = multiprocessing.cpu_count() + FACTS["LD_PRELOAD"] = os.environ.get("LD_PRELOAD", None) with open(os.path.join(gv.builddir, "ccinfo"), "r") as ccinfo: - gv.facts["cc"] = ccinfo.readlines()[-1][:-1] + FACTS["cc"] = ccinfo.readlines()[-1][:-1] - gv.facts["allocbench"] = subprocess.run(["git", "rev-parse", "master"], - stdout=subprocess.PIPE, - universal_newlines=True).stdout + # get commit info from git + allocbench_version() starttime = datetime.datetime.now().isoformat() # strip seconds from string starttime = starttime[:starttime.rfind(':')] - gv.facts["starttime"] = starttime + FACTS["starttime"] = starttime def store_facts(path=None): @@ -64,7 +64,7 @@ def store_facts(path=None): print_info(f"Saving facts to: {filename}") with open(filename, "w") as f: - json.dump(gv.facts, f) + json.dump(FACTS, f) def load_facts(path=None): @@ -80,18 +80,31 @@ def load_facts(path=None): if os.path.exists(filename + ".json"): filename += ".json" with open(filename, "r") as f: - gv.facts = json.load(f) + FACTS = json.load(f) elif os.path.exists(filename + ".save"): import pickle filename += ".save" with open(filename, "rb") as f: - gv.facts = pickle.load(f) + FACTS = pickle.load(f) else: raise FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), filename) print_info(f"Loading facts from: {filename}") +def allocbench_version(): + "Store and return allocbench version string.""" + if "allocbench" in FACTS: + return FACTS["allocbench"] + + commit = run_cmd(["git", "rev-parse", "HEAD"], capture=True).stdout[:-1] + + proc = run_cmd(["git", "status", "--porcelain"], capture=True) + dirty = "-dirty" if proc.stdout != "" else "" + + FACTS["allocbench"] = f"{commit}{dirty}" + return FACTS["allocbench"] + # Copied from pip. # https://github.com/pypa/pip/blob/master/src/pip/_internal/utils/glibc.py diff --git a/src/globalvars.py b/src/globalvars.py index c1ec6b0..bcb722b 100644 --- a/src/globalvars.py +++ b/src/globalvars.py @@ -17,7 +17,6 @@ """Global variables for allocbench -facts: Dict holding facts about the current benchmark run verbosity: Verbosity level -1: quiet, 0: status, 1: info, 2: stdout of subcommands, 3: debug info allocators: Dict holding the allocators to compare benchmarks: List of available benchmarks @@ -35,8 +34,6 @@ import inspect import os -facts = {} - verbosity = 0 allocators = {} diff --git a/src/util.py b/src/util.py index 618eaf8..c5074b6 100644 --- a/src/util.py +++ b/src/util.py @@ -169,31 +169,6 @@ def print_license_and_exit(): exit(0) -def print_version_and_exit(): - """Print current commit info before exit""" - proc = subprocess.run(["git", "rev-parse", "HEAD"], - universal_newlines=True, - stdout=subprocess.PIPE) - - if proc.returncode != 0: - print_error("git rev-parse failed") - exit(1) - commit = proc.stdout[:-1] - - proc = subprocess.run(["git", "status", "--porcelain"], - universal_newlines=True, - stdout=subprocess.PIPE) - - if proc.returncode != 0: - print_error("git status --porcelain failed") - exit(1) - - dirty = "-dirty" if proc.stdout != "" else "" - - print(f"{commit}{dirty}") - exit(0) - - def sha1sum(filename): """Return sha1sum of a file""" sha1 = hashlib.sha1() diff --git a/summarize.py b/summarize.py index 6681137..d974fb2 100755 --- a/summarize.py +++ b/summarize.py @@ -27,7 +27,7 @@ import sys import src.facter import src.globalvars from src.util import print_status, print_debug, print_error -from src.util import print_license_and_exit, print_version_and_exit +from src.util import print_license_and_exit def specific_summary(bench, sum_dir, allocators): @@ -95,7 +95,8 @@ def main(): print_license_and_exit() if "--version" in sys.argv: - print_version_and_exit() + print(src.facter.allocbench_version()) + exit(0) parser = argparse.ArgumentParser(description="Summarize allocbench results in allocator sets") parser.add_argument("results", help="path to results", type=str) -- GitLab