forked from cerc-io/plugeth
Merge pull request #3173 from karalabe/parametrized-trie-cache-get
cmd, core/state: allow configurable trie cache generations
This commit is contained in:
commit
8048f4d4f6
@ -99,6 +99,7 @@ func importChain(ctx *cli.Context) error {
|
|||||||
utils.Fatalf("Failed to read database stats: %v", err)
|
utils.Fatalf("Failed to read database stats: %v", err)
|
||||||
}
|
}
|
||||||
fmt.Println(stats)
|
fmt.Println(stats)
|
||||||
|
fmt.Printf("Trie cache misses: %d\n\n", trie.CacheMisses())
|
||||||
|
|
||||||
// Compact the entire database to more accurately measure disk io and print the stats
|
// Compact the entire database to more accurately measure disk io and print the stats
|
||||||
start = time.Now()
|
start = time.Now()
|
||||||
@ -113,7 +114,6 @@ func importChain(ctx *cli.Context) error {
|
|||||||
utils.Fatalf("Failed to read database stats: %v", err)
|
utils.Fatalf("Failed to read database stats: %v", err)
|
||||||
}
|
}
|
||||||
fmt.Println(stats)
|
fmt.Println(stats)
|
||||||
fmt.Println("Trie cache misses:", trie.CacheMisses())
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -134,8 +134,9 @@ participating.
|
|||||||
utils.KeyStoreDirFlag,
|
utils.KeyStoreDirFlag,
|
||||||
utils.OlympicFlag,
|
utils.OlympicFlag,
|
||||||
utils.FastSyncFlag,
|
utils.FastSyncFlag,
|
||||||
utils.CacheFlag,
|
|
||||||
utils.LightKDFFlag,
|
utils.LightKDFFlag,
|
||||||
|
utils.CacheFlag,
|
||||||
|
utils.TrieCacheGenFlag,
|
||||||
utils.JSpathFlag,
|
utils.JSpathFlag,
|
||||||
utils.ListenPortFlag,
|
utils.ListenPortFlag,
|
||||||
utils.MaxPeersFlag,
|
utils.MaxPeersFlag,
|
||||||
|
@ -73,7 +73,13 @@ var AppHelpFlagGroups = []flagGroup{
|
|||||||
utils.IdentityFlag,
|
utils.IdentityFlag,
|
||||||
utils.FastSyncFlag,
|
utils.FastSyncFlag,
|
||||||
utils.LightKDFFlag,
|
utils.LightKDFFlag,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "PERFORMANCE TUNING",
|
||||||
|
Flags: []cli.Flag{
|
||||||
utils.CacheFlag,
|
utils.CacheFlag,
|
||||||
|
utils.TrieCacheGenFlag,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -141,11 +141,6 @@ var (
|
|||||||
Usage: "Document Root for HTTPClient file scheme",
|
Usage: "Document Root for HTTPClient file scheme",
|
||||||
Value: DirectoryString{homeDir()},
|
Value: DirectoryString{homeDir()},
|
||||||
}
|
}
|
||||||
CacheFlag = cli.IntFlag{
|
|
||||||
Name: "cache",
|
|
||||||
Usage: "Megabytes of memory allocated to internal caching (min 16MB / database forced)",
|
|
||||||
Value: 128,
|
|
||||||
}
|
|
||||||
FastSyncFlag = cli.BoolFlag{
|
FastSyncFlag = cli.BoolFlag{
|
||||||
Name: "fast",
|
Name: "fast",
|
||||||
Usage: "Enable fast syncing through state downloads",
|
Usage: "Enable fast syncing through state downloads",
|
||||||
@ -154,6 +149,17 @@ var (
|
|||||||
Name: "lightkdf",
|
Name: "lightkdf",
|
||||||
Usage: "Reduce key-derivation RAM & CPU usage at some expense of KDF strength",
|
Usage: "Reduce key-derivation RAM & CPU usage at some expense of KDF strength",
|
||||||
}
|
}
|
||||||
|
// Performance tuning settings
|
||||||
|
CacheFlag = cli.IntFlag{
|
||||||
|
Name: "cache",
|
||||||
|
Usage: "Megabytes of memory allocated to internal caching (min 16MB / database forced)",
|
||||||
|
Value: 128,
|
||||||
|
}
|
||||||
|
TrieCacheGenFlag = cli.IntFlag{
|
||||||
|
Name: "trie-cache-gens",
|
||||||
|
Usage: "Number of trie node generations to keep in memory",
|
||||||
|
Value: int(state.MaxTrieCacheGen),
|
||||||
|
}
|
||||||
// Fork settings
|
// Fork settings
|
||||||
SupportDAOFork = cli.BoolFlag{
|
SupportDAOFork = cli.BoolFlag{
|
||||||
Name: "support-dao-fork",
|
Name: "support-dao-fork",
|
||||||
@ -721,6 +727,10 @@ func RegisterEthService(ctx *cli.Context, stack *node.Node, extra []byte) {
|
|||||||
}
|
}
|
||||||
ethConf.PowTest = true
|
ethConf.PowTest = true
|
||||||
}
|
}
|
||||||
|
// Override any global options pertaining to the Ethereum protocol
|
||||||
|
if gen := ctx.GlobalInt(TrieCacheGenFlag.Name); gen > 0 {
|
||||||
|
state.MaxTrieCacheGen = uint16(gen)
|
||||||
|
}
|
||||||
|
|
||||||
if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) {
|
if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) {
|
||||||
return eth.New(ctx, ethConf)
|
return eth.New(ctx, ethConf)
|
||||||
|
@ -38,14 +38,14 @@ import (
|
|||||||
// created.
|
// created.
|
||||||
var StartingNonce uint64
|
var StartingNonce uint64
|
||||||
|
|
||||||
|
// Trie cache generation limit after which to evic trie nodes from memory.
|
||||||
|
var MaxTrieCacheGen = uint16(120)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// Number of past tries to keep. This value is chosen such that
|
// Number of past tries to keep. This value is chosen such that
|
||||||
// reasonable chain reorg depths will hit an existing trie.
|
// reasonable chain reorg depths will hit an existing trie.
|
||||||
maxPastTries = 12
|
maxPastTries = 12
|
||||||
|
|
||||||
// Trie cache generation limit.
|
|
||||||
maxTrieCacheGen = 120
|
|
||||||
|
|
||||||
// Number of codehash->size associations to keep.
|
// Number of codehash->size associations to keep.
|
||||||
codeSizeCacheSize = 100000
|
codeSizeCacheSize = 100000
|
||||||
)
|
)
|
||||||
@ -89,7 +89,7 @@ type StateDB struct {
|
|||||||
|
|
||||||
// Create a new state from a given trie
|
// Create a new state from a given trie
|
||||||
func New(root common.Hash, db ethdb.Database) (*StateDB, error) {
|
func New(root common.Hash, db ethdb.Database) (*StateDB, error) {
|
||||||
tr, err := trie.NewSecure(root, db, maxTrieCacheGen)
|
tr, err := trie.NewSecure(root, db, MaxTrieCacheGen)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -158,7 +158,7 @@ func (self *StateDB) openTrie(root common.Hash) (*trie.SecureTrie, error) {
|
|||||||
return &tr, nil
|
return &tr, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return trie.NewSecure(root, self.db, maxTrieCacheGen)
|
return trie.NewSecure(root, self.db, MaxTrieCacheGen)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *StateDB) pushTrie(t *trie.SecureTrie) {
|
func (self *StateDB) pushTrie(t *trie.SecureTrie) {
|
||||||
|
Loading…
Reference in New Issue
Block a user