Merge bitcoin/bitcoin#31064: init: Correct coins db cache size setting

3a4a788ee0 init: Correct coins db cache size setting (TheCharlatan)

Pull request description:

  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.

  Before:
  ```
  2024-10-09T21:22:17Z Checking all blk files are present...
  2024-10-09T21:22:17Z Initializing chainstate Chainstate [ibd] @ height -1 (null)
  2024-10-09T21:22:17Z Opening LevelDB in /home/drgrid/.bitcoin/signet/chainstate
  2024-10-09T21:22:17Z Opened LevelDB successfully
  2024-10-09T21:22:17Z Using obfuscation key for /home/drgrid/.bitcoin/signet/chainstate: b0a6f4e95fd05c92
  2024-10-09T21:22:17Z Loaded best chain: hashBestChain=0000000e119967d4937dad58456885ae43fb1761db686947e2f8e168c9a39a4f height=216852 date=2024-10-09T21:06:16Z progress=0.999989
  2024-10-09T21:22:17Z Opening LevelDB in /home/drgrid/.bitcoin/signet/chainstate
  2024-10-09T21:22:17Z Opened LevelDB successfully
  2024-10-09T21:22:17Z Using obfuscation key for /home/drgrid/.bitcoin/signet/chainstate: b0a6f4e95fd05c92
  2024-10-09T21:22:17Z [Chainstate [ibd] @ height 216852 (0000000e119967d4937dad58456885ae43fb1761db686947e2f8e168c9a39a4f)] resized coinsdb cache to 8.0 MiB
  2024-10-09T21:22:17Z [Chainstate [ibd] @ height 216852 (0000000e119967d4937dad58456885ae43fb1761db686947e2f8e168c9a39a4f)] resized coinstip cache to 440.0 MiB
  2024-10-09T21:22:17Z init message: Verifying blocks…
  ```

  After:
  ```
  2024-10-09T21:21:37Z Checking all blk files are present...
  2024-10-09T21:21:37Z Initializing chainstate Chainstate [ibd] @ height -1 (null)
  2024-10-09T21:21:37Z Opening LevelDB in /home/drgrid/.bitcoin/signet/chainstate
  2024-10-09T21:21:37Z Opened LevelDB successfully
  2024-10-09T21:21:37Z Using obfuscation key for /home/drgrid/.bitcoin/signet/chainstate: b0a6f4e95fd05c92
  2024-10-09T21:21:37Z Loaded best chain: hashBestChain=0000012c12b48011a7d9150ce96ed6a44bbf32b09eeecaff4a667789dda2a566 height=216850 date=2024-10-09T20:37:05Z progress=0.999971
  2024-10-09T21:21:37Z init message: Verifying blocks…
  ```

  The change may also be verified by looking at the `feature_assumeutxo.py` functional test debug logs.

ACKs for top commit:
  fjahr:
    utACK 3a4a788ee0
  achow101:
    ACK 3a4a788ee0
  laanwj:
    Code review ACK 3a4a788ee0
  BrandonOdiwuor:
    Code Review ACK 3a4a788ee0

Tree-SHA512: 87878d0d196bb426370d4b4bd180ca52a34017a0799ecea651c2532461fd2927b0f7cc8182276a7d9bb1fe0ede7d0ad677e3714ca22f321917d711c643acc578
pull/31160/merge
Ava Chow 1 week ago
commit 6b73eb9a1a
No known key found for this signature in database
GPG Key ID: 17565732E08E5E41

@ -100,11 +100,12 @@ static ChainstateLoadResult CompleteChainstateInitialization(
assert(chainman.m_total_coinstip_cache > 0); assert(chainman.m_total_coinstip_cache > 0);
assert(chainman.m_total_coinsdb_cache > 0); assert(chainman.m_total_coinsdb_cache > 0);
// Conservative value which is arbitrarily chosen, as it will ultimately be changed // If running with multiple chainstates, limit the cache sizes with a
// by a call to `chainman.MaybeRebalanceCaches()`. We just need to make sure // discount factor. If discounted the actual cache size will be
// that the sum of the two caches (40%) does not exceed the allowable amount // recalculated by `chainman.MaybeRebalanceCaches()`. The discount factor
// during this temporary initialization state. // is conservatively chosen such that the sum of the caches does not exceed
double init_cache_fraction = 0.2; // 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 // At this point we're either in reindex or we've loaded a useful
// block tree into BlockIndex()! // block tree into BlockIndex()!

@ -1968,6 +1968,8 @@ void Chainstate::InitCoinsDB(
.obfuscate = true, .obfuscate = true,
.options = m_chainman.m_options.coins_db}, .options = m_chainman.m_options.coins_db},
m_chainman.m_options.coins_view); m_chainman.m_options.coins_view);
m_coinsdb_cache_size_bytes = cache_size_bytes;
} }
void Chainstate::InitCoinsCache(size_t cache_size_bytes) void Chainstate::InitCoinsCache(size_t cache_size_bytes)

Loading…
Cancel
Save