-
-
Notifications
You must be signed in to change notification settings - Fork 355
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Faster initial block index load for low memory machines #1433
Conversation
WalkthroughThe recent modifications enhance the blockchain software by dynamically adjusting the initial block verification process based on the system's RAM availability. This adaptive approach reduces the load on low-memory systems by checking fewer blocks during startup, thus optimizing performance and resource utilization. Changes
Poem
Recent Review DetailsConfiguration used: CodeRabbit UI Files selected for processing (2)
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (invoked as PR comments)
Additionally, you can add CodeRabbit Configration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
@@ -47,6 +47,8 @@ static const int64_t nMaxCoinsDBCache = 8; | |||
static const bool DEFAULT_FULL_BLOCKINDEX_CHECK = false; | |||
//! If not doing full check of block index, check only N of the latest blocks | |||
static const int DEFAULT_BLOCKINDEX_NUMBER_OF_BLOCKS_TO_CHECK = 10000; | |||
//! Check fewer blocks if low on memory | |||
static const int DEFAULT_BLOCKINDEX_LOWMEM_NUMBER_OF_BLOCKS_TO_CHECK = 50; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider reviewing the value of DEFAULT_BLOCKINDEX_LOWMEM_NUMBER_OF_BLOCKS_TO_CHECK
.
The reduction to 50 blocks from the default 10,000 could potentially compromise the security and integrity of the block validation process on systems with low memory. It's advisable to assess the risks associated with this significant reduction and possibly consider a higher threshold that balances performance with security.
#ifdef __linux__ | ||
struct sysinfo sysInfo; | ||
|
||
if (sysinfo(&sysInfo) == 0 && sysInfo.freeram < 2ul*1024ul*1024ul*1024ul) | ||
nBlocksToCheck = DEFAULT_BLOCKINDEX_LOWMEM_NUMBER_OF_BLOCKS_TO_CHECK; | ||
#endif |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Review the implementation of the memory check and conditional logic.
The use of sysinfo
to determine the available RAM and adjust the number of blocks to check is a critical change. Ensure that this logic is robust and consider edge cases, such as systems close to the 2GB threshold. Additionally, validate that the sysinfo
function provides reliable results across different Linux distributions and hardware configurations.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Code changes brief
Linux only: detect if there is <2GB available RAM and then lower the number of block headers to perform a full check on during startup
Summary by CodeRabbit