aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/utils/flags.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-03-09 16:43:07 +0800
committerPéter Szilágyi <peterke@gmail.com>2016-03-09 16:43:07 +0800
commitedd7aa054c0f9860c799748439255722e51feccc (patch)
treedd7dd52d31628375ead8a06e681441102faf9037 /cmd/utils/flags.go
parent05c86c2c9fa14ea03fdc5d0cd77cdecc34e4f164 (diff)
parente90958cd29a228b051faeaa25d66e053cf9d2228 (diff)
downloadgo-tangerine-edd7aa054c0f9860c799748439255722e51feccc.tar.gz
go-tangerine-edd7aa054c0f9860c799748439255722e51feccc.tar.zst
go-tangerine-edd7aa054c0f9860c799748439255722e51feccc.zip
Merge pull request #2228 from karalabe/allocate-cache-to-chaindata
cmd, eth, ethdb, node: prioritise chaindata for resources, bump cache
Diffstat (limited to 'cmd/utils/flags.go')
-rw-r--r--cmd/utils/flags.go22
1 files changed, 20 insertions, 2 deletions
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index 3efb65e42..69fb0b9db 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -143,7 +143,7 @@ var (
CacheFlag = cli.IntFlag{
Name: "cache",
Usage: "Megabytes of memory allocated to internal caching (min 16MB / database forced)",
- Value: 0,
+ Value: 128,
}
BlockchainVersionFlag = cli.IntFlag{
Name: "blockchainversion",
@@ -527,6 +527,22 @@ func MakeGenesisBlock(ctx *cli.Context) string {
return string(data)
}
+// MakeDatabaseHandles raises out the number of allowed file handles per process
+// for Geth and returns half of the allowance to assign to the database.
+func MakeDatabaseHandles() int {
+ if err := raiseFdLimit(2048); err != nil {
+ Fatalf("Failed to raise file descriptor allowance: %v", err)
+ }
+ limit, err := getFdLimit()
+ if err != nil {
+ Fatalf("Failed to retrieve file descriptor allowance: %v", err)
+ }
+ if limit > 2048 { // cap database file descriptors even if more is available
+ limit = 2048
+ }
+ return limit / 2 // Leave half for networking and other stuff
+}
+
// MakeAccountManager creates an account manager from set command line flags.
func MakeAccountManager(ctx *cli.Context) *accounts.Manager {
// Create the keystore crypto primitive, light if requested
@@ -649,6 +665,7 @@ func MakeSystemNode(name, version string, extra []byte, ctx *cli.Context) *node.
FastSync: ctx.GlobalBool(FastSyncFlag.Name),
BlockChainVersion: ctx.GlobalInt(BlockchainVersionFlag.Name),
DatabaseCache: ctx.GlobalInt(CacheFlag.Name),
+ DatabaseHandles: MakeDatabaseHandles(),
NetworkId: ctx.GlobalInt(NetworkIdFlag.Name),
AccountManager: accman,
Etherbase: MakeEtherbase(accman, ctx),
@@ -763,9 +780,10 @@ func SetupVM(ctx *cli.Context) {
func MakeChain(ctx *cli.Context) (chain *core.BlockChain, chainDb ethdb.Database) {
datadir := MustMakeDataDir(ctx)
cache := ctx.GlobalInt(CacheFlag.Name)
+ handles := MakeDatabaseHandles()
var err error
- if chainDb, err = ethdb.NewLDBDatabase(filepath.Join(datadir, "chaindata"), cache); err != nil {
+ if chainDb, err = ethdb.NewLDBDatabase(filepath.Join(datadir, "chaindata"), cache, handles); err != nil {
Fatalf("Could not open database: %v", err)
}
if ctx.GlobalBool(OlympicFlag.Name) {