mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-01-12 13:24:21 +00:00
d39c589ec3
* replace rocksdb row cache with larger rdb lru caches - these serve the same purpose but are more efficient because they skips serialization, locking and rocksdb layering * don't append fresh items to cache - this has the effect of evicting the existing items and replacing them with low-value entries that might never be read - during write-heavy periods of processing, the newly-added entries were evicted during the store loop * allow tuning rdb lru size at runtime * add (hidden) option to print lru stats at exit (replacing the compile-time flag) pre: ``` INF 2024-09-03 15:07:01.136+02:00 Imported blocks blockNumber=20012001 blocks=12000 importedSlot=9216851 txs=1837042 mgas=181911.265 bps=11.675 tps=1870.397 mgps=176.819 avgBps=10.288 avgTps=1574.889 avgMGps=155.952 elapsed=19m26s458ms ``` post: ``` INF 2024-09-03 13:54:26.730+02:00 Imported blocks blockNumber=20012001 blocks=12000 importedSlot=9216851 txs=1837042 mgas=181911.265 bps=11.637 tps=1864.384 mgps=176.250 avgBps=11.202 avgTps=1714.920 avgMGps=169.818 elapsed=17m51s211ms ``` 9%:ish import perf improvement on similar mem usage :)
60 lines
1.9 KiB
Nim
60 lines
1.9 KiB
Nim
# Nimbus
|
|
# Copyright (c) 2024 Status Research & Development GmbH
|
|
# Licensed under either of
|
|
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
|
|
# http://www.apache.org/licenses/LICENSE-2.0)
|
|
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or
|
|
# http://opensource.org/licenses/MIT)
|
|
# at your option. This file may not be copied, modified, or distributed
|
|
# except according to those terms.
|
|
|
|
{.push raises: [].}
|
|
|
|
import results
|
|
|
|
export results
|
|
|
|
const
|
|
# https://github.com/facebook/rocksdb/wiki/Setup-Options-and-Basic-Tuning
|
|
defaultMaxOpenFiles* = 512
|
|
defaultWriteBufferSize* = 64 * 1024 * 1024
|
|
defaultRowCacheSize* = 0
|
|
## The row cache is disabled by default as the rdb lru caches do a better
|
|
## job at a similar abstraction level - ie they work at the same granularity
|
|
## as the rocksdb row cache but with less overhead
|
|
defaultBlockCacheSize* = 2 * 1024 * 1024 * 1024
|
|
defaultRdbVtxCacheSize* = 512 * 1024 * 1024
|
|
## Cache of branches and leaves in the state MPTs (world and account)
|
|
defaultRdbKeyCacheSize* = 256 * 1024 * 1024
|
|
## Hashes of the above
|
|
|
|
|
|
type DbOptions* = object # Options that are transported to the database layer
|
|
maxOpenFiles*: int
|
|
writeBufferSize*: int
|
|
rowCacheSize*: int
|
|
blockCacheSize*: int
|
|
rdbVtxCacheSize*: int
|
|
rdbKeyCacheSize*: int
|
|
rdbPrintStats*: bool
|
|
|
|
func init*(
|
|
T: type DbOptions,
|
|
maxOpenFiles = defaultMaxOpenFiles,
|
|
writeBufferSize = defaultWriteBufferSize,
|
|
rowCacheSize = defaultRowCacheSize,
|
|
blockCacheSize = defaultBlockCacheSize,
|
|
rdbVtxCacheSize = defaultRdbVtxCacheSize,
|
|
rdbKeyCacheSize = defaultRdbKeyCacheSize,
|
|
rdbPrintStats = false,
|
|
): T =
|
|
T(
|
|
maxOpenFiles: maxOpenFiles,
|
|
writeBufferSize: writeBufferSize,
|
|
rowCacheSize: rowCacheSize,
|
|
blockCacheSize: blockCacheSize,
|
|
rdbVtxCacheSize: rdbVtxCacheSize,
|
|
rdbKeyCacheSize: rdbKeyCacheSize,
|
|
rdbPrintStats: rdbPrintStats,
|
|
)
|