From 53abfdb666daf93dda3111988b9c722a4b7e91dc Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Tue, 11 Feb 2020 15:44:56 +0100 Subject: add license header to benchmark.py --- src/benchmark.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src') diff --git a/src/benchmark.py b/src/benchmark.py index c96ff18..7fa6ad6 100644 --- a/src/benchmark.py +++ b/src/benchmark.py @@ -1,3 +1,21 @@ +# Copyright 2018-2020 Florian Fischer +# +# This file is part of allocbench. +# +# allocbench is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# allocbench is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with allocbench. If not, see . +"""Benchmark class providing general purpose implementation of required methods""" + import atexit from collections import namedtuple import errno -- cgit v1.2.3 From f84e2833720e00c09f560b946cfd35c270220042 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Wed, 12 Feb 2020 14:47:56 +0100 Subject: don't use gettid glibc wrapper --- src/chattymalloc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/chattymalloc.c b/src/chattymalloc.c index bde18d4..17a9a31 100644 --- a/src/chattymalloc.c +++ b/src/chattymalloc.c @@ -29,6 +29,7 @@ along with allocbench. If not, see . #include #include #include +#include #include #include "chattymalloc.h" @@ -123,7 +124,7 @@ static void write_trace(char func, void* ptr, size_t size, size_t var_arg) { if (unlikely(tid == 0)) { - tid = gettid(); + tid = syscall(SYS_gettid);; } uint64_t idx = __atomic_fetch_add (&next_entry, 1, __ATOMIC_SEQ_CST); -- cgit v1.2.3 From e300c8a75744702192b10a45b47dff714388cdaf Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Mon, 17 Feb 2020 12:15:15 +0100 Subject: fix preparation of non-server cmds --- src/benchmark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/benchmark.py b/src/benchmark.py index 7fa6ad6..a8ec0c4 100644 --- a/src/benchmark.py +++ b/src/benchmark.py @@ -459,7 +459,7 @@ class Benchmark: # we measure the cmd -> prepare it accordingly if self.servers == []: - argv = self.prepare_argv(self.cmd, alloc, os.environ, substitutions) + argv = self.prepare_argv(self.cmd, os.environ, alloc, substitutions) # we measure the server -> run cmd as it is else: argv = self.prepare_argv(self.cmd, substitutions=substitutions, prepend=False) -- cgit v1.2.3 From 2cb2015a6a9cecac3e204af9951675b981f19554 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Mon, 17 Feb 2020 12:15:56 +0100 Subject: update existing GitArtifacts --- src/artifact.py | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/artifact.py b/src/artifact.py index 7f020f2..a358446 100644 --- a/src/artifact.py +++ b/src/artifact.py @@ -77,6 +77,14 @@ class GitArtifact(Artifact): if not os.path.exists(self.repo): self.retrieve() + # update repo + print_status(f'Updating git repository "{self.name}" ...') + try: + run_cmd(["git", "fetch"], output_verbosity=1, cwd=self.repo) + except CalledProcessError as e: + print_error(f"Failed to update {self.name}") + raise e + worktree_cmd = ["git", "worktree", "add", location, checkout] print_debug("create new worktree. By running: ", worktree_cmd, f"in {self.repo}") -- cgit v1.2.3 From 4c39d7b1e2d3a2ac4d6255170631c5bd610a2878 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Mon, 17 Feb 2020 15:18:29 +0100 Subject: add new standalone TCMalloc --- src/allocators/tcmalloc.py | 45 +++++++++++++++++----- .../tcmalloc/tcmalloc_bazel_build_so.patch | 22 +++++++++++ 2 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 src/allocators/tcmalloc/tcmalloc_bazel_build_so.patch (limited to 'src') diff --git a/src/allocators/tcmalloc.py b/src/allocators/tcmalloc.py index f81f88b..571ef0d 100644 --- a/src/allocators/tcmalloc.py +++ b/src/allocators/tcmalloc.py @@ -14,7 +14,6 @@ # # You should have received a copy of the GNU General Public License # along with allocbench. - """TCMalloc definition for allocbench""" from src.allocator import Allocator @@ -24,21 +23,49 @@ from src.artifact import GitArtifact class TCMalloc(Allocator): """TCMalloc allocator""" - sources = GitArtifact("tcmalloc", "https://github.com/gperftools/gperftools.git") + sources = GitArtifact("tcmalloc", "https://github.com/google/tcmalloc.git") + + def __init__(self, name, **kwargs): + + self.LD_PRELOAD = "{dir}/libtcmalloc.so" + self.patches = ["{patchdir}/tcmalloc_bazel_build_so.patch"] + self.build_cmds = [ + "cd {srcdir}; bazel build tcmalloc/tcmalloc.so", "mkdir {dir}", + "cp {srcdir}/bazel-bin/tcmalloc/tcmalloc.so {dir}/libtcmalloc.so" + ] + + super().__init__(name, **kwargs) + + +tcmalloc = TCMalloc("TCMalloc", + color="xkcd:blue", + version="1676100265bd189df6b5513feac15f102542367e") + + +class TCMallocGperftools(Allocator): + """gperftools TCMalloc allocator""" + + sources = GitArtifact("gperftools", + "https://github.com/gperftools/gperftools.git") def __init__(self, name, **kwargs): self.LD_PRELOAD = "{dir}/lib/libtcmalloc.so" self.prepare_cmds = ["./autogen.sh"] - self.build_cmds = ["cd {srcdir}; ./configure --prefix={dir}", - "cd {srcdir}; make install -j4"] + self.build_cmds = [ + "cd {srcdir}; ./configure --prefix={dir}", + "cd {srcdir}; make install -j4" + ] super().__init__(name, **kwargs) -tcmalloc = TCMalloc("TCMalloc", color="xkcd:blue", version="gperftools-2.7") +tcmalloc_gperftools = TCMallocGperftools("TCMalloc-gperftools", + color="xkcd:blue", + version="gperftools-2.7") -tcmalloc_nofs = TCMalloc("TCMalloc-NoFalsesharing", - patches=["{patchdir}/tcmalloc_2.7_no_active_falsesharing.patch"], - version="gperftools-2.7", - color="xkcd:navy") +tcmalloc_gperftools_nofs = TCMallocGperftools( + "TCMalloc-gperftools-NoFalsesharing", + patches=["{patchdir}/tcmalloc_2.7_no_active_falsesharing.patch"], + version="gperftools-2.7", + color="xkcd:navy") diff --git a/src/allocators/tcmalloc/tcmalloc_bazel_build_so.patch b/src/allocators/tcmalloc/tcmalloc_bazel_build_so.patch new file mode 100644 index 0000000..cdd2840 --- /dev/null +++ b/src/allocators/tcmalloc/tcmalloc_bazel_build_so.patch @@ -0,0 +1,22 @@ +diff --git tcmalloc/BUILD tcmalloc/BUILD +index 66d160e..25946af 100644 +--- tcmalloc/BUILD ++++ tcmalloc/BUILD +@@ -109,6 +109,17 @@ cc_library( + alwayslink = 1, + ) + ++# This library provides tcmalloc as shared object ++cc_binary( ++ name = "tcmalloc.so", ++ copts = TCMALLOC_DEFAULT_COPTS, ++ linkshared = 1, ++ linkstatic = 1, ++ deps = overlay_deps + tcmalloc_deps + [ ++ ":tcmalloc", ++ ] ++) ++ + # Provides tcmalloc always; use per-thread mode. + # + cc_library( -- cgit v1.2.3 From b1e8ab492c45f039b93ecdd98e9ff5638ae23132 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Tue, 18 Feb 2020 12:13:09 +0100 Subject: build tcmalloc optimized --- src/allocators/tcmalloc.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/allocators/tcmalloc.py b/src/allocators/tcmalloc.py index 571ef0d..054dba3 100644 --- a/src/allocators/tcmalloc.py +++ b/src/allocators/tcmalloc.py @@ -30,7 +30,8 @@ class TCMalloc(Allocator): self.LD_PRELOAD = "{dir}/libtcmalloc.so" self.patches = ["{patchdir}/tcmalloc_bazel_build_so.patch"] self.build_cmds = [ - "cd {srcdir}; bazel build tcmalloc/tcmalloc.so", "mkdir {dir}", + "cd {srcdir}; bazel build tcmalloc/tcmalloc.so --compilation_mode opt", + "mkdir {dir}", "cp {srcdir}/bazel-bin/tcmalloc/tcmalloc.so {dir}/libtcmalloc.so" ] -- cgit v1.2.3 From 1077e8b3b4d0f00d2b13fd815fe5747ac526e0f7 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Tue, 18 Feb 2020 12:28:23 +0100 Subject: allow consecutive builds of tcmalloc --- src/allocators/tcmalloc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/allocators/tcmalloc.py b/src/allocators/tcmalloc.py index 054dba3..24f9b45 100644 --- a/src/allocators/tcmalloc.py +++ b/src/allocators/tcmalloc.py @@ -31,7 +31,7 @@ class TCMalloc(Allocator): self.patches = ["{patchdir}/tcmalloc_bazel_build_so.patch"] self.build_cmds = [ "cd {srcdir}; bazel build tcmalloc/tcmalloc.so --compilation_mode opt", - "mkdir {dir}", + "mkdir -p {dir}", "cp {srcdir}/bazel-bin/tcmalloc/tcmalloc.so {dir}/libtcmalloc.so" ] -- cgit v1.2.3 From 3b8d3174bb39806f4752e14fa12582563d4b4c0c Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Tue, 18 Feb 2020 12:29:03 +0100 Subject: build glibc in parallel --- src/allocators/glibc.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/allocators/glibc.py b/src/allocators/glibc.py index 2718343..faeadd4 100644 --- a/src/allocators/glibc.py +++ b/src/allocators/glibc.py @@ -17,6 +17,8 @@ """Glibc definitions""" +from multiprocessing import cpu_count + from src.allocator import Allocator, LIBRARY_PATH from src.artifact import GitArtifact @@ -37,7 +39,7 @@ class Glibc(Allocator): self.build_cmds = ["mkdir -p glibc-build", "cd glibc-build; {srcdir}/configure --prefix={dir} " + configure_args, "cd glibc-build; make", - "cd glibc-build; make install"] + f"cd glibc-build; make -l {cpu_count()} install"] self.cmd_prefix = "{dir}/lib/ld-linux-x86-64.so.2 --library-path {dir}/lib:" + LIBRARY_PATH -- cgit v1.2.3 From 64adaca5ef13770988dc732e23d17d5df10a58cc Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Tue, 18 Feb 2020 17:04:30 +0100 Subject: fix tcmallocs in all allocator definition --- src/allocators/all.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/allocators/all.py b/src/allocators/all.py index 4ac0819..8be79e7 100644 --- a/src/allocators/all.py +++ b/src/allocators/all.py @@ -18,7 +18,7 @@ """Collection containing all available allocators""" import src.allocators.glibcs -from src.allocators.tcmalloc import tcmalloc, tcmalloc_nofs +from src.allocators.tcmalloc import tcmalloc, tcmalloc_gperftools, tcmalloc_gperftools_nofs from src.allocators.jemalloc import jemalloc from src.allocators.hoard import hoard from src.allocators.mesh import mesh @@ -31,6 +31,7 @@ from src.allocators.snmalloc import snmalloc from src.allocators.rpmalloc import rpmalloc -allocators = [*src.allocators.glibcs.allocators, tcmalloc, tcmalloc_nofs, +allocators = [*src.allocators.glibcs.allocators, + tcmalloc, tcmalloc_gperftools, tcmalloc_gperftools_nofs, jemalloc, hoard, mesh, supermalloc, scalloc, tbbmalloc, llalloc, # streamflow, mimalloc, snmalloc, rpmalloc] -- cgit v1.2.3