• Felix Lange's avatar
    trie, core/state: improve memory usage and performance (#3135) · 40cdcf11
    Felix Lange authored
    * trie: store nodes as pointers
    
    This avoids memory copies when unwrapping node interface values.
    
    name      old time/op  new time/op  delta
    Get        388ns ± 8%   215ns ± 2%  -44.56%  (p=0.000 n=15+15)
    GetDB      363ns ± 3%   202ns ± 2%  -44.21%  (p=0.000 n=15+15)
    UpdateBE  1.57µs ± 2%  1.29µs ± 3%  -17.80%  (p=0.000 n=13+15)
    UpdateLE  1.92µs ± 2%  1.61µs ± 2%  -16.25%  (p=0.000 n=14+14)
    HashBE    2.16µs ± 6%  2.18µs ± 6%     ~     (p=0.436 n=15+15)
    HashLE    7.43µs ± 3%  7.21µs ± 3%   -2.96%  (p=0.000 n=15+13)
    
    * trie: close temporary databases in GetDB benchmark
    
    * trie: don't keep []byte from DB load around
    
    Nodes decoded from a DB load kept hashes and values as sub-slices of
    the DB value. This can be a problem because loading from leveldb often
    returns []byte with a cap that's larger than necessary, increasing
    memory usage.
    
    * trie: unload old cached nodes
    
    * trie, core/state: use cache unloading for account trie
    
    * trie: use explicit private flags (fixes Go 1.5 reflection issue).
    
    * trie: fixup cachegen overflow at request of nick
    
    * core/state: rename journal size constant
    40cdcf11
Name
Last commit
Last update
..
downloader Loading commit data...
fetcher Loading commit data...
filters Loading commit data...
gasprice Loading commit data...
api.go Loading commit data...
api_backend.go Loading commit data...
backend.go Loading commit data...
backend_test.go Loading commit data...
bad_block.go Loading commit data...
bind.go Loading commit data...
cpu_mining.go Loading commit data...
db_upgrade.go Loading commit data...
gpu_mining.go Loading commit data...
handler.go Loading commit data...
handler_test.go Loading commit data...
helper_test.go Loading commit data...
metrics.go Loading commit data...
peer.go Loading commit data...
protocol.go Loading commit data...
protocol_test.go Loading commit data...
sync.go Loading commit data...
sync_test.go Loading commit data...