aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fl.fischer@fau.de>2020-02-17 11:16:47 +0100
committerFlorian Fischer <florian.fl.fischer@fau.de>2020-02-17 11:16:47 +0100
commita2ba38e85297ffc101b5db4a9b9f45330d224ca4 (patch)
tree58b7292eddf19816071f30715ef099ef6a740e4f
parent969fe0f6cd030bbd9dbfac0de1c0df0149486ffd (diff)
downloadallocbench-a2ba38e85297ffc101b5db4a9b9f45330d224ca4.tar.gz
allocbench-a2ba38e85297ffc101b5db4a9b9f45330d224ca4.zip
add tcmalloc 64 bit alignment patch and allocator definition
-rw-r--r--src/allocators/tcmalloc.py7
-rw-r--r--src/allocators/tcmalloc/tcmalloc_2.7_cacheline_exclusive.patch26
2 files changed, 32 insertions, 1 deletions
diff --git a/src/allocators/tcmalloc.py b/src/allocators/tcmalloc.py
index ecd03e1..ce00df3 100644
--- a/src/allocators/tcmalloc.py
+++ b/src/allocators/tcmalloc.py
@@ -45,6 +45,11 @@ tcmalloc_nofs = TCMalloc("TCMalloc-NoFalsesharing",
tcmalloc_align = TCMalloc("TCMalloc-Aligned",
version="gperftools-2.7",
- color="xkcd:navy")
+ color="xkcd:light blue")
tcmalloc_align.LD_PRELOAD = f"{BUILDDIR}/align_to_cl.so {tcmalloc_align.LD_PRELOAD}"
+
+tcmalloc_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.