/tmp/bitcoin/src/node/caches.h
Line | Count | Source |
1 | | // Copyright (c) 2021-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_NODE_CACHES_H |
6 | | #define BITCOIN_NODE_CACHES_H |
7 | | |
8 | | #include <kernel/caches.h> |
9 | | #include <util/byte_units.h> |
10 | | |
11 | | #include <algorithm> |
12 | | #include <cstddef> |
13 | | #include <cstdint> |
14 | | |
15 | | class ArgsManager; |
16 | | |
17 | | //! min. -dbcache (bytes) |
18 | | static constexpr uint64_t MIN_DB_CACHE{4_MiB}; |
19 | | //! -dbcache default (bytes) |
20 | | static constexpr uint64_t DEFAULT_DB_CACHE{DEFAULT_KERNEL_CACHE}; |
21 | | //! Reserved non-dbcache memory usage. |
22 | | static constexpr uint64_t DBCACHE_WARNING_RESERVED_RAM{2_GiB}; |
23 | | |
24 | | namespace node { |
25 | | uint64_t GetDefaultDBCache(); |
26 | | struct IndexCacheSizes { |
27 | | uint64_t tx_index{0}; |
28 | | uint64_t filter_index{0}; |
29 | | uint64_t txospender_index{0}; |
30 | | }; |
31 | | struct CacheSizes { |
32 | | IndexCacheSizes index; |
33 | | kernel::CacheSizes kernel; |
34 | | }; |
35 | | CacheSizes CalculateCacheSizes(const ArgsManager& args, size_t n_indexes = 0); |
36 | | constexpr bool ShouldWarnOversizedDbCache(uint64_t dbcache, uint64_t total_ram) noexcept |
37 | 1.07k | { |
38 | 1.07k | const uint64_t available_ram{total_ram > DBCACHE_WARNING_RESERVED_RAM ? total_ram - DBCACHE_WARNING_RESERVED_RAM : 0}; |
39 | 1.07k | const uint64_t cap{std::max<uint64_t>(DEFAULT_DB_CACHE, (available_ram / 4) * 3)}; |
40 | 1.07k | return dbcache > cap; |
41 | 1.07k | } |
42 | | |
43 | | void LogOversizedDbCache(const ArgsManager& args) noexcept; |
44 | | } // namespace node |
45 | | |
46 | | #endif // BITCOIN_NODE_CACHES_H |