Merge pull request #1566 from DeckerSU/patch-loadblockindexdb
LoadBlockIndexDB speed-up for non-LWMAPOS chains (x5 perfomance boost)
This commit is contained in:
28
src/main.cpp
28
src/main.cpp
@@ -147,10 +147,28 @@ namespace {
|
|||||||
|
|
||||||
struct CBlockIndexWorkComparator
|
struct CBlockIndexWorkComparator
|
||||||
{
|
{
|
||||||
bool operator()(CBlockIndex *pa, CBlockIndex *pb) const {
|
bool operator()(const CBlockIndex *pa, const CBlockIndex *pb) const {
|
||||||
// First sort by most total work, ...
|
// First sort by most total work, ...
|
||||||
if (pa->chainPower > pb->chainPower) return false;
|
|
||||||
if (pa->chainPower < pb->chainPower) return true;
|
if (ASSETCHAINS_LWMAPOS) {
|
||||||
|
|
||||||
|
/* Decker:
|
||||||
|
|
||||||
|
seems we had CChainPower classes compare here from Verus, it's slow, bcz of hard
|
||||||
|
arith_uint256 math in bool operator<(const CChainPower &p1, const CChainPower &p2),
|
||||||
|
this slows down setBlockIndexCandidates.insert operations in LoadBlockIndexDB(),
|
||||||
|
so, for faster block index db loading we will use check from Verus only for LWMAPOS
|
||||||
|
enabled chains.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (pa->chainPower > pb->chainPower) return false;
|
||||||
|
if (pa->chainPower < pb->chainPower) return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pa->chainPower.chainWork > pb->chainPower.chainWork) return false;
|
||||||
|
if (pa->chainPower.chainWork < pb->chainPower.chainWork) return true;
|
||||||
|
}
|
||||||
|
|
||||||
// ... then by earliest time received, ...
|
// ... then by earliest time received, ...
|
||||||
if (pa->nSequenceId < pb->nSequenceId) return false;
|
if (pa->nSequenceId < pb->nSequenceId) return false;
|
||||||
@@ -173,8 +191,10 @@ namespace {
|
|||||||
* as good as our current tip or better. Entries may be failed, though, and pruning nodes may be
|
* as good as our current tip or better. Entries may be failed, though, and pruning nodes may be
|
||||||
* missing the data for the block.
|
* missing the data for the block.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
//set<CBlockIndex*, CBlockIndexWorkComparator, std::allocator<CBlockIndex*>> setBlockIndexCandidates;
|
||||||
set<CBlockIndex*, CBlockIndexWorkComparator> setBlockIndexCandidates;
|
set<CBlockIndex*, CBlockIndexWorkComparator> setBlockIndexCandidates;
|
||||||
|
|
||||||
/** Number of nodes with fSyncStarted. */
|
/** Number of nodes with fSyncStarted. */
|
||||||
int nSyncStarted = 0;
|
int nSyncStarted = 0;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user