mirror of https://github.com/facebook/rocksdb.git
slightly improve jemalloc allocator API header (#7592)
Summary: Fix a few typos and avoid a potential nullptr dereference. Pull Request resolved: https://github.com/facebook/rocksdb/pull/7592 Reviewed By: zhichao-cao Differential Revision: D24582111 Pulled By: riversand963 fbshipit-source-id: 51e9260e8cad1fcdedd310c889f0faeec6efd937
This commit is contained in:
parent
248d10fb96
commit
2404f8b9ec
|
@ -45,31 +45,31 @@ struct JemallocAllocatorOptions {
|
||||||
bool limit_tcache_size = false;
|
bool limit_tcache_size = false;
|
||||||
|
|
||||||
// Lower bound of allocation size to use tcache, if limit_tcache_size=true.
|
// Lower bound of allocation size to use tcache, if limit_tcache_size=true.
|
||||||
// When used with block cache, it is recommneded to set it to block_size/4.
|
// When used with block cache, it is recommended to set it to block_size/4.
|
||||||
size_t tcache_size_lower_bound = 1024;
|
size_t tcache_size_lower_bound = 1024;
|
||||||
|
|
||||||
// Upper bound of allocation size to use tcache, if limit_tcache_size=true.
|
// Upper bound of allocation size to use tcache, if limit_tcache_size=true.
|
||||||
// When used with block cache, it is recommneded to set it to block_size.
|
// When used with block cache, it is recommended to set it to block_size.
|
||||||
size_t tcache_size_upper_bound = 16 * 1024;
|
size_t tcache_size_upper_bound = 16 * 1024;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Generate memory allocators which allocates through Jemalloc and utilize
|
// Generate memory allocator which allocates through Jemalloc and utilize
|
||||||
// MADV_DONTDUMP through madvice to exclude cache items from core dump.
|
// MADV_DONTDUMP through madvise to exclude cache items from core dump.
|
||||||
// Applications can use the allocator with block cache to exclude block cache
|
// Applications can use the allocator with block cache to exclude block cache
|
||||||
// usage from core dump.
|
// usage from core dump.
|
||||||
//
|
//
|
||||||
// Implementation details:
|
// Implementation details:
|
||||||
// The JemallocNodumpAllocator creates a delicated jemalloc arena, and all
|
// The JemallocNodumpAllocator creates a dedicated jemalloc arena, and all
|
||||||
// allocations of the JemallocNodumpAllocator is through the same arena.
|
// allocations of the JemallocNodumpAllocator are through the same arena.
|
||||||
// The memory allocator hooks memory allocation of the arena, and call
|
// The memory allocator hooks memory allocation of the arena, and calls
|
||||||
// madvice() with MADV_DONTDUMP flag to exclude the piece of memory from
|
// madvise() with MADV_DONTDUMP flag to exclude the piece of memory from
|
||||||
// core dump. Side benefit of using single arena would be reduce of jemalloc
|
// core dump. Side benefit of using single arena would be reduction of jemalloc
|
||||||
// metadata for some workload.
|
// metadata for some workloads.
|
||||||
//
|
//
|
||||||
// To mitigate mutex contention for using one single arena, jemalloc tcache
|
// To mitigate mutex contention for using one single arena, jemalloc tcache
|
||||||
// (thread-local cache) is enabled to cache unused allocations for future use.
|
// (thread-local cache) is enabled to cache unused allocations for future use.
|
||||||
// The tcache normally incur 0.5M extra memory usage per-thread. The usage
|
// The tcache normally incurs 0.5M extra memory usage per-thread. The usage
|
||||||
// can be reduce by limitting allocation sizes to cache.
|
// can be reduced by limiting allocation sizes to cache.
|
||||||
extern Status NewJemallocNodumpAllocator(
|
extern Status NewJemallocNodumpAllocator(
|
||||||
JemallocAllocatorOptions& options,
|
JemallocAllocatorOptions& options,
|
||||||
std::shared_ptr<MemoryAllocator>* memory_allocator);
|
std::shared_ptr<MemoryAllocator>* memory_allocator);
|
||||||
|
|
|
@ -132,6 +132,9 @@ size_t JemallocNodumpAllocator::UsableSize(void* p,
|
||||||
Status NewJemallocNodumpAllocator(
|
Status NewJemallocNodumpAllocator(
|
||||||
JemallocAllocatorOptions& options,
|
JemallocAllocatorOptions& options,
|
||||||
std::shared_ptr<MemoryAllocator>* memory_allocator) {
|
std::shared_ptr<MemoryAllocator>* memory_allocator) {
|
||||||
|
if (memory_allocator == nullptr) {
|
||||||
|
return Status::InvalidArgument("memory_allocator must be non-null.");
|
||||||
|
}
|
||||||
*memory_allocator = nullptr;
|
*memory_allocator = nullptr;
|
||||||
Status unsupported = Status::NotSupported(
|
Status unsupported = Status::NotSupported(
|
||||||
"JemallocNodumpAllocator only available with jemalloc version >= 5 "
|
"JemallocNodumpAllocator only available with jemalloc version >= 5 "
|
||||||
|
@ -143,9 +146,6 @@ Status NewJemallocNodumpAllocator(
|
||||||
if (!HasJemalloc()) {
|
if (!HasJemalloc()) {
|
||||||
return unsupported;
|
return unsupported;
|
||||||
}
|
}
|
||||||
if (memory_allocator == nullptr) {
|
|
||||||
return Status::InvalidArgument("memory_allocator must be non-null.");
|
|
||||||
}
|
|
||||||
if (options.limit_tcache_size &&
|
if (options.limit_tcache_size &&
|
||||||
options.tcache_size_lower_bound >= options.tcache_size_upper_bound) {
|
options.tcache_size_lower_bound >= options.tcache_size_upper_bound) {
|
||||||
return Status::InvalidArgument(
|
return Status::InvalidArgument(
|
||||||
|
|
Loading…
Reference in New Issue