This is a draft PR to show various possible optimizations for CCoinsMap
. In my benchmark, all these changes lead to a statistically significant speed improvement for -reindex-chainstate
.
0Benchmark 1: ./build/bin/bitcoind -stopatheight=600000 -dbcache=5000 -printtoconsole=0 -reindex-chainstate -noconnect -connect=192.168.8.118 (COMMIT = ac188b573c8)
1 Time (mean ± σ): 2089.253 s ± 23.737 s [User: 2110.111 s, System: 299.197 s]
2 Range (min … max): 2062.751 s … 2108.561 s 3 runs
3
4Benchmark 2: ./build/bin/bitcoind -stopatheight=600000 -dbcache=5000 -printtoconsole=0 -reindex-chainstate -noconnect -connect=192.168.8.118 (COMMIT = 7113095b3cd)
5 Time (mean ± σ): 2431.028 s ± 17.544 s [User: 2439.746 s, System: 284.994 s]
6 Range (min … max): 2415.408 s … 2450.009 s 3 runs
7
8Benchmark 3: ./build/bin/bitcoind -stopatheight=600000 -dbcache=5000 -printtoconsole=0 -reindex-chainstate -noconnect -connect=192.168.8.118 (COMMIT = 7370e13d93d)
9 Time (mean ± σ): 2530.955 s ± 21.575 s [User: 2539.882 s, System: 285.890 s]
10 Range (min … max): 2512.525 s … 2554.687 s 3 runs
11
12Benchmark 4: ./build/bin/bitcoind -stopatheight=600000 -dbcache=5000 -printtoconsole=0 -reindex-chainstate -noconnect -connect=192.168.8.118 (COMMIT = e568c1dd134)
13 Time (mean ± σ): 2839.864 s ± 9.993 s [User: 2850.112 s, System: 287.916 s]
14 Range (min … max): 2830.073 s … 2850.047 s 3 runs
15
16Summary
17 ./build/bin/bitcoind -stopatheight=600000 -dbcache=5000 -printtoconsole=0 -reindex-chainstate -noconnect -connect=192.168.8.118 (COMMIT = ac188b573c8) ran
18 1.16 ± 0.02 times faster than ./build/bin/bitcoind -stopatheight=600000 -dbcache=5000 -printtoconsole=0 -reindex-chainstate -noconnect -connect=192.168.8.118 (COMMIT = 7113095b3cd)
19 1.21 ± 0.02 times faster than ./build/bin/bitcoind -stopatheight=600000 -dbcache=5000 -printtoconsole=0 -reindex-chainstate -noconnect -connect=192.168.8.118 (COMMIT = 7370e13d93d)
20 1.36 ± 0.02 times faster than ./build/bin/bitcoind -stopatheight=600000 -dbcache=5000 -printtoconsole=0 -reindex-chainstate -noconnect -connect=192.168.8.118 (COMMIT = e568c1dd134)