aboutsummaryrefslogtreecommitdiff
path: root/src/allocators
diff options
context:
space:
mode:
Diffstat (limited to 'src/allocators')
-rw-r--r--src/allocators/tcmalloc.py25
-rw-r--r--src/allocators/tcmalloc/tcmalloc_2.7_cacheline_exclusive.patch26
-rw-r--r--src/allocators/tcmallocs.py26
3 files changed, 70 insertions, 7 deletions
diff --git a/src/allocators/tcmalloc.py b/src/allocators/tcmalloc.py
index 24f9b45..7d51bdd 100644
--- a/src/allocators/tcmalloc.py
+++ b/src/allocators/tcmalloc.py
@@ -16,7 +16,7 @@
# along with allocbench.
"""TCMalloc definition for allocbench"""
-from src.allocator import Allocator
+from src.allocator import Allocator, BUILDDIR
from src.artifact import GitArtifact
@@ -62,11 +62,22 @@ class TCMallocGperftools(Allocator):
tcmalloc_gperftools = TCMallocGperftools("TCMalloc-gperftools",
- color="xkcd:blue",
+ color="xkcd:dark blue",
version="gperftools-2.7")
-tcmalloc_gperftools_nofs = TCMallocGperftools(
- "TCMalloc-gperftools-NoFalsesharing",
- patches=["{patchdir}/tcmalloc_2.7_no_active_falsesharing.patch"],
- version="gperftools-2.7",
- color="xkcd:navy")
+tcmalloc_gperftools_nofs = TCMallocGperftools("TCMalloc-NoFalsesharing",
+ patches=["{patchdir}/tcmalloc_2.7_no_active_falsesharing.patch"],
+ version="gperftools-2.7",
+ color="xkcd:navy")
+
+tcmalloc_gperftools_align = TCMallocGperftools("TCMalloc-Aligned",
+ version="gperftools-2.7",
+ color="xkcd:light blue")
+
+tcmalloc_gperftools_align.LD_PRELOAD = f"{BUILDDIR}/align_to_cl.so {tcmalloc_gperftools_align.LD_PRELOAD}"
+
+tcmalloc_gperftools_cacheline_exclusive = TCMalloc("TCMalloc-Cacheline-Exclusive",
+ patches=["{patchdir}/tcmalloc_2.7_cacheline_exclusive.patch"],
+ version="gperftools-2.7",
+ color="xkcd:royal blue")
+
diff --git a/src/allocators/tcmalloc/tcmalloc_2.7_cacheline_exclusive.patch b/src/allocators/tcmalloc/tcmalloc_2.7_cacheline_exclusive.patch
new file mode 100644
index 0000000..bdd63e3
--- /dev/null
+++ b/src/allocators/tcmalloc/tcmalloc_2.7_cacheline_exclusive.patch
@@ -0,0 +1,26 @@
+diff --git src/common.cc src/common.cc
+index 203afdf..9257518 100644
+--- src/common.cc
++++ src/common.cc
+@@ -79,7 +79,7 @@ int AlignmentForSize(size_t size) {
+ if (size > kMaxSize) {
+ // Cap alignment at kPageSize for large sizes.
+ alignment = kPageSize;
+- } else if (size >= 128) {
++ } else if (size >= 512) {
+ // Space wasted due to alignment is at most 1/8, i.e., 12.5%.
+ alignment = (1 << LgFloor(size)) / 8;
+ } else if (size >= kMinAlign) {
+diff --git a/src/common.h b/src/common.h
+index cb45315..4131a13 100644
+--- src/common.h
++++ src/common.h
+@@ -61,7 +61,7 @@ typedef uintptr_t Length;
+ // waste due alignment of 25%. (eg malloc of 24 bytes will get 32 bytes)
+ static const size_t kMinAlign = 8;
+ #else
+-static const size_t kMinAlign = 16;
++static const size_t kMinAlign = 64;
+ #endif
+
+ // Using large pages speeds up the execution at a cost of larger memory use.
diff --git a/src/allocators/tcmallocs.py b/src/allocators/tcmallocs.py
new file mode 100644
index 0000000..46eccda
--- /dev/null
+++ b/src/allocators/tcmallocs.py
@@ -0,0 +1,26 @@
+# Copyright 2018-2019 Florian Fischer <florian.fl.fischer@fau.de>
+#
+# 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 <http://www.gnu.org/licenses/>.
+
+"""Collection containing all glibc variants"""
+
+import src.allocators.tcmalloc as tcm
+
+
+allocators = [tcm.tcmalloc,
+ tcm.tcmalloc_gperftools_nofs,
+ tcm.tcmalloc_gperftools_align,
+ tcm.tcmalloc_gperftools_cacheline_exclusive]