diff options
Diffstat (limited to 'vespamalloc/src/vespamalloc')
-rw-r--r-- | vespamalloc/src/vespamalloc/malloc/malloc.h | 8 | ||||
-rw-r--r-- | vespamalloc/src/vespamalloc/malloc/overload.h | 7 | ||||
-rw-r--r-- | vespamalloc/src/vespamalloc/malloc/threadpool.h | 2 | ||||
-rw-r--r-- | vespamalloc/src/vespamalloc/malloc/threadpool.hpp | 11 |
4 files changed, 26 insertions, 2 deletions
diff --git a/vespamalloc/src/vespamalloc/malloc/malloc.h b/vespamalloc/src/vespamalloc/malloc/malloc.h index 8e0a39e944b..449dce29896 100644 --- a/vespamalloc/src/vespamalloc/malloc/malloc.h +++ b/vespamalloc/src/vespamalloc/malloc/malloc.h @@ -25,6 +25,7 @@ public: } size_t getMaxNumThreads() const override { return _threadList.getMaxNumThreads(); } + int mallopt(int param, int value); void *malloc(size_t sz); void *malloc(size_t sz, std::align_val_t); void *realloc(void *oldPtr, size_t sz); @@ -149,6 +150,11 @@ void MemoryManager<MemBlockPtrT, ThreadListT>::info(FILE * os, size_t level) } template <typename MemBlockPtrT, typename ThreadListT> +int MemoryManager<MemBlockPtrT, ThreadListT>::mallopt(int param, int value) { + return _threadList.getCurrent().mallopt(param, value); +} + +template <typename MemBlockPtrT, typename ThreadListT> void * MemoryManager<MemBlockPtrT, ThreadListT>::malloc(size_t sz) { MemBlockPtrT mem; @@ -205,7 +211,7 @@ void MemoryManager<MemBlockPtrT, ThreadListT>::freeSC(void *ptr, SizeClassT sc) template <typename MemBlockPtrT, typename ThreadListT> void * MemoryManager<MemBlockPtrT, ThreadListT>::realloc(void *oldPtr, size_t sz) { - void *ptr(NULL); + void *ptr(nullptr); if (oldPtr) { MemBlockPtrT mem(oldPtr); mem.readjustAlignment(_segment); diff --git a/vespamalloc/src/vespamalloc/malloc/overload.h b/vespamalloc/src/vespamalloc/malloc/overload.h index 69d95ef5cdc..7d9c2b9c72e 100644 --- a/vespamalloc/src/vespamalloc/malloc/overload.h +++ b/vespamalloc/src/vespamalloc/malloc/overload.h @@ -4,7 +4,7 @@ #include <dlfcn.h> #include <errno.h> #include <new> -#include <stdlib.h> +#include <cstdlib> #include <malloc.h> class CreateAllocator @@ -140,6 +140,11 @@ struct mallinfo mallinfo() __THROW { } #endif +int mallopt(int param, int value) throw() __attribute((visibility("default"))); +int mallopt(int param, int value) throw() { + return vespamalloc::createAllocator()->mallopt(param, value); +} + void * malloc(size_t sz) __attribute((visibility("default"))); void * malloc(size_t sz) { return vespamalloc::createAllocator()->malloc(sz); diff --git a/vespamalloc/src/vespamalloc/malloc/threadpool.h b/vespamalloc/src/vespamalloc/malloc/threadpool.h index ac4f5bb8551..ec89079a415 100644 --- a/vespamalloc/src/vespamalloc/malloc/threadpool.h +++ b/vespamalloc/src/vespamalloc/malloc/threadpool.h @@ -19,6 +19,7 @@ public: void setPool(AllocPool & pool) { _allocPool = & pool; } + int mallopt(int param, int value); void malloc(size_t sz, MemBlockPtrT & mem); void free(MemBlockPtrT mem, SizeClassT sc); @@ -65,6 +66,7 @@ private: static constexpr bool alwaysReuse(SizeClassT sc) { return sc > ALWAYS_REUSE_SC_LIMIT; } AllocPool * _allocPool; + ssize_t _mmapLimit; AllocFree _memList[NUM_SIZE_CLASSES]; ThreadStatT _stat[NUM_SIZE_CLASSES]; uint32_t _threadId; diff --git a/vespamalloc/src/vespamalloc/malloc/threadpool.hpp b/vespamalloc/src/vespamalloc/malloc/threadpool.hpp index 7e86c3f691a..e9b9fabebdc 100644 --- a/vespamalloc/src/vespamalloc/malloc/threadpool.hpp +++ b/vespamalloc/src/vespamalloc/malloc/threadpool.hpp @@ -2,6 +2,7 @@ #pragma once #include <vespamalloc/malloc/threadpool.h> +#include <malloc.h> namespace vespamalloc { @@ -85,6 +86,7 @@ mallocHelper(size_t exactSize, template <typename MemBlockPtrT, typename ThreadStatT > ThreadPoolT<MemBlockPtrT, ThreadStatT>::ThreadPoolT() : _allocPool(nullptr), + _mmapLimit(0x40000000), _threadId(0), _osThreadId(0) { @@ -94,6 +96,15 @@ template <typename MemBlockPtrT, typename ThreadStatT > ThreadPoolT<MemBlockPtrT, ThreadStatT>::~ThreadPoolT() = default; template <typename MemBlockPtrT, typename ThreadStatT > +int ThreadPoolT<MemBlockPtrT, ThreadStatT>::mallopt(int param, int value) { + if (param == M_MMAP_THRESHOLD) { + _mmapLimit = value; + return 1; + } + return 0; +} + +template <typename MemBlockPtrT, typename ThreadStatT > void ThreadPoolT<MemBlockPtrT, ThreadStatT>::malloc(size_t sz, MemBlockPtrT & mem) { SizeClassT sc = MemBlockPtrT::sizeClass(sz); |