forked from cerc-io/plugeth
Merge pull request #2310 from karalabe/ethash-future-cache
Godeps: pull in ethash future cache generator
This commit is contained in:
commit
31b4ff8cc1
4
Godeps/Godeps.json
generated
4
Godeps/Godeps.json
generated
@ -20,8 +20,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/ethereum/ethash",
|
"ImportPath": "github.com/ethereum/ethash",
|
||||||
"Comment": "v23.1-240-ga524c9f",
|
"Comment": "v23.1-242-gbc9ba4d",
|
||||||
"Rev": "a524c9f7d55cb8925567dc201b44ba555862056d"
|
"Rev": "bc9ba4d6a83a0fe308fefd8c6001b8ed1607137f"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/fatih/color",
|
"ImportPath": "github.com/fatih/color",
|
||||||
|
30
Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go
generated
vendored
30
Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go
generated
vendored
@ -108,10 +108,13 @@ func freeCache(cache *cache) {
|
|||||||
// Light implements the Verify half of the proof of work. It uses a few small
|
// 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.
|
// in-memory caches to verify the nonces found by Full.
|
||||||
type Light struct {
|
type Light struct {
|
||||||
test bool // if set use a smaller cache size
|
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
|
mu sync.Mutex // Protects the per-epoch map of verification caches
|
||||||
NumCaches int // Maximum number of DAGs to cache before eviction (only init, don't modify)
|
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.
|
// Verify checks whether the block's nonce is valid.
|
||||||
@ -192,12 +195,25 @@ func (l *Light) getCache(blockNum uint64) *cache {
|
|||||||
evict = 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)
|
delete(l.caches, evict.epoch)
|
||||||
}
|
}
|
||||||
// Create and return a new DAG for the epoch
|
// If we have the new DAG pre-generated, use that, otherwise create a new one
|
||||||
c = &cache{epoch: epoch, test: l.test}
|
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
|
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()
|
c.used = time.Now()
|
||||||
l.mu.Unlock()
|
l.mu.Unlock()
|
||||||
|
Loading…
Reference in New Issue
Block a user