diff --git a/core/state/snapshot/difflayer.go b/core/state/snapshot/difflayer.go index eb9fa2ed1..f07eb776d 100644 --- a/core/state/snapshot/difflayer.go +++ b/core/state/snapshot/difflayer.go @@ -286,6 +286,13 @@ func (dl *diffLayer) Stale() bool { // Account directly retrieves the account associated with a particular hash in // the snapshot slim data format. func (dl *diffLayer) Account(hash common.Hash) (*types.SlimAccount, error) { + defer func(start time.Time) { + snapGetTimer.UpdateSince(start) + snapGetQPS.Mark(1) + snapGetAccountTimer.UpdateSince(start) + snapGetAccountQPS.Mark(1) + }(time.Now()) + data, err := dl.AccountRLP(hash) if err != nil { return nil, err @@ -394,6 +401,13 @@ func (dl *diffLayer) accountRLP(hash common.Hash, depth int) ([]byte, error) { // // Note the returned slot is not a copy, please don't modify it. func (dl *diffLayer) Storage(accountHash, storageHash common.Hash) ([]byte, error) { + defer func(start time.Time) { + snapGetTimer.UpdateSince(start) + snapGetQPS.Mark(1) + snapGetStorageTimer.UpdateSince(start) + snapGetStorageQPS.Mark(1) + }(time.Now()) + // Check the bloom filter first whether there's even a point in reaching into // all the maps in all the layers below dl.lock.RLock() diff --git a/core/state/snapshot/metrics.go b/core/state/snapshot/metrics.go index b2e884588..9a5c67b34 100644 --- a/core/state/snapshot/metrics.go +++ b/core/state/snapshot/metrics.go @@ -50,4 +50,12 @@ var ( snapStorageWriteCounter = metrics.NewRegisteredCounter("state/snapshot/generation/duration/storage/write", nil) // snapStorageCleanCounter measures time spent on deleting storages snapStorageCleanCounter = metrics.NewRegisteredCounter("state/snapshot/generation/duration/storage/clean", nil) + + snapGetTimer = metrics.NewRegisteredTimer("snap/get/time", nil) + snapGetQPS = metrics.NewRegisteredMeter("snap/get/qps", nil) + + snapGetAccountTimer = metrics.NewRegisteredTimer("snap/account/get/time", nil) + snapGetAccountQPS = metrics.NewRegisteredMeter("snap/account/get/qps", nil) + snapGetStorageTimer = metrics.NewRegisteredTimer("snap/storage/get/time", nil) + snapGetStorageQPS = metrics.NewRegisteredMeter("snap/storage/get/qps", nil) )