diff options
Diffstat (limited to 'src/allocators')
| -rw-r--r-- | src/allocators/tcmalloc.py | 25 | ||||
| -rw-r--r-- | src/allocators/tcmalloc/tcmalloc_2.7_cacheline_exclusive.patch | 26 | ||||
| -rw-r--r-- | src/allocators/tcmallocs.py | 26 |
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] |
