Cap concurrent arena's shard block size to 128KB (#4147)

Summary:
Users sometime see their memtable size far smaller than expected. They probably have hit a fragementation of shard blocks. Cap their size anyway to reduce the impact of problem. 128KB is conservative so I don't imagine it can cause any performance problem.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/4147

Differential Revision: D8886706

Pulled By: siying

fbshipit-source-id: 8528a2a4196aa4457274522e2565fd3ff28f621e
main
Siying Dong 6 years ago committed by Facebook Github Bot
parent 79f009f22e
commit 4bb1e239b5
  1. 10
      util/concurrent_arena.cc

@ -18,9 +18,17 @@ namespace rocksdb {
__thread size_t ConcurrentArena::tls_cpuid = 0; __thread size_t ConcurrentArena::tls_cpuid = 0;
#endif #endif
namespace {
// If the shard block size is too large, in the worst case, every core
// allocates a block without populate it. If the shared block size is
// 1MB, 64 cores will quickly allocate 64MB, and may quickly trigger a
// flush. Cap the size instead.
const size_t kMaxShardBlockSize = size_t{128 * 1024};
} // namespace
ConcurrentArena::ConcurrentArena(size_t block_size, AllocTracker* tracker, ConcurrentArena::ConcurrentArena(size_t block_size, AllocTracker* tracker,
size_t huge_page_size) size_t huge_page_size)
: shard_block_size_(block_size / 8), : shard_block_size_(std::min(kMaxShardBlockSize, block_size / 8)),
shards_(), shards_(),
arena_(block_size, tracker, huge_page_size) { arena_(block_size, tracker, huge_page_size) {
Fixup(); Fixup();

Loading…
Cancel
Save