Skip to content

Commit 9d67222

Browse files
rjl493456442karalabe
authored andcommitted
trie: replace bigcache with fastcache (#19971)
1 parent f5a68a4 commit 9d67222

File tree

3 files changed

+20
-17
lines changed

3 files changed

+20
-17
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ require (
77
github.com/Azure/azure-storage-blob-go v0.7.0
88
github.com/Azure/go-autorest/autorest/adal v0.8.0 // indirect
99
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect
10-
github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156
10+
github.com/VictoriaMetrics/fastcache v1.5.2
1111
github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847
1212
github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6
1313
github.com/cespare/cp v0.1.0

go.sum

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@ github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VY
2121
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
2222
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
2323
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
24+
github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI=
25+
github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q=
2426
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8=
2527
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
28+
github.com/VictoriaMetrics/fastcache v1.5.2 h1:Erd8iIuBAL9kke8JzM4+WxkKuFkHh3ktwLanJvDgR44=
29+
github.com/VictoriaMetrics/fastcache v1.5.2/go.mod h1:+jv9Ckb+za/P1ZRg/sulP5Ni1v49daAVERr0H3CuscE=
2630
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
2731
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
2832
github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8=
@@ -34,7 +38,10 @@ github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6 h1:Eey/GGQ/E5Xp1P2Ly
3438
github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ=
3539
github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk=
3640
github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s=
41+
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
3742
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
43+
github.com/cespare/xxhash/v2 v2.0.1-0.20190104013014-3767db7a7e18 h1:pl4eWIqvFe/Kg3zkn7NxevNzILnZYWDCG7qbA1CJik0=
44+
github.com/cespare/xxhash/v2 v2.0.1-0.20190104013014-3767db7a7e18/go.mod h1:HD5P3vAIAh+Y2GAxg0PrPN1P8WkepXGpjbUPDHJqqKM=
3845
github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9 h1:J82+/8rub3qSy0HxEnoYD8cs+HDlHWYrqYXe2Vqxluk=
3946
github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U=
4047
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
@@ -155,6 +162,8 @@ github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubr
155162
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
156163
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
157164
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
165+
github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9 h1:5Cp3cVwpQP4aCQ6jx6dNLP3IarbYiuStmIzYu+BjQwY=
166+
github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
158167
github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg=
159168
github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q=
160169
github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 h1:gIlAHnH1vJb5vwEjIp5kBj/eu99p/bl0Ay2goiPe5xE=
@@ -163,6 +172,7 @@ github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 h1:njlZPzLwU639
163172
github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU=
164173
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
165174
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
175+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
166176
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
167177
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
168178
github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d h1:gZZadD8H+fF+n9CmNhYL1Y0dJB+kLOmKd7FbPJLeGHs=

trie/database.go

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import (
2525
"sync"
2626
"time"
2727

28-
"github.com/allegro/bigcache"
28+
"github.com/VictoriaMetrics/fastcache"
2929
"github.com/ethereum/go-ethereum/common"
3030
"github.com/ethereum/go-ethereum/ethdb"
3131
"github.com/ethereum/go-ethereum/log"
@@ -69,7 +69,7 @@ const secureKeyLength = 11 + 32
6969
type Database struct {
7070
diskdb ethdb.KeyValueStore // Persistent storage for matured trie nodes
7171

72-
cleans *bigcache.BigCache // GC friendly memory cache of clean node RLPs
72+
cleans *fastcache.Cache // GC friendly memory cache of clean node RLPs
7373
dirties map[common.Hash]*cachedNode // Data and references relationships of dirty nodes
7474
oldest common.Hash // Oldest tracked node, flush-list head
7575
newest common.Hash // Newest tracked node, flush-list tail
@@ -296,16 +296,9 @@ func NewDatabase(diskdb ethdb.KeyValueStore) *Database {
296296
// before its written out to disk or garbage collected. It also acts as a read cache
297297
// for nodes loaded from disk.
298298
func NewDatabaseWithCache(diskdb ethdb.KeyValueStore, cache int) *Database {
299-
var cleans *bigcache.BigCache
299+
var cleans *fastcache.Cache
300300
if cache > 0 {
301-
cleans, _ = bigcache.NewBigCache(bigcache.Config{
302-
Shards: 1024,
303-
LifeWindow: time.Hour,
304-
MaxEntriesInWindow: cache * 1024,
305-
MaxEntrySize: 512,
306-
HardMaxCacheSize: cache,
307-
Hasher: trienodeHasher{},
308-
})
301+
cleans = fastcache.New(cache * 1024 * 1024)
309302
}
310303
return &Database{
311304
diskdb: diskdb,
@@ -381,7 +374,7 @@ func (db *Database) insertPreimage(hash common.Hash, preimage []byte) {
381374
func (db *Database) node(hash common.Hash) node {
382375
// Retrieve the node from the clean cache if available
383376
if db.cleans != nil {
384-
if enc, err := db.cleans.Get(string(hash[:])); err == nil && enc != nil {
377+
if enc := db.cleans.Get(nil, hash[:]); enc != nil {
385378
memcacheCleanHitMeter.Mark(1)
386379
memcacheCleanReadMeter.Mark(int64(len(enc)))
387380
return mustDecodeNode(hash[:], enc)
@@ -401,7 +394,7 @@ func (db *Database) node(hash common.Hash) node {
401394
return nil
402395
}
403396
if db.cleans != nil {
404-
db.cleans.Set(string(hash[:]), enc)
397+
db.cleans.Set(hash[:], enc)
405398
memcacheCleanMissMeter.Mark(1)
406399
memcacheCleanWriteMeter.Mark(int64(len(enc)))
407400
}
@@ -417,7 +410,7 @@ func (db *Database) Node(hash common.Hash) ([]byte, error) {
417410
}
418411
// Retrieve the node from the clean cache if available
419412
if db.cleans != nil {
420-
if enc, err := db.cleans.Get(string(hash[:])); err == nil && enc != nil {
413+
if enc := db.cleans.Get(nil, hash[:]); enc != nil {
421414
memcacheCleanHitMeter.Mark(1)
422415
memcacheCleanReadMeter.Mark(int64(len(enc)))
423416
return enc, nil
@@ -435,7 +428,7 @@ func (db *Database) Node(hash common.Hash) ([]byte, error) {
435428
enc, err := db.diskdb.Get(hash[:])
436429
if err == nil && enc != nil {
437430
if db.cleans != nil {
438-
db.cleans.Set(string(hash[:]), enc)
431+
db.cleans.Set(hash[:], enc)
439432
memcacheCleanMissMeter.Mark(1)
440433
memcacheCleanWriteMeter.Mark(int64(len(enc)))
441434
}
@@ -832,7 +825,7 @@ func (c *cleaner) Put(key []byte, rlp []byte) error {
832825
}
833826
// Move the flushed node into the clean cache to prevent insta-reloads
834827
if c.db.cleans != nil {
835-
c.db.cleans.Set(string(hash[:]), rlp)
828+
c.db.cleans.Set(hash[:], rlp)
836829
}
837830
return nil
838831
}

0 commit comments

Comments
 (0)