From 4f46bd19d0b123327596785dc3975d5e4008d761 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com>
Date: Wed, 19 Oct 2016 14:55:13 +0300
Subject: cmd, core/state: allow configurable trie cache generations

---
 cmd/geth/chaincmd.go |  2 +-
 cmd/geth/main.go     |  3 ++-
 cmd/geth/usage.go    |  6 ++++++
 cmd/utils/flags.go   | 20 +++++++++++++++-----
 4 files changed, 24 insertions(+), 7 deletions(-)

(limited to 'cmd')

diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go
index d7cdf1064..c41375c4d 100644
--- a/cmd/geth/chaincmd.go
+++ b/cmd/geth/chaincmd.go
@@ -99,6 +99,7 @@ func importChain(ctx *cli.Context) error {
 			utils.Fatalf("Failed to read database stats: %v", err)
 		}
 		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
 		start = time.Now()
@@ -113,7 +114,6 @@ func importChain(ctx *cli.Context) error {
 			utils.Fatalf("Failed to read database stats: %v", err)
 		}
 		fmt.Println(stats)
-		fmt.Println("Trie cache misses:", trie.CacheMisses())
 	}
 	return nil
 }
diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index 65311ca41..ccc42d3cf 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -134,8 +134,9 @@ participating.
 		utils.KeyStoreDirFlag,
 		utils.OlympicFlag,
 		utils.FastSyncFlag,
-		utils.CacheFlag,
 		utils.LightKDFFlag,
+		utils.CacheFlag,
+		utils.TrieCacheGenFlag,
 		utils.JSpathFlag,
 		utils.ListenPortFlag,
 		utils.MaxPeersFlag,
diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go
index dc1788aad..2cb6e77e8 100644
--- a/cmd/geth/usage.go
+++ b/cmd/geth/usage.go
@@ -73,7 +73,13 @@ var AppHelpFlagGroups = []flagGroup{
 			utils.IdentityFlag,
 			utils.FastSyncFlag,
 			utils.LightKDFFlag,
+		},
+	},
+	{
+		Name: "PERFORMANCE TUNING",
+		Flags: []cli.Flag{
 			utils.CacheFlag,
+			utils.TrieCacheGenFlag,
 		},
 	},
 	{
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index 0c5206a17..1859f735d 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -141,11 +141,6 @@ var (
 		Usage: "Document Root for HTTPClient file scheme",
 		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{
 		Name:  "fast",
 		Usage: "Enable fast syncing through state downloads",
@@ -154,6 +149,17 @@ var (
 		Name:  "lightkdf",
 		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
 	SupportDAOFork = cli.BoolFlag{
 		Name:  "support-dao-fork",
@@ -721,6 +727,10 @@ func RegisterEthService(ctx *cli.Context, stack *node.Node, extra []byte) {
 		}
 		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) {
 		return eth.New(ctx, ethConf)
-- 
cgit v1.2.3