diff options
author | Péter Szilágyi <peterke@gmail.com> | 2016-03-08 22:55:22 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2016-03-08 22:55:22 +0800 |
commit | 31b4ff8cc12cce8fb94538c2f6d5f6da883b10d1 (patch) | |
tree | 8b20e1e0c872aad9af99f5ad74d645ae7a6f2102 | |
parent | 848e50d6fb94435891cf6e19f29e30d622ddfe9b (diff) | |
parent | 119b7243627c1370588f8057217f25a56aa00584 (diff) | |
download | go-tangerine-31b4ff8cc12cce8fb94538c2f6d5f6da883b10d1.tar go-tangerine-31b4ff8cc12cce8fb94538c2f6d5f6da883b10d1.tar.gz go-tangerine-31b4ff8cc12cce8fb94538c2f6d5f6da883b10d1.tar.bz2 go-tangerine-31b4ff8cc12cce8fb94538c2f6d5f6da883b10d1.tar.lz go-tangerine-31b4ff8cc12cce8fb94538c2f6d5f6da883b10d1.tar.xz go-tangerine-31b4ff8cc12cce8fb94538c2f6d5f6da883b10d1.tar.zst go-tangerine-31b4ff8cc12cce8fb94538c2f6d5f6da883b10d1.zip |
Merge pull request #2310 from karalabe/ethash-future-cache
Godeps: pull in ethash future cache generator
-rw-r--r-- | Godeps/Godeps.json | 4 | ||||
-rw-r--r-- | Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go | 30 |
2 files changed, 25 insertions, 9 deletions
diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 6010309a2..7b6ba5c3c 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -20,8 +20,8 @@ }, { "ImportPath": "github.com/ethereum/ethash", - "Comment": "v23.1-240-ga524c9f", - "Rev": "a524c9f7d55cb8925567dc201b44ba555862056d" + "Comment": "v23.1-242-gbc9ba4d", + "Rev": "bc9ba4d6a83a0fe308fefd8c6001b8ed1607137f" }, { "ImportPath": "github.com/fatih/color", diff --git a/Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go b/Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go index ad59dd5e3..60121bb3b 100644 --- a/Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go +++ b/Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go @@ -108,10 +108,13 @@ func freeCache(cache *cache) { // Light implements the Verify half of the proof of work. It uses a few small // in-memory caches to verify the nonces found by Full. type Light struct { - test bool // if set use a smaller cache size - mu sync.Mutex // protects the per-epoch map of DAGs - caches map[uint64]*cache // currently cached verification DAGs - NumCaches int // Maximum number of DAGs to cache before eviction (only init, don't modify) + test bool // If set, use a smaller cache size + + mu sync.Mutex // Protects the per-epoch map of verification caches + caches map[uint64]*cache // Currently maintained verification caches + future *cache // Pre-generated cache for the estimated future DAG + + NumCaches int // Maximum number of caches to keep before eviction (only init, don't modify) } // Verify checks whether the block's nonce is valid. @@ -192,12 +195,25 @@ func (l *Light) getCache(blockNum uint64) *cache { evict = cache } } - glog.V(logger.Info).Infof("Evicting DAG for epoch %d in favour of epoch %d", evict.epoch, epoch) + glog.V(logger.Debug).Infof("Evicting DAG for epoch %d in favour of epoch %d", evict.epoch, epoch) delete(l.caches, evict.epoch) } - // Create and return a new DAG for the epoch - c = &cache{epoch: epoch, test: l.test} + // If we have the new DAG pre-generated, use that, otherwise create a new one + if l.future != nil && l.future.epoch == epoch { + glog.V(logger.Debug).Infof("Using pre-generated DAG for epoch %d", epoch) + c, l.future = l.future, nil + } else { + glog.V(logger.Debug).Infof("No pre-generated DAG available, creating new for epoch %d", epoch) + c = &cache{epoch: epoch, test: l.test} + } l.caches[epoch] = c + + // If we just used up the future cache, or need a refresh, regenerate + if l.future == nil || l.future.epoch <= epoch { + glog.V(logger.Debug).Infof("Pre-generating DAG for epoch %d", epoch+1) + l.future = &cache{epoch: epoch + 1, test: l.test} + go l.future.generate() + } } c.used = time.Now() l.mu.Unlock() |