aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2019-04-01 16:52:11 +0800
committerPéter Szilágyi <peterke@gmail.com>2019-04-01 16:52:11 +0800
commited34a5e08a475fdf1b3116b1f17879411bfe411d (patch)
tree0d607cefe0a735400cb5cadf2949cd588f3b39a7 /core
parentbb9631c399392577b1d69a1e8f88a2ccbd05e4e1 (diff)
downloadgo-tangerine-ed34a5e08a475fdf1b3116b1f17879411bfe411d.tar
go-tangerine-ed34a5e08a475fdf1b3116b1f17879411bfe411d.tar.gz
go-tangerine-ed34a5e08a475fdf1b3116b1f17879411bfe411d.tar.bz2
go-tangerine-ed34a5e08a475fdf1b3116b1f17879411bfe411d.tar.lz
go-tangerine-ed34a5e08a475fdf1b3116b1f17879411bfe411d.tar.xz
go-tangerine-ed34a5e08a475fdf1b3116b1f17879411bfe411d.tar.zst
go-tangerine-ed34a5e08a475fdf1b3116b1f17879411bfe411d.zip
cmd, core, eth: support disabling the concurrent state prefetcher
Diffstat (limited to 'core')
-rw-r--r--core/blockchain.go33
1 files changed, 18 insertions, 15 deletions
diff --git a/core/blockchain.go b/core/blockchain.go
index a547f6bc3..1e0b5718b 100644
--- a/core/blockchain.go
+++ b/core/blockchain.go
@@ -90,10 +90,11 @@ const (
// CacheConfig contains the configuration values for the trie caching/pruning
// that's resident in a blockchain.
type CacheConfig struct {
- Disabled bool // Whether to disable trie write caching (archive node)
- TrieCleanLimit int // Memory allowance (MB) to use for caching trie nodes in memory
- TrieDirtyLimit int // Memory limit (MB) at which to start flushing dirty trie nodes to disk
- TrieTimeLimit time.Duration // Time limit after which to flush the current in-memory trie to disk
+ TrieCleanLimit int // Memory allowance (MB) to use for caching trie nodes in memory
+ TrieCleanNoPrefetch bool // Whether to disable heuristic state prefetching for followup blocks
+ TrieDirtyLimit int // Memory limit (MB) at which to start flushing dirty trie nodes to disk
+ TrieDirtyDisabled bool // Whether to disable trie write caching and GC altogether (archive node)
+ TrieTimeLimit time.Duration // Time limit after which to flush the current in-memory trie to disk
}
// BlockChain represents the canonical chain given a database with a genesis
@@ -708,7 +709,7 @@ func (bc *BlockChain) Stop() {
// - HEAD: So we don't need to reprocess any blocks in the general case
// - HEAD-1: So we don't do large reorgs if our HEAD becomes an uncle
// - HEAD-127: So we have a hard limit on the number of blocks reexecuted
- if !bc.cacheConfig.Disabled {
+ if !bc.cacheConfig.TrieDirtyDisabled {
triedb := bc.stateCache.TrieDB()
for _, offset := range []uint64{0, 1, triesInMemory - 1} {
@@ -968,7 +969,7 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types.
triedb := bc.stateCache.TrieDB()
// If we're running an archive node, always flush
- if bc.cacheConfig.Disabled {
+ if bc.cacheConfig.TrieDirtyDisabled {
if err := triedb.Commit(root, false); err != nil {
return NonStatTy, err
}
@@ -1232,16 +1233,18 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, []
// transactions and probabilistically some of the account/storage trie nodes.
var followupInterrupt uint32
- if followup, err := it.peek(); followup != nil && err == nil {
- go func(start time.Time) {
- throwaway, _ := state.New(parent.Root, bc.stateCache)
- bc.prefetcher.Prefetch(followup, throwaway, bc.vmConfig, &followupInterrupt)
+ if !bc.cacheConfig.TrieCleanNoPrefetch {
+ if followup, err := it.peek(); followup != nil && err == nil {
+ go func(start time.Time) {
+ throwaway, _ := state.New(parent.Root, bc.stateCache)
+ bc.prefetcher.Prefetch(followup, throwaway, bc.vmConfig, &followupInterrupt)
- blockPrefetchExecuteTimer.Update(time.Since(start))
- if atomic.LoadUint32(&followupInterrupt) == 1 {
- blockPrefetchInterruptMeter.Mark(1)
- }
- }(time.Now())
+ blockPrefetchExecuteTimer.Update(time.Since(start))
+ if atomic.LoadUint32(&followupInterrupt) == 1 {
+ blockPrefetchInterruptMeter.Mark(1)
+ }
+ }(time.Now())
+ }
}
// Process block using the parent state as reference point
substart := time.Now()