diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-06-23 10:22:08 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2023-06-23 10:22:08 +0000 |
commit | d868575e5122c3a8b349f2eacfaf96114df22dba (patch) | |
tree | 56a39a17fc2cad5c1b90ec65d045f339f80005d2 /vespamalloc | |
parent | 97b15016085dd6f2b515b7051803f92e34b29ab9 (diff) |
- Add control of M_MMAP_THRESHOLD with environment variable VESPA_MALLOC_MMAP_THRESHOLD.
- Reduce default from 1G to 64M.
Diffstat (limited to 'vespamalloc')
-rw-r--r-- | vespamalloc/src/vespamalloc/malloc/threadlist.hpp | 13 | ||||
-rw-r--r-- | vespamalloc/src/vespamalloc/malloc/threadpool.h | 4 | ||||
-rw-r--r-- | vespamalloc/src/vespamalloc/malloc/threadpool.hpp | 9 |
3 files changed, 21 insertions, 5 deletions
diff --git a/vespamalloc/src/vespamalloc/malloc/threadlist.hpp b/vespamalloc/src/vespamalloc/malloc/threadlist.hpp index 743090a4e12..e22b93c48fe 100644 --- a/vespamalloc/src/vespamalloc/malloc/threadlist.hpp +++ b/vespamalloc/src/vespamalloc/malloc/threadlist.hpp @@ -2,9 +2,14 @@ #pragma once #include "threadlist.h" +#include <malloc.h> namespace vespamalloc { +namespace { + const char * VESPA_MALLOC_MMAP_THRESHOLD = "VESPA_MALLOC_MMAP_THRESHOLD"; +} + template <typename MemBlockPtrT, typename ThreadStatT> ThreadListT<MemBlockPtrT, ThreadStatT>::ThreadListT(AllocPool & allocPool, MMapPool & mmapPool) : _isThreaded(false), @@ -13,8 +18,14 @@ ThreadListT<MemBlockPtrT, ThreadStatT>::ThreadListT(AllocPool & allocPool, MMapP _allocPool(allocPool), _mmapPool(mmapPool) { + const char * mmapThresholdS = getenv(VESPA_MALLOC_MMAP_THRESHOLD); + int mmapThreshold = (mmapThresholdS != nullptr) + ? strtol(mmapThresholdS, nullptr, 0) + : MMAP_LIMIT_DEFAULT; for (size_t i = 0; i < getMaxNumThreads(); i++) { - _threadVector[i].setPool(_allocPool, _mmapPool); + auto & thread = _threadVector[i]; + thread.setPool(_allocPool, _mmapPool); + thread.mallopt(M_MMAP_THRESHOLD, mmapThreshold); } } diff --git a/vespamalloc/src/vespamalloc/malloc/threadpool.h b/vespamalloc/src/vespamalloc/malloc/threadpool.h index 30ece02ba29..750833084ca 100644 --- a/vespamalloc/src/vespamalloc/malloc/threadpool.h +++ b/vespamalloc/src/vespamalloc/malloc/threadpool.h @@ -9,6 +9,10 @@ namespace vespamalloc { +constexpr int MMAP_LIMIT_MIN = 0x100000; // 1M +constexpr int MMAP_LIMIT_DEFAULT = 0x4000000; // 64M +constexpr int MMAP_LIMIT_MAX = 0x40000000; // 1G + template <typename MemBlockPtrT, typename ThreadStatT > class ThreadPoolT { diff --git a/vespamalloc/src/vespamalloc/malloc/threadpool.hpp b/vespamalloc/src/vespamalloc/malloc/threadpool.hpp index b5a283f6600..e62fa0f2fdf 100644 --- a/vespamalloc/src/vespamalloc/malloc/threadpool.hpp +++ b/vespamalloc/src/vespamalloc/malloc/threadpool.hpp @@ -7,8 +7,10 @@ namespace vespamalloc { namespace { - constexpr size_t MMAP_LIMIT_MIN = 0x100000; // 1M - constexpr size_t MMAP_LIMIT_MAX = 0x40000000; // 1G + size_t + sanitizeMMapThreshold(int threshold) { + return std::min(MMAP_LIMIT_MAX, std::max(MMAP_LIMIT_MIN, threshold)); + } } template <typename MemBlockPtrT, typename ThreadStatT> @@ -112,9 +114,8 @@ ThreadPoolT<MemBlockPtrT, ThreadStatT>::~ThreadPoolT() = default; template <typename MemBlockPtrT, typename ThreadStatT > int ThreadPoolT<MemBlockPtrT, ThreadStatT>::mallopt(int param, int value) { - size_t limit = value; if (param == M_MMAP_THRESHOLD) { - _mmapLimit = std::min(MMAP_LIMIT_MAX, std::max(MMAP_LIMIT_MIN, limit)); + _mmapLimit = sanitizeMMapThreshold(value); return 1; } return 0; |