caches.h raw

   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  {
  38      const uint64_t available_ram{total_ram > DBCACHE_WARNING_RESERVED_RAM ? total_ram - DBCACHE_WARNING_RESERVED_RAM : 0};
  39      const uint64_t cap{std::max<uint64_t>(DEFAULT_DB_CACHE, (available_ram / 4) * 3)};
  40      return dbcache > cap;
  41  }
  42  
  43  void LogOversizedDbCache(const ArgsManager& args) noexcept;
  44  } // namespace node
  45  
  46  #endif // BITCOIN_NODE_CACHES_H
  47