diff options
author | Martin Holst Swende <martin@swende.se> | 2018-11-28 16:29:05 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2018-11-28 16:29:05 +0800 |
commit | bfed28a42187c7bf7b8f50401fe239278a4ed530 (patch) | |
tree | d1814c36a3167adc4d7872aa1e57e203bab7731d | |
parent | edc39aaedf526bfb7757a445c1f9dd42f45dc8d4 (diff) | |
download | dexon-bfed28a42187c7bf7b8f50401fe239278a4ed530.tar.gz dexon-bfed28a42187c7bf7b8f50401fe239278a4ed530.tar.zst dexon-bfed28a42187c7bf7b8f50401fe239278a4ed530.zip |
core: more detailed metrics for block processing (#18119)
-rw-r--r-- | core/blockchain.go | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/core/blockchain.go b/core/blockchain.go index bcd53d498..a672c0ab6 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -47,7 +47,10 @@ import ( ) var ( - blockInsertTimer = metrics.NewRegisteredTimer("chain/inserts", nil) + blockInsertTimer = metrics.NewRegisteredTimer("chain/inserts", nil) + blockValidationTimer = metrics.NewRegisteredTimer("chain/validation", nil) + blockExecutionTimer = metrics.NewRegisteredTimer("chain/execution", nil) + blockWriteTimer = metrics.NewRegisteredTimer("chain/write", nil) ErrNoGenesis = errors.New("Genesis not found in chain") ) @@ -1188,7 +1191,9 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] return it.index, events, coalescedLogs, err } // Process block using the parent state as reference point. + t0 := time.Now() receipts, logs, usedGas, err := bc.processor.Process(block, state, bc.vmConfig) + t1 := time.Now() if err != nil { bc.reportBlock(block, receipts, err) return it.index, events, coalescedLogs, err @@ -1198,13 +1203,19 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] bc.reportBlock(block, receipts, err) return it.index, events, coalescedLogs, err } + t2 := time.Now() proctime := time.Since(start) // Write the block to the chain and get the status. status, err := bc.WriteBlockWithState(block, receipts, state) + t3 := time.Now() if err != nil { return it.index, events, coalescedLogs, err } + blockInsertTimer.UpdateSince(start) + blockExecutionTimer.Update(t1.Sub(t0)) + blockValidationTimer.Update(t2.Sub(t1)) + blockWriteTimer.Update(t3.Sub(t2)) switch status { case CanonStatTy: log.Debug("Inserted new block", "number", block.Number(), "hash", block.Hash(), |