Dont use benchmark range on constant functions (#12456)

* dont use benchmark range on constant function

* update weights

* fix

* new weights

* Update frame/examples/basic/src/benchmarking.rs

Co-authored-by: parity-processbot <>
This commit is contained in:
Shawn Tabrizi
2022-10-12 12:32:10 -04:00
committed by GitHub
parent 09748f1b28
commit b38c4165a4
3 changed files with 46 additions and 51 deletions
@@ -34,25 +34,26 @@ use frame_system::RawOrigin;
// Details on using the benchmarks macro can be seen at: // Details on using the benchmarks macro can be seen at:
// https://paritytech.github.io/substrate/master/frame_benchmarking/trait.Benchmarking.html#tymethod.benchmarks // https://paritytech.github.io/substrate/master/frame_benchmarking/trait.Benchmarking.html#tymethod.benchmarks
benchmarks! { benchmarks! {
// This will measure the execution time of `set_dummy` for b in [0..1000] range. // This will measure the execution time of `set_dummy`.
set_dummy_benchmark { set_dummy_benchmark {
// This is the benchmark setup phase // This is the benchmark setup phase.
let b in 0 .. 1000; // `set_dummy` is a constant time function, hence we hard-code some random value here.
}: set_dummy(RawOrigin::Root, b.into()) // The execution phase is just running `set_dummy` extrinsic call let value = 1000u32.into();
}: set_dummy(RawOrigin::Root, value) // The execution phase is just running `set_dummy` extrinsic call
verify { verify {
// This is the optional benchmark verification phase, asserting certain states. // This is the optional benchmark verification phase, asserting certain states.
assert_eq!(Pallet::<T>::dummy(), Some(b.into())) assert_eq!(Pallet::<T>::dummy(), Some(value))
} }
// This will measure the execution time of `accumulate_dummy` for b in [0..1000] range. // This will measure the execution time of `accumulate_dummy`.
// The benchmark execution phase is shorthanded. When the name of the benchmark case is the same // The benchmark execution phase is shorthanded. When the name of the benchmark case is the same
// as the extrinsic call. `_(...)` is used to represent the extrinsic name. // as the extrinsic call. `_(...)` is used to represent the extrinsic name.
// The benchmark verification phase is omitted. // The benchmark verification phase is omitted.
accumulate_dummy { accumulate_dummy {
let b in 0 .. 1000; let value = 1000u32.into();
// The caller account is whitelisted for DB reads/write by the benchmarking macro. // The caller account is whitelisted for DB reads/write by the benchmarking macro.
let caller: T::AccountId = whitelisted_caller(); let caller: T::AccountId = whitelisted_caller();
}: _(RawOrigin::Signed(caller), b.into()) }: _(RawOrigin::Signed(caller), value)
// This will measure the execution time of sorting a vector. // This will measure the execution time of sorting a vector.
sort_vector { sort_vector {
+1 -1
View File
@@ -498,7 +498,7 @@ pub mod pallet {
// The weight for this extrinsic we rely on the auto-generated `WeightInfo` from the // The weight for this extrinsic we rely on the auto-generated `WeightInfo` from the
// benchmark toolchain. // benchmark toolchain.
#[pallet::weight( #[pallet::weight(
<T as pallet::Config>::WeightInfo::accumulate_dummy((*increase_by).saturated_into()) <T as pallet::Config>::WeightInfo::accumulate_dummy()
)] )]
pub fn accumulate_dummy(origin: OriginFor<T>, increase_by: T::Balance) -> DispatchResult { pub fn accumulate_dummy(origin: OriginFor<T>, increase_by: T::Balance) -> DispatchResult {
// This is a public call, so we ensure that the origin is some signed account. // This is a public call, so we ensure that the origin is some signed account.
+36 -42
View File
@@ -1,6 +1,6 @@
// This file is part of Substrate. // This file is part of Substrate.
// Copyright (C) 2021-2022 Parity Technologies (UK) Ltd. // Copyright (C) 2022 Parity Technologies (UK) Ltd.
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,34 +17,26 @@
//! Autogenerated weights for pallet_example_basic //! Autogenerated weights for pallet_example_basic
//! //!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
//! DATE: 2021-03-15, STEPS: `[100, ]`, REPEAT: 10, LOW RANGE: `[]`, HIGH RANGE: `[]` //! DATE: 2022-10-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128 //! HOSTNAME: `Shawns-MacBook-Pro.local`, CPU: `<UNKNOWN>`
//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
// Executed Command: // Executed Command:
// ./target/release/substrate // ./target/release/substrate
// benchmark // benchmark
// --chain // pallet
// dev // --chain=dev
// --execution // --execution=wasm
// wasm // --wasm-execution=compiled
// --wasm-execution // --pallet=pallet_example_basic
// compiled // --extrinsic=*
// --pallet // --steps=50
// pallet_example_basic // --repeat=20
// --extrinsic // --output=./
// *
// --steps
// 100
// --repeat
// 10
// --raw
// --output
// ./
// --template // --template
// ./.maintain/frame-weight-template.hbs // ./.maintain/frame-weight-template.hbs
#![cfg_attr(rustfmt, rustfmt_skip)] #![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)] #![allow(unused_parens)]
#![allow(unused_imports)] #![allow(unused_imports)]
@@ -54,48 +46,50 @@ use sp_std::marker::PhantomData;
/// Weight functions needed for pallet_example_basic. /// Weight functions needed for pallet_example_basic.
pub trait WeightInfo { pub trait WeightInfo {
fn set_dummy_benchmark(b: u32, ) -> Weight; fn set_dummy_benchmark() -> Weight;
fn accumulate_dummy(b: u32, ) -> Weight; fn accumulate_dummy() -> Weight;
fn sort_vector(x: u32, ) -> Weight; fn sort_vector(x: u32, ) -> Weight;
} }
/// Weights for pallet_example_basic using the Substrate node and recommended hardware. /// Weights for pallet_example_basic using the Substrate node and recommended hardware.
pub struct SubstrateWeight<T>(PhantomData<T>); pub struct SubstrateWeight<T>(PhantomData<T>);
impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> { impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
fn set_dummy_benchmark(b: u32, ) -> Weight { // Storage: BasicExample Dummy (r:0 w:1)
Weight::from_ref_time(5_834_000 as u64) fn set_dummy_benchmark() -> Weight {
.saturating_add(Weight::from_ref_time(24_000 as u64).saturating_mul(b as u64)) Weight::from_ref_time(19_000_000 as u64)
.saturating_add(T::DbWeight::get().writes(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64))
} }
fn accumulate_dummy(b: u32, ) -> Weight { // Storage: BasicExample Dummy (r:1 w:1)
Weight::from_ref_time(51_353_000 as u64) fn accumulate_dummy() -> Weight {
.saturating_add(Weight::from_ref_time(14_000 as u64).saturating_mul(b as u64)) Weight::from_ref_time(18_000_000 as u64)
.saturating_add(T::DbWeight::get().reads(1 as u64)) .saturating_add(T::DbWeight::get().reads(1 as u64))
.saturating_add(T::DbWeight::get().writes(1 as u64)) .saturating_add(T::DbWeight::get().writes(1 as u64))
} }
/// The range of component `x` is `[0, 10000]`.
fn sort_vector(x: u32, ) -> Weight { fn sort_vector(x: u32, ) -> Weight {
Weight::from_ref_time(2_569_000 as u64) Weight::from_ref_time(0 as u64)
// Standard Error: 0 // Standard Error: 2
.saturating_add(Weight::from_ref_time(4_000 as u64).saturating_mul(x as u64)) .saturating_add(Weight::from_ref_time(520 as u64).saturating_mul(x as u64))
} }
} }
// For backwards compatibility and tests // For backwards compatibility and tests
impl WeightInfo for () { impl WeightInfo for () {
fn set_dummy_benchmark(b: u32, ) -> Weight { // Storage: BasicExample Dummy (r:0 w:1)
Weight::from_ref_time(5_834_000 as u64) fn set_dummy_benchmark() -> Weight {
.saturating_add(Weight::from_ref_time(24_000 as u64).saturating_mul(b as u64)) Weight::from_ref_time(19_000_000 as u64)
.saturating_add(RocksDbWeight::get().writes(1 as u64)) .saturating_add(RocksDbWeight::get().writes(1 as u64))
} }
fn accumulate_dummy(b: u32, ) -> Weight { // Storage: BasicExample Dummy (r:1 w:1)
Weight::from_ref_time(51_353_000 as u64) fn accumulate_dummy() -> Weight {
.saturating_add(Weight::from_ref_time(14_000 as u64).saturating_mul(b as u64)) Weight::from_ref_time(18_000_000 as u64)
.saturating_add(RocksDbWeight::get().reads(1 as u64)) .saturating_add(RocksDbWeight::get().reads(1 as u64))
.saturating_add(RocksDbWeight::get().writes(1 as u64)) .saturating_add(RocksDbWeight::get().writes(1 as u64))
} }
/// The range of component `x` is `[0, 10000]`.
fn sort_vector(x: u32, ) -> Weight { fn sort_vector(x: u32, ) -> Weight {
Weight::from_ref_time(2_569_000 as u64) Weight::from_ref_time(0 as u64)
// Standard Error: 0 // Standard Error: 2
.saturating_add(Weight::from_ref_time(4_000 as u64).saturating_mul(x as u64)) .saturating_add(Weight::from_ref_time(520 as u64).saturating_mul(x as u64))
} }
} }