From 3a4a788ee0db83d20607f14801dbed2ee932943c Mon Sep 17 00:00:00 2001 From: TheCharlatan Date: Wed, 9 Oct 2024 22:40:00 +0200 Subject: [PATCH] init: Correct coins db cache size setting The chainstate caches are currently re-balanced on startup even in the non-assumeutxo case, leading to the database being needlessly re-opened and its cache re-allocated. Similar to `InitCoinsCache` and `m_coinstip_cache_size_bytes` the `m_coinsdb_cache_size_bytes` should be set in `InitCoinsDB`. Together with only conservatively setting the cache values when a assumeutxo chainstate is present, this allows for skipping the cache re-balance during initialization in the normal non-assumeutxo case. --- src/node/chainstate.cpp | 11 ++++++----- src/validation.cpp | 2 ++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/node/chainstate.cpp b/src/node/chainstate.cpp index d7e6176be1e..1ee168b6266 100644 --- a/src/node/chainstate.cpp +++ b/src/node/chainstate.cpp @@ -95,11 +95,12 @@ static ChainstateLoadResult CompleteChainstateInitialization( assert(chainman.m_total_coinstip_cache > 0); assert(chainman.m_total_coinsdb_cache > 0); - // Conservative value which is arbitrarily chosen, as it will ultimately be changed - // by a call to `chainman.MaybeRebalanceCaches()`. We just need to make sure - // that the sum of the two caches (40%) does not exceed the allowable amount - // during this temporary initialization state. - double init_cache_fraction = 0.2; + // If running with multiple chainstates, limit the cache sizes with a + // discount factor. If discounted the actual cache size will be + // recalculated by `chainman.MaybeRebalanceCaches()`. The discount factor + // is conservatively chosen such that the sum of the caches does not exceed + // the allowable amount during this temporary initialization state. + double init_cache_fraction = chainman.GetAll().size() > 1 ? 0.2 : 1.0; // At this point we're either in reindex or we've loaded a useful // block tree into BlockIndex()! diff --git a/src/validation.cpp b/src/validation.cpp index d4ec42015bb..d596a2cb250 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -1972,6 +1972,8 @@ void Chainstate::InitCoinsDB( .obfuscate = true, .options = m_chainman.m_options.coins_db}, m_chainman.m_options.coins_view); + + m_coinsdb_cache_size_bytes = cache_size_bytes; } void Chainstate::InitCoinsCache(size_t cache_size_bytes)