From 2bb5ec1e41ed8c1e56e31639fec87710e81d3977 Mon Sep 17 00:00:00 2001 From: Péter Szilágyi <peterke@gmail.com> Date: Tue, 18 Oct 2016 14:44:41 +0300 Subject: cmd/geth, trie: track and report trie cache misses --- trie/trie.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'trie') 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{ -- cgit