caches.h raw
1 // Copyright (c) 2024-present The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5 #ifndef BITCOIN_KERNEL_CACHES_H
6 #define BITCOIN_KERNEL_CACHES_H
7
8 #include <util/byte_units.h>
9
10 #include <algorithm>
11 #include <cstdint>
12
13 //! Suggested default amount of cache reserved for the kernel (bytes)
14 static constexpr uint64_t DEFAULT_KERNEL_CACHE{450_MiB};
15 //! Default LevelDB write batch size
16 static constexpr uint64_t DEFAULT_DB_CACHE_BATCH{32_MiB};
17
18 //! Max memory allocated to block tree DB specific cache (bytes)
19 static constexpr uint64_t MAX_BLOCK_DB_CACHE{2_MiB};
20 //! Max memory allocated to coin DB specific cache (bytes)
21 static constexpr uint64_t MAX_COINS_DB_CACHE{8_MiB};
22
23 namespace kernel {
24 struct CacheSizes {
25 uint64_t block_tree_db;
26 uint64_t coins_db;
27 uint64_t coins;
28
29 CacheSizes(uint64_t total_cache)
30 {
31 block_tree_db = std::min(total_cache / 8, MAX_BLOCK_DB_CACHE);
32 total_cache -= block_tree_db;
33 coins_db = std::min(total_cache / 2, MAX_COINS_DB_CACHE);
34 total_cache -= coins_db;
35 coins = total_cache; // the rest goes to the coins cache
36 }
37 };
38 } // namespace kernel
39
40 #endif // BITCOIN_KERNEL_CACHES_H
41