/ src / node / caches.h
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(size_t dbcache, size_t total_ram) noexcept
33  {
34      const size_t cap{(total_ram < 2048_MiB) ? 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