diff options
Diffstat (limited to 'trie')
-rw-r--r-- | trie/trie.go | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/trie/trie.go b/trie/trie.go index 65005bae8..5a4b6185d 100644 --- a/trie/trie.go +++ b/trie/trie.go @@ -20,6 +20,7 @@ package trie import ( "bytes" "fmt" + "sync/atomic" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto/sha3" @@ -34,6 +35,17 @@ var ( emptyState common.Hash ) +// cacheMisses maintains the number of times a trie node was loaded from disk. +// Always use atomic operations when accessing this global variable. +var cacheMisses uint64 + +// CacheMisses retrieves a global counter measuring the number of cache misses +// the trie did since process startup. This isn't useful for anything apart from +// trie debugging purposes. +func CacheMisses() uint64 { + return atomic.LoadUint64(&cacheMisses) +} + func init() { sha3.NewKeccak256().Sum(emptyState[:0]) } @@ -419,6 +431,8 @@ func (t *Trie) resolve(n node, prefix, suffix []byte) (node, error) { } func (t *Trie) resolveHash(n hashNode, prefix, suffix []byte) (node, error) { + atomic.AddUint64(&cacheMisses, 1) + enc, err := t.db.Get(n) if err != nil || enc == nil { return nil, &MissingNodeError{ |