caches.h
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 <cstddef> 12 13 class ArgsManager; 14 15 //! min. -dbcache (bytes) 16 static constexpr size_t MIN_DB_CACHE{4_MiB}; 17 //! -dbcache default (bytes) 18 static constexpr size_t DEFAULT_DB_CACHE{DEFAULT_KERNEL_CACHE}; 19 20 namespace node { 21 size_t GetDefaultDBCache(); 22 struct IndexCacheSizes { 23 size_t tx_index{0}; 24 size_t filter_index{0}; 25 size_t txospender_index{0}; 26 }; 27 struct CacheSizes { 28 IndexCacheSizes index; 29 kernel::CacheSizes kernel; 30 }; 31 CacheSizes CalculateCacheSizes(const ArgsManager& args, size_t n_indexes = 0); 32 constexpr bool ShouldWarnOversizedDbCache(uint64_t dbcache, uint64_t total_ram) noexcept 33 { 34 const uint64_t cap{(total_ram < 2_GiB) ? DEFAULT_DB_CACHE : (total_ram / 100) * 75}; 35 return dbcache > cap; 36 } 37 38 void LogOversizedDbCache(const ArgsManager& args) noexcept; 39 } // namespace node 40 41 #endif // BITCOIN_NODE_CACHES_H