mirror of
https://github.com/Retropex/bitcoin.git
synced 2025-06-03 16:02:34 +02:00

Carrying non-kernel related fields in the cache sizes for the indexes is confusing for kernel library users. The cache sizes also are set currently with magic numbers in bitcoin-chainstate. The comments for the cache size calculations are also not completely clear. Solve these things by moving the kernel-specific cache size fields to their own struct. This slightly changes the way the cache is allocated if the txindex and/or blockfilterindex is used. Since they are now given precedence over the block tree db cache, this results in a bit less cache being allocated to the block tree db, coinsdb and coins caches. The effect is negligible though, i.e. cache sizes with default dbcache reported through the logs are: master: Cache configuration: * Using 2.0 MiB for block index database * Using 56.0 MiB for transaction index database * Using 49.0 MiB for basic block filter index database * Using 8.0 MiB for chain state database * Using 335.0 MiB for in-memory UTXO set (plus up to 286.1 MiB of unused mempool space) this branch: Cache configuration: * Using 2.0 MiB for block index database * Using 56.2 MiB for transaction index database * Using 49.2 MiB for basic block filter index database * Using 8.0 MiB for chain state database * Using 334.5 MiB for in-memory UTXO set (plus up to 286.1 MiB of unused mempool space)
35 lines
1.0 KiB
C++
35 lines
1.0 KiB
C++
// Copyright (c) 2024-present The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_KERNEL_CACHES_H
|
|
#define BITCOIN_KERNEL_CACHES_H
|
|
|
|
#include <util/byte_units.h>
|
|
|
|
#include <algorithm>
|
|
|
|
//! Max memory allocated to block tree DB specific cache (bytes)
|
|
static constexpr size_t MAX_BLOCK_DB_CACHE{2_MiB};
|
|
//! Max memory allocated to coin DB specific cache (bytes)
|
|
static constexpr size_t MAX_COINS_DB_CACHE{8_MiB};
|
|
|
|
namespace kernel {
|
|
struct CacheSizes {
|
|
size_t block_tree_db;
|
|
size_t coins_db;
|
|
size_t coins;
|
|
|
|
CacheSizes(size_t total_cache)
|
|
{
|
|
block_tree_db = std::min(total_cache / 8, MAX_BLOCK_DB_CACHE);
|
|
total_cache -= block_tree_db;
|
|
coins_db = std::min(total_cache / 2, MAX_COINS_DB_CACHE);
|
|
total_cache -= coins_db;
|
|
coins = total_cache; // the rest goes to the coins cache
|
|
}
|
|
};
|
|
} // namespace kernel
|
|
|
|
#endif // BITCOIN_KERNEL_CACHES_H
|