Skip to content

Commit

Permalink
Merge pull request bnb-chain#11 from flywukong/IO-metrics
Browse files Browse the repository at this point in the history
add signature metrics in preload
  • Loading branch information
forcodedancing authored Mar 4, 2022
2 parents b12055e + b1b38d0 commit 01e9678
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 11 deletions.
13 changes: 8 additions & 5 deletions core/state/state_object.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,14 @@ import (
)

var (
emptyCodeHash = crypto.Keccak256(nil)
syncPreloadCost = metrics.NewRegisteredTimer("state/preload/sync/delay", nil)
minerPreloadCost = metrics.NewRegisteredTimer("state/preload/miner/delay", nil)
syncPreloadCounter = metrics.NewRegisteredCounter("state/preload/sync/counter", nil)
minerPreloadCounter = metrics.NewRegisteredCounter("state/preload/miner/counter", nil)
emptyCodeHash = crypto.Keccak256(nil)
syncPreloadCost = metrics.NewRegisteredTimer("state/preload/sync/delay", nil)
minerPreloadCost = metrics.NewRegisteredTimer("state/preload/miner/delay", nil)
syncPreloadCounter = metrics.NewRegisteredCounter("state/preload/sync/counter", nil)
minerPreloadCounter = metrics.NewRegisteredCounter("state/preload/miner/counter", nil)
syncSignatureCounter = metrics.NewRegisteredCounter("state/sign/sync/counter", nil)
minerSignatureCounter = metrics.NewRegisteredCounter("state/sign/miner/counter", nil)

syncOverheadCost = metrics.NewRegisteredTimer("state/overhead/sync/delay", nil)
minerOverheadCost = metrics.NewRegisteredTimer("state/overhead/miner/delay", nil)
syncOverheadCounter = metrics.NewRegisteredCounter("state/overhead/sync/counter", nil)
Expand Down
5 changes: 4 additions & 1 deletion core/state/statedb.go
Original file line number Diff line number Diff line change
Expand Up @@ -693,6 +693,7 @@ func (s *StateDB) getStateObject(addr common.Address) *StateObject {
func (s *StateDB) TryPreload(block *types.Block, signer types.Signer) {
accounts := make(map[common.Address]bool, block.Transactions().Len())
accountsSlice := make([]common.Address, 0, block.Transactions().Len())
startSign := time.Now()
for _, tx := range block.Transactions() {
from, err := types.Sender(signer, tx)
if err != nil {
Expand All @@ -703,7 +704,7 @@ func (s *StateDB) TryPreload(block *types.Block, signer types.Signer) {
accounts[*tx.To()] = true
}
}

signOverhead := time.Since(startSign)
var overheadCost time.Duration
defer func() {
goid := cachemetrics.Goid()
Expand All @@ -713,11 +714,13 @@ func (s *StateDB) TryPreload(block *types.Block, signer types.Signer) {
if isSyncMainProcess {
syncPreloadCost.Update(overheadCost)
syncPreloadCounter.Inc(overheadCost.Nanoseconds())
syncSignatureCounter.Inc(signOverhead.Nanoseconds())
}
// record metrics of mining main process
if isMinerMainProcess {
minerPreloadCost.Update(overheadCost)
minerPreloadCounter.Inc(overheadCost.Nanoseconds())
minerSignatureCounter.Inc(signOverhead.Nanoseconds())
}
}()

Expand Down
8 changes: 3 additions & 5 deletions core/state_prefetcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ func (p *statePrefetcher) Prefetch(block *types.Block, statedb *state.StateDB, c
header = block.Header()
signer = types.MakeSigner(p.config, header.Number)
)
start := time.Now()
transactions := block.Transactions()
sortTransactions := make([][]*types.Transaction, prefetchThread)
for i := 0; i < prefetchThread; i++ {
Expand All @@ -71,7 +72,6 @@ func (p *statePrefetcher) Prefetch(block *types.Block, statedb *state.StateDB, c
threadIdx := idx % prefetchThread
sortTransactions[threadIdx] = append(sortTransactions[threadIdx], transactions[idx])
}
start := time.Now()
// No need to execute the first batch, since the main processor will do it.
for i := 0; i < prefetchThread; i++ {
go func(idx int) {
Expand All @@ -83,8 +83,6 @@ func (p *statePrefetcher) Prefetch(block *types.Block, statedb *state.StateDB, c
for i, tx := range sortTransactions[idx] {
// If block precaching was interrupted, abort
if interrupt != nil && atomic.LoadUint32(interrupt) == 1 {
statePrefetchTimer.Update(time.Since(start))
statePrefetchCounter.Inc(int64(time.Since(start)))
return
}
// Convert the transaction into an executable message and pre-cache its sender
Expand All @@ -95,10 +93,10 @@ func (p *statePrefetcher) Prefetch(block *types.Block, statedb *state.StateDB, c
newStatedb.Prepare(tx.Hash(), header.Hash(), i)
precacheTransaction(msg, p.config, gaspool, newStatedb, header, evm)
}
statePrefetchTimer.Update(time.Since(start))
statePrefetchCounter.Inc(int64(time.Since(start)))
}(i)
}
statePrefetchTimer.Update(time.Since(start))
statePrefetchCounter.Inc(int64(time.Since(start)))
}

// precacheTransaction attempts to apply a transaction to the given state database
Expand Down

0 comments on commit 01e9678

Please sign in to comment.