Skip to content

Benchmarks

Toufeeq Pasha edited this page Mar 19, 2024 · 2 revisions

Run benchmarks

Manually

You can run any benchmark and generate the proper weight.rs file. In the following command, we are running the benchmarks from da-control pallet, and the generated file is

$> cargo run --release -p avail-node --features runtime-benchmarks -- \
    benchmark \
    pallet \
    --chain=dev \
    --steps=30 \
    --repeat=20 \
    --log=warn \
    --template=./.maintain/frame-weight-template.hbs \
    --header=./HEADER-APACHE2 \
    --pallet=da-control \
    --extrinsic=* \
    --output=./output/weights.rs

To benchmark all extrinsics for all pallets: $> cargo run --release -p avail-node --features runtime-benchmarks --
benchmark
pallet
--chain=dev
--steps=30
--repeat=20
--log=warn
--template=./.maintain/frame-weight-template.hbs
--header=./HEADER-APACHE2
--pallet=*
--extrinsic=*
--output=./output/weights.rs

To benchmark long running features like the kate commitment generation, you can specify --extra as additional flag.

Via Script

To run all benchmarks from all pallets:

./run_benchmarks.sh

You can customize the number of steps and repeats for the benchmarks using environment variables. For example, to set the number of steps to 4 and the number of repeats to 20, use the following command:

STEPS=4 REPEAT=20 ./run_benchmarks.sh

If you only want to run benchmarks just for our own custom pallets, you can set the OUR_PALLETS environment variable:

OUR_PALLETS=1 ./run_benchmarks.sh

To run benchmarks for specific pallets, you need to set the PALLETS environment variable and provide a space-separated list of pallet names. For example, to run benchmarks for the frame_system and mocked_runtime pallets, use the following command:

PALLETS="frame_system mocked_runtime" ./run_benchmarks.sh

To benchmark long running features like the kate commitment generation, you can specify EXTRA=1 as additional environment variable.

EXTRA=1 ./run_benchmarks.sh

Additional info

When computing benchmarks, additionally to weights, PoV proof of validity (proof size) will be computed based on storage usage. If no storage is used, PoV will be 0. By default the benchmark PoV is #[pov_mode = MaxEncodedLen] this should always be the case. For rare cases, MaxEncodedLen won't be specified for a storage then for benchmarks that use this storage, #[pov_mode = Measured] should explicitely be specified.