Skip to content

Latest commit

 

History

History
72 lines (52 loc) · 2.4 KB

File metadata and controls

72 lines (52 loc) · 2.4 KB

Benchmarking

Dash Core has an internal benchmarking framework, with benchmarks for cryptographic algorithms (e.g. SHA1, SHA256, SHA512, RIPEMD160, Poly1305, ChaCha20), rolling bloom filter, coins selection, thread queue, wallet balance.

Running

For benchmarking, you only need to compile dash_bench. The bench runner warns if you configure with --enable-debug, but consider if building without it will impact the benchmark(s) you are interested in by unlatching log printers and lock analysis.

make -C src dash_bench

After compiling Dash Core, the benchmarks can be run with:

src/bench/bench_dash

The output will look similar to:

|               ns/op |                op/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|       57,927,463.00 |               17.26 |    3.6% |      0.66 | `AddrManAdd`
|          677,816.00 |            1,475.33 |    4.9% |      0.01 | `AddrManGetAddr`

...

|             ns/byte |              byte/s |    err% |     total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
|              127.32 |        7,854,302.69 |    0.3% |      0.00 | `Base58CheckEncode`
|               31.95 |       31,303,226.99 |    0.2% |      0.00 | `Base58Decode`

...

Help

src/bench/bench_dash -?

To print the various options, like listing the benchmarks without running them or using a regex filter to only run certain benchmarks.

Notes

More benchmarks are needed for, in no particular order:

  • Script Validation
  • Coins database
  • Memory pool
  • Cuckoo Cache
  • P2P throughput

Inventory processing

InventoryBatch100 and InventoryBatch50000 exercise the peer-manager INV, GETDATA scheduling, and NOTFOUND paths without sockets. They use spork inventories whose hashes are absent locally and clear the request state after every iteration. Use an optimized build to measure CPU cost; debug builds additionally enable expensive container and lock-order checks.

src/bench/bench_dash -filter='InventoryBatch.*' -min-time=5000

Going Further

To monitor Dash Core performance more in depth (like reindex or IBD): https://github.com/chaincodelabs/bitcoinperf

To generate Flame Graphs for Dash Core: https://github.com/eklitzke/bitcoin/blob/flamegraphs/doc/flamegraphs.md