Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Dont use benchmark range on constant functions #12456

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions frame/examples/basic/src/benchmarking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,25 +34,26 @@ use frame_system::RawOrigin;
// Details on using the benchmarks macro can be seen at:
// https://paritytech.github.io/substrate/master/frame_benchmarking/trait.Benchmarking.html#tymethod.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 {
// This is the benchmark setup phase
let b in 0 .. 1000;
}: set_dummy(RawOrigin::Root, b.into()) // The execution phase is just running `set_dummy` extrinsic call
// This is the benchmark setup phase.
// `set_dummy` is a constant time function, hence we hard-code some random value here.
let value = 1000u32.into();
}: set_dummy(RawOrigin::Root, value) // The execution phase is just running `set_dummy` extrinsic call
verify {
// 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
// as the extrinsic call. `_(...)` is used to represent the extrinsic name.
// The benchmark verification phase is omitted.
accumulate_dummy {
let b in 0 .. 1000;
let value = 1000u32.into();
// The caller account is whitelisted for DB reads/write by the benchmarking macro.
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.
sort_vector {
Expand Down
2 changes: 1 addition & 1 deletion frame/examples/basic/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,7 @@ pub mod pallet {
// The weight for this extrinsic we rely on the auto-generated `WeightInfo` from the
// benchmark toolchain.
#[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 {
// This is a public call, so we ensure that the origin is some signed account.
Expand Down
78 changes: 36 additions & 42 deletions frame/examples/basic/src/weights.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// 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

// Licensed under the Apache License, Version 2.0 (the "License");
Expand All @@ -17,34 +17,26 @@

//! Autogenerated weights for pallet_example_basic
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0
//! DATE: 2021-03-15, STEPS: `[100, ]`, REPEAT: 10, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
//! DATE: 2022-10-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! HOSTNAME: `Shawns-MacBook-Pro.local`, CPU: `<UNKNOWN>`
//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024

// Executed Command:
// ./target/release/substrate
// benchmark
// --chain
// dev
// --execution
// wasm
// --wasm-execution
// compiled
// --pallet
// pallet_example_basic
// --extrinsic
// *
// --steps
// 100
// --repeat
// 10
// --raw
// --output
// ./
// pallet
// --chain=dev
// --execution=wasm
// --wasm-execution=compiled
// --pallet=pallet_example_basic
// --extrinsic=*
// --steps=50
// --repeat=20
// --output=./
// --template
// ./.maintain/frame-weight-template.hbs


#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
Expand All @@ -54,48 +46,50 @@ use sp_std::marker::PhantomData;

/// Weight functions needed for pallet_example_basic.
pub trait WeightInfo {
fn set_dummy_benchmark(b: u32, ) -> Weight;
fn accumulate_dummy(b: u32, ) -> Weight;
fn set_dummy_benchmark() -> Weight;
fn accumulate_dummy() -> Weight;
fn sort_vector(x: u32, ) -> Weight;
}

/// Weights for pallet_example_basic using the Substrate node and recommended hardware.
pub struct SubstrateWeight<T>(PhantomData<T>);
impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
fn set_dummy_benchmark(b: u32, ) -> Weight {
Weight::from_ref_time(5_834_000 as u64)
.saturating_add(Weight::from_ref_time(24_000 as u64).saturating_mul(b as u64))
// Storage: BasicExample Dummy (r:0 w:1)
fn set_dummy_benchmark() -> Weight {
Weight::from_ref_time(19_000_000 as u64)
.saturating_add(T::DbWeight::get().writes(1 as u64))
}
fn accumulate_dummy(b: u32, ) -> Weight {
Weight::from_ref_time(51_353_000 as u64)
.saturating_add(Weight::from_ref_time(14_000 as u64).saturating_mul(b as u64))
// Storage: BasicExample Dummy (r:1 w:1)
fn accumulate_dummy() -> Weight {
Weight::from_ref_time(18_000_000 as u64)
.saturating_add(T::DbWeight::get().reads(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 {
Weight::from_ref_time(2_569_000 as u64)
// Standard Error: 0
.saturating_add(Weight::from_ref_time(4_000 as u64).saturating_mul(x as u64))
Weight::from_ref_time(0 as u64)
// Standard Error: 2
.saturating_add(Weight::from_ref_time(520 as u64).saturating_mul(x as u64))
}
}

// For backwards compatibility and tests
impl WeightInfo for () {
fn set_dummy_benchmark(b: u32, ) -> Weight {
Weight::from_ref_time(5_834_000 as u64)
.saturating_add(Weight::from_ref_time(24_000 as u64).saturating_mul(b as u64))
// Storage: BasicExample Dummy (r:0 w:1)
fn set_dummy_benchmark() -> Weight {
Weight::from_ref_time(19_000_000 as u64)
.saturating_add(RocksDbWeight::get().writes(1 as u64))
}
fn accumulate_dummy(b: u32, ) -> Weight {
Weight::from_ref_time(51_353_000 as u64)
.saturating_add(Weight::from_ref_time(14_000 as u64).saturating_mul(b as u64))
// Storage: BasicExample Dummy (r:1 w:1)
fn accumulate_dummy() -> Weight {
Weight::from_ref_time(18_000_000 as u64)
.saturating_add(RocksDbWeight::get().reads(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 {
Weight::from_ref_time(2_569_000 as u64)
// Standard Error: 0
.saturating_add(Weight::from_ref_time(4_000 as u64).saturating_mul(x as u64))
Weight::from_ref_time(0 as u64)
// Standard Error: 2
.saturating_add(Weight::from_ref_time(520 as u64).saturating_mul(x as u64))
}
}