Files
pezkuwi-subxt/substrate/utils/frame/benchmarking-cli/src/machine/README.md
T
Davide Galassi 4c10fd2a41 Move cryptographic hashing procedures to crypto folder. (#2306)
Step towards https://github.com/paritytech/polkadot-sdk/issues/1975

As reported
https://github.com/paritytech/polkadot-sdk/issues/1975#issuecomment-1774534225
I'd like to encapsulate crypto related stuff in a dedicated folder.

Currently all cryptographic primitive wrappers are all sparsed in
`substrate/core` which contains "misc core" stuff.

To simplify the process, as the first step with this PR I propose to
move the cryptographic hashing there.

The `substrate/crypto` folder was already created to contains `ec-utils`
crate.

Notes:
- rename `sp-core-hashing` to `sp-crypto-hashing`
- rename `sp-core-hashing-proc-macro` to `sp-crypto-hashing-proc-macro`
- As the crates name is changed I took the freedom to restart fresh from
version 0.1.0 for both crates

---------

Co-authored-by: Robert Hambrock <roberthambrock@gmail.com>
2024-01-22 23:36:14 +00:00

4.3 KiB

The benchmark machine command

Different Substrate chains can have different hardware requirements. It is therefore important to be able to quickly gauge if a piece of hardware fits a chains' requirements. The benchmark machine command archives this by measuring key metrics and making them comparable.

Invoking the command looks like this:

cargo run --profile=production -- benchmark machine --dev

Output

The output on reference hardware:

+----------+----------------+---------------+--------------+-------------------+
| Category | Function       | Score         | Minimum      | Result            |
+----------+----------------+---------------+--------------+-------------------+
| CPU      | BLAKE2-256     | 1023.00 MiB/s | 1.00 GiB/s   | ✅ Pass ( 99.4 %) |
+----------+----------------+---------------+--------------+-------------------+
| CPU      | SR25519-Verify | 665.13 KiB/s  | 666.00 KiB/s | ✅ Pass ( 99.9 %) |
+----------+----------------+---------------+--------------+-------------------+
| Memory   | Copy           | 14.39 GiB/s   | 14.32 GiB/s  | ✅ Pass (100.4 %) |
+----------+----------------+---------------+--------------+-------------------+
| Disk     | Seq Write      | 457.00 MiB/s  | 450.00 MiB/s | ✅ Pass (101.6 %) |
+----------+----------------+---------------+--------------+-------------------+
| Disk     | Rnd Write      | 190.00 MiB/s  | 200.00 MiB/s | ✅ Pass ( 95.0 %) |
+----------+----------------+---------------+--------------+-------------------+

The score is the average result of each benchmark. It always adheres to "higher is better".

The category indicate which part of the hardware was benchmarked:

  • CPU Processor intensive task
  • Memory RAM intensive task
  • Disk Hard drive intensive task

The function is the concrete benchmark that was run:

  • BLAKE2-256 The throughput of the Blake2-256 cryptographic hashing function with 32 KiB input. The blake2_256 function is used in many places in Substrate. The throughput of a hash function strongly depends on the input size, therefore we settled to use a fixed input size for comparable results.
  • SR25519 Verify Sr25519 is an optimized version of the Curve25519 signature scheme. Signature verification is used by Substrate when verifying extrinsics and blocks.
  • Copy The throughput of copying memory from one place in the RAM to another.
  • Seq Write The throughput of writing data to the storage location sequentially. It is important that the same disk is used that will later-on be used to store the chain data.
  • Rnd Write The throughput of writing data to the storage location in a random order. This is normally much slower than the sequential write.

The score needs to reach the minimum in order to pass the benchmark. This can be reduced with the --tolerance flag.

The result indicated if a specific benchmark was passed by the machine or not. The percent number is the relative score reached to the minimum that is needed. The --tolerance flag is taken into account for this decision. For example a benchmark that passes even with 95% since the tolerance was set to 10% would look like this: ✅ Pass ( 95.0 %).

Interpretation

Ideally all results show a Pass and the program exits with code 0. Currently some of the benchmarks can fail even on reference hardware; they are still being improved to make them more deterministic. Make sure to run nothing else on the machine when benchmarking it. You can re-run them multiple times to get more reliable results.

Arguments

  • --tolerance A percent number to reduce the minimum requirement. This should be used to ignore outliers of the benchmarks. The default value is 10%.
  • --verify-duration How long the verification benchmark should run.
  • --disk-duration How long the read and write benchmarks should run each.
  • --allow-fail Always exit the program with code 0.
  • --chain / --dev Specify the chain config to use. This will be used to compare the results with the requirements of the chain (WIP).
  • --base-path

License: Apache-2.0