]> git.proxmox.com Git - ceph.git/blame - ceph/src/rocksdb/memory/concurrent_arena.cc
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / rocksdb / memory / concurrent_arena.cc
CommitLineData
7c673cae 1// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
11fdf7f2
TL
2// This source code is licensed under both the GPLv2 (found in the
3// COPYING file in the root directory) and Apache 2.0 License
4// (found in the LICENSE.Apache file in the root directory).
7c673cae
FG
5//
6// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
7// Use of this source code is governed by a BSD-style license that can be
8// found in the LICENSE file. See the AUTHORS file for names of contributors.
9
f67539c2 10#include "memory/concurrent_arena.h"
1e59de90 11
7c673cae 12#include <thread>
1e59de90 13
7c673cae
FG
14#include "port/port.h"
15#include "util/random.h"
16
f67539c2 17namespace ROCKSDB_NAMESPACE {
7c673cae 18
1e59de90 19thread_local size_t ConcurrentArena::tls_cpuid = 0;
7c673cae 20
11fdf7f2
TL
21namespace {
22// If the shard block size is too large, in the worst case, every core
23// allocates a block without populate it. If the shared block size is
24// 1MB, 64 cores will quickly allocate 64MB, and may quickly trigger a
25// flush. Cap the size instead.
26const size_t kMaxShardBlockSize = size_t{128 * 1024};
27} // namespace
7c673cae 28
11fdf7f2
TL
29ConcurrentArena::ConcurrentArena(size_t block_size, AllocTracker* tracker,
30 size_t huge_page_size)
31 : shard_block_size_(std::min(kMaxShardBlockSize, block_size / 8)),
32 shards_(),
33 arena_(block_size, tracker, huge_page_size) {
7c673cae
FG
34 Fixup();
35}
36
37ConcurrentArena::Shard* ConcurrentArena::Repick() {
11fdf7f2 38 auto shard_and_index = shards_.AccessElementAndIndex();
7c673cae
FG
39 // even if we are cpu 0, use a non-zero tls_cpuid so we can tell we
40 // have repicked
11fdf7f2 41 tls_cpuid = shard_and_index.second | shards_.Size();
11fdf7f2 42 return shard_and_index.first;
7c673cae
FG
43}
44
f67539c2 45} // namespace ROCKSDB_NAMESPACE