aboutsummaryrefslogtreecommitdiff
path: root/src/benchmarks
diff options
context:
space:
mode:
Diffstat (limited to 'src/benchmarks')
-rw-r--r--src/benchmarks/lld.py99
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()