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