aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Morcos <morcos@chaincode.com>2017-03-31 10:17:13 -0400
committerWladimir J. van der Laan <laanwj@gmail.com>2017-04-05 08:23:01 +0200
commitab864d3e4943fc617853a64cf22fa3939f89fcd2 (patch)
tree85e0a5be0af8c86ff4ae9ba5325aeab61c9c52f4
parenta44a6a15f94a6223a71790c5a65eb2b8a5b35dd2 (diff)
downloadbitcoin-ab864d3e4943fc617853a64cf22fa3939f89fcd2.tar.xz
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. Github-Pull: #10133 Rebased-From: 5b95a190e8d7059039ce61e808d494dcf89ebb3b
-rw-r--r--src/txdb.h6
-rw-r--r--src/validation.cpp4
2 files changed, 7 insertions, 3 deletions
diff --git a/src/txdb.h b/src/txdb.h
index 7f5cf2b583..963f1006ea 100644
--- a/src/txdb.h
+++ b/src/txdb.h
@@ -21,8 +21,12 @@ class CBlockIndex;
class CCoinsViewDBCursor;
class uint256;
+//! Compensate for extra memory peak (x1.5-x1.9) at flush time.
+static constexpr int DB_PEAK_USAGE_FACTOR = 2;
+//! No need to flush if at least this much space still available.
+static constexpr int MAX_BLOCK_COINSDB_USAGE = 100 * DB_PEAK_USAGE_FACTOR;
//! -dbcache default (MiB)
-static const int64_t nDefaultDbCache = 300;
+static const int64_t nDefaultDbCache = 600;
//! max. -dbcache (MiB)
static const int64_t nMaxDbCache = sizeof(void*) > 4 ? 16384 : 1024;
//! min. -dbcache (MiB)
diff --git a/src/validation.cpp b/src/validation.cpp
index 43ef8c88fe..b855550728 100644
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -2027,10 +2027,10 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode, int n
nLastSetChain = nNow;
}
int64_t nMempoolSizeMax = GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000;
- int64_t cacheSize = pcoinsTip->DynamicMemoryUsage() * 2; // Compensate for extra memory peak (x1.5-x1.9) at flush time.
+ int64_t cacheSize = pcoinsTip->DynamicMemoryUsage() * DB_PEAK_USAGE_FACTOR;
int64_t nTotalSpace = nCoinCacheUsage + std::max<int64_t>(nMempoolSizeMax - nMempoolUsage, 0);
// 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).
- bool fCacheLarge = mode == FLUSH_STATE_PERIODIC && cacheSize > std::max((9 * nTotalSpace) / 10, nTotalSpace - 100 * 1024 * 1024);
+ bool fCacheLarge = mode == FLUSH_STATE_PERIODIC && cacheSize > std::max((9 * nTotalSpace) / 10, nTotalSpace - MAX_BLOCK_COINSDB_USAGE * 1024 * 1024);
// The cache is over the limit, we have to write now.
bool fCacheCritical = mode == FLUSH_STATE_IF_NEEDED && cacheSize > nTotalSpace;
// 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.