Benchmarking
Bitcoin Cash Node has an internal benchmarking framework, with benchmarks for cryptographic algorithms (e.g. SHA1, SHA256, SHA512, RIPEMD160), as well as the rolling bloom filter, address encoding and decoding, CCoinsCaching, memory pool eviction, and wallet coin selection.
The benchmarks can be run and built using ninja bench-bitcoin.
This produces and runs the benchmarking executable src/bench/bench_bitcoin.
The output will look similar to:
```
Benchmark, evals, iterations, total, min, max, median
Base58CheckEncode, 5, 320000, 5.28577, 3.27814e-06, 3.36971e-06, 3.29183e-06 Base58Decode, 5, 800000, 4.71472, 1.16438e-06, 1.20043e-06, 1.17352e-06 Base58Encode, 5, 470000, 4.80062, 2.03992e-06, 2.04861e-06, 2.04084e-06 BenchLockedPool, 5, 530, 5.08076, 0.00189861, 0.00193961, 0.00191404 CCheckQueueSpeedPrevectorJob, 5, 1400, 3.45167, 0.000482017, 0.000502189, 0.000494358 CCoinsCaching, 5, 170000, 3.17266, 3.66883e-06, 3.85988e-06, 3.68462e-06 CashAddrDecode, 5, 800000, 3.40281, 8.47462e-07, 8.56334e-07, 8.49539e-07 CashAddrEncode, 5, 800000, 2.14463, 5.19902e-07, 5.44274e-07, 5.43256e-07 CoinSelection, 5, 650, 4.91077, 0.00149673, 0.00152377, 0.00151478 DeserializeAndCheckBlockTest, 5, 160, 7.95019, 0.00983543, 0.010025, 0.00995759 DeserializeBlockTest, 5, 130, 3.97769, 0.00608507, 0.00617347, 0.00611737 FastRandom_1bit, 5, 440000000, 3.52478, 1.59844e-09, 1.60445e-09, 1.60243e-09 FastRandom_32bit, 5, 110000000, 4.75589, 8.55725e-09, 8.81171e-09, 8.5712e-09 MempoolEviction, 5, 41000, 3.13696, 1.5251e-05, 1.53693e-05, 1.53068e-05 MerkleRoot, 5, 800, 25.2939, 0.00622814, 0.0064672, 0.0062586 PrevectorClearNontrivial, 5, 28300, 10.8137, 7.60788e-05, 7.73677e-05, 7.62496e-05 PrevectorClearTrivial, 5, 88600, 20.1727, 4.52744e-05, 4.57312e-05, 4.54863e-05 PrevectorDestructorNontrivial, 5, 28800, 9.38879, 6.48316e-05, 6.54969e-05, 6.52511e-05 PrevectorDestructorTrivial, 5, 88900, 20.7015, 4.63369e-05, 4.67035e-05, 4.66142e-05 PrevectorResizeNontrivial, 5, 28900, 2.86174, 1.97734e-05, 1.98625e-05, 1.9797e-05 PrevectorResizeTrivial, 5, 90300, 3.33574, 7.32896e-06, 7.46976e-06, 7.38089e-06 RIPEMD160, 5, 440, 5.02836, 0.00224976, 0.00229784, 0.00229684 RollingBloom, 5, 1500000, 4.86547, 6.35376e-07, 6.57399e-07, 6.50339e-07 SHA1, 5, 570, 4.69405, 0.00160936, 0.00171571, 0.00161574 SHA256, 5, 340, 7.18121, 0.00419859, 0.00425665, 0.00423095 SHA256D64_1024, 5, 7400, 26.1915, 0.000701612, 0.00071808, 0.000705198 SHA256_32b, 5, 4700000, 7.02517, 2.95913e-07, 3.03323e-07, 2.97997e-07 SHA512, 5, 330, 4.40307, 0.00265286, 0.00267815, 0.00267316 SipHash_32b, 5, 40000000, 5.03543, 2.48915e-08, 2.56569e-08, 2.49465e-08 Sleep100ms, 5, 10, 5.00483, 0.100091, 0.100108, 0.100095 Trig, 5, 12000000, 2.17942, 3.60625e-08, 3.64305e-08, 3.63656e-08
```
Further improvements
More benchmarks are needed for, in no particular order:
- Script Validation
- Coins database
- Memory pool