diff options
Diffstat (limited to 'src/benchmarks/lld.py')
| -rw-r--r-- | src/benchmarks/lld.py | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/benchmarks/lld.py b/src/benchmarks/lld.py new file mode 100644 index 0000000..1a7b69e --- /dev/null +++ b/src/benchmarks/lld.py @@ -0,0 +1,99 @@ +import matplotlib.pyplot as plt +import numpy as np +import os +from urllib.request import urlretrieve +import subprocess +import sys + +from src.benchmark import Benchmark +from src.util import print_status + + +class BenchmarkLld(Benchmark): + def __init__(self): + self.name = "lld" + self.descrition = """This benchmark runs the lld benchmarks provided + by the llvm project.""" + + self.run_dir = "lld-speed-test/{test}" + # TODO: don't hardcode ld.lld location + self.cmd = "/usr/bin/ld.lld @response.txt" + + self.args = {"test": ["chrome", "clang-fsds", "gold", "linux-kernel", + "llvm-as-fsds", "scylla", "clang", "clang-gdb-index", + "gold-fsds", "llvm-as", "mozilla"]} + + self.requirements = ["ld.lld"] + super().__init__() + + def prepare(self): + super().prepare() + + def reporthook(blocknum, blocksize, totalsize): + readsofar = blocknum * blocksize + if totalsize > 0: + percent = readsofar * 1e2 / totalsize + s = "\r%5.1f%% %*d / %d" % ( + percent, len(str(totalsize)), readsofar, totalsize) + sys.stderr.write(s) + else: # total size is unknown + sys.stderr.write("\rdownloaded %d" % (readsofar,)) + + test_dir = "lld-speed-test" + test_archive = f"{test_dir}.tar.xz" + if not os.path.isdir(test_dir): + if not os.path.isfile(test_archive): + choice = input("Download missing test archive (1.1GB) [Y/n/x] ") + if not choice in ['', 'Y', 'y']: + return False + + url = f"https://s3-us-west-2.amazonaws.com/linker-tests/{test_archive}" + urlretrieve(url, test_archive, reporthook) + sys.stderr.write("\n") + + # Extract tests + p = subprocess.run(["tar", "xf", test_archive], stdout=subprocess.PIPE, + stderr=subprocess.PIPE, universal_newlines=True) + + return True + + def cleanup(self): + for perm in self.iterate_args(): + a_out = os.path.join("lld-speed-test", perm.test, "a.out") + if os.path.isfile(a_out): + os.remove(a_out) + + + def summary(self): + args = self.results["args"] + allocators = self.results["allocators"] + + + for perm in self.iterate_args(args=args): + for i, allocator in enumerate(allocators): + + plt.bar([i], self.results["stats"][allocator][perm]["mean"]["task-clock"], + label=allocator, color=allocators[allocator]["color"]) + + plt.legend(loc="best") + plt.ylabel("Zeit in ms") + plt.title("Gesamte Laufzeit") + plt.savefig(".".join([self.name, perm.test, "runtime", "png"])) + plt.clf() + + + + # TODO: get memusage + # Memusage + # self.barplot_single_arg("{VmHWM}", + # ylabel='"Max RSS in KB"', + # title='"Highwatermark of Vm (VmHWM)"', + # filepostfix="rss") + + # self.export_stats_to_csv("VmHWM") + self.export_stats_to_csv("task-clock") + + # self.export_stats_to_dataref("VmHWM") + self.export_stats_to_dataref("task-clock") + +lld = BenchmarkLld() |
