block_connected: don't serialize block hash twice
In the validation:block_connected tracepoint, we call block->GetHash(), which ends up calling CBlockHeader::GetHash(), executing around 8000 serialization instructions. We don't need to do this extra work, because block->GetHash() is already called further up in the function. Let's save that value as a local variable and re-use it in our tracepoint so there is no unnecessary tracepoint overhead. Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
1 parent
d05be150ca
commit
80e1c55687
1 file changed
+6
-3
+6
-3
@@ -1866,7 +1866,10 @@ bool CChainState::ConnectBlock(const CBlock& block, BlockValidationState& state,
|
|||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
assert(pindex);
|
assert(pindex);
|
||||||
assert(*pindex->phashBlock == block.GetHash());
|
|
||||||
|
uint256 block_hash{block.GetHash()};
|
||||||
|
assert(*pindex->phashBlock == block_hash);
|
||||||
|
|
||||||
int64_t nTimeStart = GetTimeMicros();
|
int64_t nTimeStart = GetTimeMicros();
|
||||||
|
|
||||||
// Check it again in case a previous version let a bad block in
|
// Check it again in case a previous version let a bad block in
|
||||||
@@ -1900,7 +1903,7 @@ bool CChainState::ConnectBlock(const CBlock& block, BlockValidationState& state,
|
|||||||
|
|
||||||
// Special case for the genesis block, skipping connection of its transactions
|
// Special case for the genesis block, skipping connection of its transactions
|
||||||
// (its coinbase is unspendable)
|
// (its coinbase is unspendable)
|
||||||
if (block.GetHash() == m_params.GetConsensus().hashGenesisBlock) {
|
if (block_hash == m_params.GetConsensus().hashGenesisBlock) {
|
||||||
if (!fJustCheck)
|
if (!fJustCheck)
|
||||||
view.SetBestBlock(pindex->GetBlockHash());
|
view.SetBestBlock(pindex->GetBlockHash());
|
||||||
return true;
|
return true;
|
||||||
@@ -2158,7 +2161,7 @@ bool CChainState::ConnectBlock(const CBlock& block, BlockValidationState& state,
|
|||||||
LogPrint(BCLog::BENCH, " - Index writing: %.2fms [%.2fs (%.2fms/blk)]\n", MILLI * (nTime5 - nTime4), nTimeIndex * MICRO, nTimeIndex * MILLI / nBlocksTotal);
|
LogPrint(BCLog::BENCH, " - Index writing: %.2fms [%.2fs (%.2fms/blk)]\n", MILLI * (nTime5 - nTime4), nTimeIndex * MICRO, nTimeIndex * MILLI / nBlocksTotal);
|
||||||
|
|
||||||
TRACE6(validation, block_connected,
|
TRACE6(validation, block_connected,
|
||||||
block.GetHash().data(),
|
block_hash.data(),
|
||||||
pindex->nHeight,
|
pindex->nHeight,
|
||||||
block.vtx.size(),
|
block.vtx.size(),
|
||||||
nInputs,
|
nInputs,
|
||||||
|
|||||||
Reference in new issue
Block a user