Correct units for "-dbcache" and "-prune"
All dbcache-related values in the code are measured in MiB (not in megabytes, MB) or in bytes. The GUI "-prune" values in GB are translated to the node values in MiB correctly. The maximum of the "-prune" QSpinBox is not limited by the default value of 99 (GB). Also, this improves log readability.
This commit is contained in:
parent
84d0fdce11
commit
6f6514a080
8 changed files with 24 additions and 19 deletions
12
src/init.cpp
12
src/init.cpp
|
@ -346,7 +346,7 @@ void SetupServerArgs()
|
||||||
gArgs.AddArg("-conf=<file>", strprintf("Specify configuration file. Relative paths will be prefixed by datadir location. (default: %s)", BITCOIN_CONF_FILENAME), false, OptionsCategory::OPTIONS);
|
gArgs.AddArg("-conf=<file>", strprintf("Specify configuration file. Relative paths will be prefixed by datadir location. (default: %s)", BITCOIN_CONF_FILENAME), false, OptionsCategory::OPTIONS);
|
||||||
gArgs.AddArg("-datadir=<dir>", "Specify data directory", false, OptionsCategory::OPTIONS);
|
gArgs.AddArg("-datadir=<dir>", "Specify data directory", false, OptionsCategory::OPTIONS);
|
||||||
gArgs.AddArg("-dbbatchsize", strprintf("Maximum database write batch size in bytes (default: %u)", nDefaultDbBatchSize), true, OptionsCategory::OPTIONS);
|
gArgs.AddArg("-dbbatchsize", strprintf("Maximum database write batch size in bytes (default: %u)", nDefaultDbBatchSize), true, OptionsCategory::OPTIONS);
|
||||||
gArgs.AddArg("-dbcache=<n>", strprintf("Set database cache size in megabytes (%d to %d, default: %d)", nMinDbCache, nMaxDbCache, nDefaultDbCache), false, OptionsCategory::OPTIONS);
|
gArgs.AddArg("-dbcache=<n>", strprintf("Set database cache size in MiB (%d to %d, default: %d)", nMinDbCache, nMaxDbCache, nDefaultDbCache), false, OptionsCategory::OPTIONS);
|
||||||
gArgs.AddArg("-debuglogfile=<file>", strprintf("Specify location of debug log file. Relative paths will be prefixed by a net-specific datadir location. (-nodebuglogfile to disable; default: %s)", DEFAULT_DEBUGLOGFILE), false, OptionsCategory::OPTIONS);
|
gArgs.AddArg("-debuglogfile=<file>", strprintf("Specify location of debug log file. Relative paths will be prefixed by a net-specific datadir location. (-nodebuglogfile to disable; default: %s)", DEFAULT_DEBUGLOGFILE), false, OptionsCategory::OPTIONS);
|
||||||
gArgs.AddArg("-feefilter", strprintf("Tell other nodes to filter invs to us by our mempool min fee (default: %u)", DEFAULT_FEEFILTER), true, OptionsCategory::OPTIONS);
|
gArgs.AddArg("-feefilter", strprintf("Tell other nodes to filter invs to us by our mempool min fee (default: %u)", DEFAULT_FEEFILTER), true, OptionsCategory::OPTIONS);
|
||||||
gArgs.AddArg("-includeconf=<file>", "Specify additional configuration file, relative to the -datadir path (only useable from configuration file, not command line)", false, OptionsCategory::OPTIONS);
|
gArgs.AddArg("-includeconf=<file>", "Specify additional configuration file, relative to the -datadir path (only useable from configuration file, not command line)", false, OptionsCategory::OPTIONS);
|
||||||
|
@ -1055,7 +1055,7 @@ bool AppInitParameterInteraction()
|
||||||
if (nPruneTarget < MIN_DISK_SPACE_FOR_BLOCK_FILES) {
|
if (nPruneTarget < MIN_DISK_SPACE_FOR_BLOCK_FILES) {
|
||||||
return InitError(strprintf(_("Prune configured below the minimum of %d MiB. Please use a higher number."), MIN_DISK_SPACE_FOR_BLOCK_FILES / 1024 / 1024));
|
return InitError(strprintf(_("Prune configured below the minimum of %d MiB. Please use a higher number."), MIN_DISK_SPACE_FOR_BLOCK_FILES / 1024 / 1024));
|
||||||
}
|
}
|
||||||
LogPrintf("Prune configured to target %uMiB on disk for block and undo files.\n", nPruneTarget / 1024 / 1024);
|
LogPrintf("Prune configured to target %u MiB on disk for block and undo files.\n", nPruneTarget / 1024 / 1024);
|
||||||
fPruneMode = true;
|
fPruneMode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1416,12 +1416,12 @@ bool AppInitMain(InitInterfaces& interfaces)
|
||||||
nCoinCacheUsage = nTotalCache; // the rest goes to in-memory cache
|
nCoinCacheUsage = nTotalCache; // the rest goes to in-memory cache
|
||||||
int64_t nMempoolSizeMax = gArgs.GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000;
|
int64_t nMempoolSizeMax = gArgs.GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000;
|
||||||
LogPrintf("Cache configuration:\n");
|
LogPrintf("Cache configuration:\n");
|
||||||
LogPrintf("* Using %.1fMiB for block index database\n", nBlockTreeDBCache * (1.0 / 1024 / 1024));
|
LogPrintf("* Using %.1f MiB for block index database\n", nBlockTreeDBCache * (1.0 / 1024 / 1024));
|
||||||
if (gArgs.GetBoolArg("-txindex", DEFAULT_TXINDEX)) {
|
if (gArgs.GetBoolArg("-txindex", DEFAULT_TXINDEX)) {
|
||||||
LogPrintf("* Using %.1fMiB for transaction index database\n", nTxIndexCache * (1.0 / 1024 / 1024));
|
LogPrintf("* Using %.1f MiB for transaction index database\n", nTxIndexCache * (1.0 / 1024 / 1024));
|
||||||
}
|
}
|
||||||
LogPrintf("* Using %.1fMiB for chain state database\n", nCoinDBCache * (1.0 / 1024 / 1024));
|
LogPrintf("* Using %.1f MiB for chain state database\n", nCoinDBCache * (1.0 / 1024 / 1024));
|
||||||
LogPrintf("* Using %.1fMiB for in-memory UTXO set (plus up to %.1fMiB of unused mempool space)\n", nCoinCacheUsage * (1.0 / 1024 / 1024), nMempoolSizeMax * (1.0 / 1024 / 1024));
|
LogPrintf("* Using %.1f MiB for in-memory UTXO set (plus up to %.1f MiB of unused mempool space)\n", nCoinCacheUsage * (1.0 / 1024 / 1024), nMempoolSizeMax * (1.0 / 1024 / 1024));
|
||||||
|
|
||||||
bool fLoaded = false;
|
bool fLoaded = false;
|
||||||
while (!fLoaded && !ShutdownRequested()) {
|
while (!fLoaded && !ShutdownRequested()) {
|
||||||
|
|
|
@ -121,7 +121,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="databaseCacheUnitLabel">
|
<widget class="QLabel" name="databaseCacheUnitLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>MB</string>
|
<string>MiB</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="textFormat">
|
<property name="textFormat">
|
||||||
<enum>Qt::PlainText</enum>
|
<enum>Qt::PlainText</enum>
|
||||||
|
|
|
@ -52,4 +52,7 @@ static const int MAX_URI_LENGTH = 255;
|
||||||
#define QAPP_APP_NAME_TESTNET "Bitcoin-Qt-testnet"
|
#define QAPP_APP_NAME_TESTNET "Bitcoin-Qt-testnet"
|
||||||
#define QAPP_APP_NAME_REGTEST "Bitcoin-Qt-regtest"
|
#define QAPP_APP_NAME_REGTEST "Bitcoin-Qt-regtest"
|
||||||
|
|
||||||
|
/* One gigabyte (GB) in bytes */
|
||||||
|
static constexpr uint64_t GB_BYTES{1000000000};
|
||||||
|
|
||||||
#endif // BITCOIN_QT_GUICONSTANTS_H
|
#endif // BITCOIN_QT_GUICONSTANTS_H
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <qt/intro.h>
|
#include <qt/intro.h>
|
||||||
#include <qt/forms/ui_intro.h>
|
#include <qt/forms/ui_intro.h>
|
||||||
|
|
||||||
|
#include <qt/guiconstants.h>
|
||||||
#include <qt/guiutil.h>
|
#include <qt/guiutil.h>
|
||||||
|
|
||||||
#include <interfaces/node.h>
|
#include <interfaces/node.h>
|
||||||
|
@ -21,7 +22,6 @@
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
static const uint64_t GB_BYTES = 1000000000LL;
|
|
||||||
/* Total required space (in GB) depending on user choice (prune, not prune) */
|
/* Total required space (in GB) depending on user choice (prune, not prune) */
|
||||||
static uint64_t requiredSpace;
|
static uint64_t requiredSpace;
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <qt/forms/ui_optionsdialog.h>
|
#include <qt/forms/ui_optionsdialog.h>
|
||||||
|
|
||||||
#include <qt/bitcoinunits.h>
|
#include <qt/bitcoinunits.h>
|
||||||
|
#include <qt/guiconstants.h>
|
||||||
#include <qt/guiutil.h>
|
#include <qt/guiutil.h>
|
||||||
#include <qt/optionsmodel.h>
|
#include <qt/optionsmodel.h>
|
||||||
|
|
||||||
|
@ -37,10 +38,6 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) :
|
||||||
/* Main elements init */
|
/* Main elements init */
|
||||||
ui->databaseCache->setMinimum(nMinDbCache);
|
ui->databaseCache->setMinimum(nMinDbCache);
|
||||||
ui->databaseCache->setMaximum(nMaxDbCache);
|
ui->databaseCache->setMaximum(nMaxDbCache);
|
||||||
static const uint64_t GiB = 1024 * 1024 * 1024;
|
|
||||||
static const uint64_t nMinDiskSpace = MIN_DISK_SPACE_FOR_BLOCK_FILES / GiB +
|
|
||||||
(MIN_DISK_SPACE_FOR_BLOCK_FILES % GiB) ? 1 : 0;
|
|
||||||
ui->pruneSize->setMinimum(nMinDiskSpace);
|
|
||||||
ui->threadsScriptVerif->setMinimum(-GetNumCores());
|
ui->threadsScriptVerif->setMinimum(-GetNumCores());
|
||||||
ui->threadsScriptVerif->setMaximum(MAX_SCRIPTCHECK_THREADS);
|
ui->threadsScriptVerif->setMaximum(MAX_SCRIPTCHECK_THREADS);
|
||||||
ui->pruneWarning->setVisible(false);
|
ui->pruneWarning->setVisible(false);
|
||||||
|
@ -161,6 +158,10 @@ void OptionsDialog::setModel(OptionsModel *_model)
|
||||||
mapper->toFirst();
|
mapper->toFirst();
|
||||||
|
|
||||||
updateDefaultProxyNets();
|
updateDefaultProxyNets();
|
||||||
|
|
||||||
|
// Prune values are in GB to be consistent with intro.cpp
|
||||||
|
static constexpr uint64_t nMinDiskSpace = (MIN_DISK_SPACE_FOR_BLOCK_FILES / GB_BYTES) + (MIN_DISK_SPACE_FOR_BLOCK_FILES % GB_BYTES) ? 1 : 0;
|
||||||
|
ui->pruneSize->setRange(nMinDiskSpace, _model->node().getAssumedBlockchainSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* warn when one of the following settings changes by user action (placed here so init via mapper doesn't trigger them) */
|
/* warn when one of the following settings changes by user action (placed here so init via mapper doesn't trigger them) */
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <qt/optionsmodel.h>
|
#include <qt/optionsmodel.h>
|
||||||
|
|
||||||
#include <qt/bitcoinunits.h>
|
#include <qt/bitcoinunits.h>
|
||||||
|
#include <qt/guiconstants.h>
|
||||||
#include <qt/guiutil.h>
|
#include <qt/guiutil.h>
|
||||||
|
|
||||||
#include <interfaces/node.h>
|
#include <interfaces/node.h>
|
||||||
|
@ -92,9 +93,9 @@ void OptionsModel::Init(bool resetSettings)
|
||||||
settings.setValue("bPrune", false);
|
settings.setValue("bPrune", false);
|
||||||
if (!settings.contains("nPruneSize"))
|
if (!settings.contains("nPruneSize"))
|
||||||
settings.setValue("nPruneSize", 2);
|
settings.setValue("nPruneSize", 2);
|
||||||
// Convert prune size to MB:
|
// Convert prune size from GB to MiB:
|
||||||
const uint64_t nPruneSizeMB = settings.value("nPruneSize").toInt() * 1000;
|
const uint64_t nPruneSizeMiB = (settings.value("nPruneSize").toInt() * GB_BYTES) >> 20;
|
||||||
if (!m_node.softSetArg("-prune", settings.value("bPrune").toBool() ? std::to_string(nPruneSizeMB) : "0")) {
|
if (!m_node.softSetArg("-prune", settings.value("bPrune").toBool() ? std::to_string(nPruneSizeMiB) : "0")) {
|
||||||
addOverriddenOption("-prune");
|
addOverriddenOption("-prune");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -201,14 +201,14 @@ static const unsigned int NODE_NETWORK_LIMITED_MIN_BLOCKS = 288;
|
||||||
static const signed int DEFAULT_CHECKBLOCKS = 6;
|
static const signed int DEFAULT_CHECKBLOCKS = 6;
|
||||||
static const unsigned int DEFAULT_CHECKLEVEL = 3;
|
static const unsigned int DEFAULT_CHECKLEVEL = 3;
|
||||||
|
|
||||||
// Require that user allocate at least 550MB for block & undo files (blk???.dat and rev???.dat)
|
// Require that user allocate at least 550 MiB for block & undo files (blk???.dat and rev???.dat)
|
||||||
// At 1MB per block, 288 blocks = 288MB.
|
// At 1MB per block, 288 blocks = 288MB.
|
||||||
// Add 15% for Undo data = 331MB
|
// Add 15% for Undo data = 331MB
|
||||||
// Add 20% for Orphan block rate = 397MB
|
// Add 20% for Orphan block rate = 397MB
|
||||||
// We want the low water mark after pruning to be at least 397 MB and since we prune in
|
// We want the low water mark after pruning to be at least 397 MB and since we prune in
|
||||||
// full block file chunks, we need the high water mark which triggers the prune to be
|
// full block file chunks, we need the high water mark which triggers the prune to be
|
||||||
// one 128MB block file + added 15% undo data = 147MB greater for a total of 545MB
|
// one 128MB block file + added 15% undo data = 147MB greater for a total of 545MB
|
||||||
// Setting the target to > than 550MB will make it likely we can respect the target.
|
// Setting the target to >= 550 MiB will make it likely we can respect the target.
|
||||||
static const uint64_t MIN_DISK_SPACE_FOR_BLOCK_FILES = 550 * 1024 * 1024;
|
static const uint64_t MIN_DISK_SPACE_FOR_BLOCK_FILES = 550 * 1024 * 1024;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -320,7 +320,7 @@ class PruneTest(BitcoinTestFramework):
|
||||||
if has_block(3):
|
if has_block(3):
|
||||||
raise AssertionError("blk00003.dat is still there, should be pruned by now")
|
raise AssertionError("blk00003.dat is still there, should be pruned by now")
|
||||||
|
|
||||||
# stop node, start back up with auto-prune at 550MB, make sure still runs
|
# stop node, start back up with auto-prune at 550 MiB, make sure still runs
|
||||||
self.stop_node(node_number)
|
self.stop_node(node_number)
|
||||||
self.start_node(node_number, extra_args=["-prune=550"])
|
self.start_node(node_number, extra_args=["-prune=550"])
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue