Skip to content

Commit 5b95a19

Browse files
committed
Make pcoinsTip memory calculations consistent
Since we are more accurately measuring pcoinsTip peak usage at twice the current in dynamic usage, it makes sense to double the default (this will lead to the same effective usage and peak usage as previously). We should also double the buffer used to avoid flushing if above 90% but still sufficient space remaining.
1 parent 4aa07fa commit 5b95a19

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

src/txdb.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@ class CBlockIndex;
2121
class CCoinsViewDBCursor;
2222
class uint256;
2323

24+
//! Compensate for extra memory peak (x1.5-x1.9) at flush time.
25+
static constexpr int DB_PEAK_USAGE_FACTOR = 2;
26+
//! No need to flush if at least this much space still available.
27+
static constexpr int MAX_BLOCK_COINSDB_USAGE = 100 * DB_PEAK_USAGE_FACTOR;
2428
//! -dbcache default (MiB)
25-
static const int64_t nDefaultDbCache = 300;
29+
static const int64_t nDefaultDbCache = 600;
2630
//! max. -dbcache (MiB)
2731
static const int64_t nMaxDbCache = sizeof(void*) > 4 ? 16384 : 1024;
2832
//! min. -dbcache (MiB)

src/validation.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2005,10 +2005,10 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode, int n
20052005
nLastSetChain = nNow;
20062006
}
20072007
int64_t nMempoolSizeMax = GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000;
2008-
int64_t cacheSize = pcoinsTip->DynamicMemoryUsage() * 2; // Compensate for extra memory peak (x1.5-x1.9) at flush time.
2008+
int64_t cacheSize = pcoinsTip->DynamicMemoryUsage() * DB_PEAK_USAGE_FACTOR;
20092009
int64_t nTotalSpace = nCoinCacheUsage + std::max<int64_t>(nMempoolSizeMax - nMempoolUsage, 0);
20102010
// The cache is large and we're within 10% and 100 MiB of the limit, but we have time now (not in the middle of a block processing).
2011-
bool fCacheLarge = mode == FLUSH_STATE_PERIODIC && cacheSize > std::max((9 * nTotalSpace) / 10, nTotalSpace - 100 * 1024 * 1024);
2011+
bool fCacheLarge = mode == FLUSH_STATE_PERIODIC && cacheSize > std::max((9 * nTotalSpace) / 10, nTotalSpace - MAX_BLOCK_COINSDB_USAGE * 1024 * 1024);
20122012
// The cache is over the limit, we have to write now.
20132013
bool fCacheCritical = mode == FLUSH_STATE_IF_NEEDED && cacheSize > nTotalSpace;
20142014
// It's been a while since we wrote the block index to disk. Do this frequently, so we don't need to redownload after a crash.

0 commit comments

Comments
 (0)