]>
Commit | Line | Data |
---|---|---|
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 | 17 | namespace ROCKSDB_NAMESPACE { |
7c673cae | 18 | |
1e59de90 | 19 | thread_local size_t ConcurrentArena::tls_cpuid = 0; |
7c673cae | 20 | |
11fdf7f2 TL |
21 | namespace { |
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. | |
26 | const size_t kMaxShardBlockSize = size_t{128 * 1024}; | |
27 | } // namespace | |
7c673cae | 28 | |
11fdf7f2 TL |
29 | ConcurrentArena::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 | ||
37 | ConcurrentArena::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 |