Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Beefy: add benchmarks for report_fork_voting() #5188

Merged
merged 21 commits into from
Aug 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
0ae1e63
Fix report_future_block_voting weight
serban300 Jul 25, 2024
15a18ec
Add empty benchmarks for pallet-beefy-mmr
serban300 Jul 26, 2024
91b34da
[MMR] Make offchain set/get work in benchmarks
serban300 Jul 29, 2024
8e0ea6f
Ancestry proof benchmarks
serban300 Jul 26, 2024
e6599ea
Compute report_fork_voting() weight
serban300 Jul 30, 2024
3f8272e
Remove impl_benchmark_test_suite!() for the MMR pallet
serban300 Jul 30, 2024
928201f
Update TODO comment
serban300 Aug 13, 2024
0ec5164
Merge branch 'master' into beefy-equivocation-runtime
serban300 Aug 13, 2024
efad090
Generate weights locally
serban300 Aug 13, 2024
e1a1140
Add prdoc
serban300 Aug 13, 2024
9270d80
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Aug 13, 2024
be8a25a
".git/.scripts/commands/bench/bench.sh" --subcommand=pallet --runtime…
Aug 13, 2024
4a71e72
Add pallet_beefy_mmr benchmarks to kitchensink
serban300 Aug 13, 2024
d1fcb6e
bot bench substrate-pallet --pallet=pallet_beefy_mmr
serban300 Aug 13, 2024
6b17188
Revert "Add pallet_beefy_mmr benchmarks to kitchensink"
serban300 Aug 13, 2024
9fab84a
Call local_storage_set only in offline context
serban300 Aug 13, 2024
1454f87
improvements
serban300 Aug 13, 2024
4d525a1
Update prdoc
serban300 Aug 14, 2024
e044ae4
Merge branch 'master' into beefy-equivocation-runtime
serban300 Aug 14, 2024
c7149cc
Remove is_offchain_db_ext_available()
serban300 Aug 14, 2024
87e474e
Merge remote-tracking branch 'upstream/master' into beefy-equivocatio…
serban300 Aug 14, 2024
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
925 changes: 413 additions & 512 deletions Cargo.lock

Large diffs are not rendered by default.

82 changes: 41 additions & 41 deletions polkadot/runtime/rococo/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1335,6 +1335,7 @@ impl pallet_beefy_mmr::Config for Runtime {
type BeefyAuthorityToMerkleLeaf = pallet_beefy_mmr::BeefyEcdsaToEthereum;
type LeafExtra = H256;
type BeefyDataProvider = ParaHeadsRootProvider;
type WeightInfo = weights::pallet_beefy_mmr::WeightInfo<Runtime>;
}

impl paras_sudo_wrapper::Config for Runtime {}
Expand Down Expand Up @@ -1629,47 +1630,45 @@ pub mod migrations {

/// Unreleased migrations. Add new ones here:
pub type Unreleased = (
pallet_society::migrations::MigrateToV2<Runtime, (), ()>,
parachains_configuration::migration::v7::MigrateToV7<Runtime>,
assigned_slots::migration::v1::MigrateToV1<Runtime>,
parachains_scheduler::migration::MigrateV1ToV2<Runtime>,
parachains_configuration::migration::v8::MigrateToV8<Runtime>,
parachains_configuration::migration::v9::MigrateToV9<Runtime>,
paras_registrar::migration::MigrateToV1<Runtime, ()>,
pallet_referenda::migration::v1::MigrateV0ToV1<Runtime, ()>,
pallet_referenda::migration::v1::MigrateV0ToV1<Runtime, pallet_referenda::Instance2>,

// Unlock & unreserve Gov1 funds

pallet_elections_phragmen::migrations::unlock_and_unreserve_all_funds::UnlockAndUnreserveAllFunds<UnlockConfig>,
pallet_democracy::migrations::unlock_and_unreserve_all_funds::UnlockAndUnreserveAllFunds<UnlockConfig>,
pallet_tips::migrations::unreserve_deposits::UnreserveDeposits<UnlockConfig, ()>,

// Delete all Gov v1 pallet storage key/values.

frame_support::migrations::RemovePallet<DemocracyPalletName, <Runtime as frame_system::Config>::DbWeight>,
frame_support::migrations::RemovePallet<CouncilPalletName, <Runtime as frame_system::Config>::DbWeight>,
frame_support::migrations::RemovePallet<TechnicalCommitteePalletName, <Runtime as frame_system::Config>::DbWeight>,
frame_support::migrations::RemovePallet<PhragmenElectionPalletName, <Runtime as frame_system::Config>::DbWeight>,
frame_support::migrations::RemovePallet<TechnicalMembershipPalletName, <Runtime as frame_system::Config>::DbWeight>,
frame_support::migrations::RemovePallet<TipsPalletName, <Runtime as frame_system::Config>::DbWeight>,

pallet_grandpa::migrations::MigrateV4ToV5<Runtime>,
parachains_configuration::migration::v10::MigrateToV10<Runtime>,

// Migrate Identity pallet for Usernames
pallet_identity::migration::versioned::V0ToV1<Runtime, IDENTITY_MIGRATION_KEY_LIMIT>,
parachains_configuration::migration::v11::MigrateToV11<Runtime>,
// This needs to come after the `parachains_configuration` above as we are reading the configuration.
coretime::migration::MigrateToCoretime<Runtime, crate::xcm_config::XcmRouter, GetLegacyLeaseImpl>,
parachains_configuration::migration::v12::MigrateToV12<Runtime>,
parachains_on_demand::migration::MigrateV0ToV1<Runtime>,

// permanent
pallet_xcm::migration::MigrateToLatestXcmVersion<Runtime>,

parachains_inclusion::migration::MigrateToV1<Runtime>,
);
pallet_society::migrations::MigrateToV2<Runtime, (), ()>,
parachains_configuration::migration::v7::MigrateToV7<Runtime>,
assigned_slots::migration::v1::MigrateToV1<Runtime>,
parachains_scheduler::migration::MigrateV1ToV2<Runtime>,
parachains_configuration::migration::v8::MigrateToV8<Runtime>,
parachains_configuration::migration::v9::MigrateToV9<Runtime>,
paras_registrar::migration::MigrateToV1<Runtime, ()>,
pallet_referenda::migration::v1::MigrateV0ToV1<Runtime, ()>,
pallet_referenda::migration::v1::MigrateV0ToV1<Runtime, pallet_referenda::Instance2>,

// Unlock & unreserve Gov1 funds

pallet_elections_phragmen::migrations::unlock_and_unreserve_all_funds::UnlockAndUnreserveAllFunds<UnlockConfig>,
pallet_democracy::migrations::unlock_and_unreserve_all_funds::UnlockAndUnreserveAllFunds<UnlockConfig>,
pallet_tips::migrations::unreserve_deposits::UnreserveDeposits<UnlockConfig, ()>,

// Delete all Gov v1 pallet storage key/values.

frame_support::migrations::RemovePallet<DemocracyPalletName, <Runtime as frame_system::Config>::DbWeight>,
frame_support::migrations::RemovePallet<CouncilPalletName, <Runtime as frame_system::Config>::DbWeight>,
frame_support::migrations::RemovePallet<TechnicalCommitteePalletName, <Runtime as frame_system::Config>::DbWeight>,
frame_support::migrations::RemovePallet<PhragmenElectionPalletName, <Runtime as frame_system::Config>::DbWeight>,
frame_support::migrations::RemovePallet<TechnicalMembershipPalletName, <Runtime as frame_system::Config>::DbWeight>,
frame_support::migrations::RemovePallet<TipsPalletName, <Runtime as frame_system::Config>::DbWeight>,
pallet_grandpa::migrations::MigrateV4ToV5<Runtime>,
parachains_configuration::migration::v10::MigrateToV10<Runtime>,

// Migrate Identity pallet for Usernames
pallet_identity::migration::versioned::V0ToV1<Runtime, IDENTITY_MIGRATION_KEY_LIMIT>,
parachains_configuration::migration::v11::MigrateToV11<Runtime>,
// This needs to come after the `parachains_configuration` above as we are reading the configuration.
coretime::migration::MigrateToCoretime<Runtime, crate::xcm_config::XcmRouter, GetLegacyLeaseImpl>,
parachains_configuration::migration::v12::MigrateToV12<Runtime>,
parachains_on_demand::migration::MigrateV0ToV1<Runtime>,

// permanent
pallet_xcm::migration::MigrateToLatestXcmVersion<Runtime>,
parachains_inclusion::migration::MigrateToV1<Runtime>,
);
}

/// Executive: handles dispatch to the various modules.
Expand Down Expand Up @@ -1735,6 +1734,7 @@ mod benches {
// Substrate
[pallet_balances, Balances]
[pallet_balances, NisCounterpartBalances]
[pallet_beefy_mmr, MmrLeaf]
[frame_benchmarking::baseline, Baseline::<Runtime>]
[pallet_bounties, Bounties]
[pallet_child_bounties, ChildBounties]
Expand Down
1 change: 1 addition & 0 deletions polkadot/runtime/rococo/src/weights/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ pub mod frame_system;
pub mod pallet_asset_rate;
pub mod pallet_balances_balances;
pub mod pallet_balances_nis_counterpart_balances;
pub mod pallet_beefy_mmr;
pub mod pallet_bounties;
pub mod pallet_child_bounties;
pub mod pallet_conviction_voting;
Expand Down
89 changes: 89 additions & 0 deletions polkadot/runtime/rococo/src/weights/pallet_beefy_mmr.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
// Copyright (C) Parity Technologies (UK) Ltd.
// This file is part of Polkadot.

// Polkadot is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Polkadot is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.

//! Autogenerated weights for `pallet_beefy_mmr`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0
//! DATE: 2024-08-13, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `runner-696hpswk-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("rococo-dev")`, DB CACHE: 1024

// Executed Command:
// target/production/polkadot
// benchmark
// pallet
// --steps=50
// --repeat=20
// --extrinsic=*
// --wasm-execution=compiled
// --heap-pages=4096
// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json
// --pallet=pallet_beefy_mmr
// --chain=rococo-dev
// --header=./polkadot/file_header.txt
// --output=./polkadot/runtime/rococo/src/weights/

#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
#![allow(missing_docs)]

use frame_support::{traits::Get, weights::Weight};
use core::marker::PhantomData;

/// Weight functions for `pallet_beefy_mmr`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_beefy_mmr::WeightInfo for WeightInfo<T> {
/// Storage: `System::BlockHash` (r:1 w:0)
/// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`)
fn extract_validation_context() -> Weight {
// Proof Size summary in bytes:
// Measured: `92`
// Estimated: `3509`
// Minimum execution time: 7_116_000 picoseconds.
Weight::from_parts(7_343_000, 0)
.saturating_add(Weight::from_parts(0, 3509))
.saturating_add(T::DbWeight::get().reads(1))
}
/// Storage: `Mmr::Nodes` (r:1 w:0)
/// Proof: `Mmr::Nodes` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn read_peak() -> Weight {
// Proof Size summary in bytes:
// Measured: `234`
// Estimated: `3505`
// Minimum execution time: 5_652_000 picoseconds.
Weight::from_parts(5_963_000, 0)
.saturating_add(Weight::from_parts(0, 3505))
.saturating_add(T::DbWeight::get().reads(1))
}
/// Storage: `Mmr::RootHash` (r:1 w:0)
/// Proof: `Mmr::RootHash` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`)
/// Storage: `Mmr::NumberOfLeaves` (r:1 w:0)
/// Proof: `Mmr::NumberOfLeaves` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// The range of component `n` is `[2, 512]`.
fn n_items_proof_is_non_canonical(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `226`
// Estimated: `1517`
// Minimum execution time: 11_953_000 picoseconds.
Weight::from_parts(15_978_891, 0)
.saturating_add(Weight::from_parts(0, 1517))
// Standard Error: 1_780
.saturating_add(Weight::from_parts(1_480_582, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(2))
}
}
18 changes: 10 additions & 8 deletions polkadot/runtime/westend/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,7 @@ impl pallet_beefy_mmr::Config for Runtime {
type BeefyAuthorityToMerkleLeaf = pallet_beefy_mmr::BeefyEcdsaToEthereum;
type LeafExtra = H256;
type BeefyDataProvider = ParaHeadsRootProvider;
type WeightInfo = weights::pallet_beefy_mmr::WeightInfo<Runtime>;
}

parameter_types! {
Expand Down Expand Up @@ -601,20 +602,20 @@ impl pallet_election_provider_multi_phase::MinerConfig for Runtime {
type MaxWeight = OffchainSolutionWeightLimit;
type Solution = NposCompactSolution16;
type MaxVotesPerVoter = <
<Self as pallet_election_provider_multi_phase::Config>::DataProvider
as
frame_election_provider_support::ElectionDataProvider
>::MaxVotesPerVoter;
<Self as pallet_election_provider_multi_phase::Config>::DataProvider
as
frame_election_provider_support::ElectionDataProvider
>::MaxVotesPerVoter;
type MaxWinners = MaxActiveValidators;

// The unsigned submissions have to respect the weight of the submit_unsigned call, thus their
// weight estimate function is wired to this call's weight.
fn solution_weight(v: u32, t: u32, a: u32, d: u32) -> Weight {
<
<Self as pallet_election_provider_multi_phase::Config>::WeightInfo
as
pallet_election_provider_multi_phase::WeightInfo
>::submit_unsigned(v, t, a, d)
<Self as pallet_election_provider_multi_phase::Config>::WeightInfo
as
pallet_election_provider_multi_phase::WeightInfo
>::submit_unsigned(v, t, a, d)
}
}

Expand Down Expand Up @@ -1847,6 +1848,7 @@ mod benches {
// Substrate
[pallet_bags_list, VoterList]
[pallet_balances, Balances]
[pallet_beefy_mmr, BeefyMmrLeaf]
[pallet_conviction_voting, ConvictionVoting]
[pallet_election_provider_multi_phase, ElectionProviderMultiPhase]
[frame_election_provider_support, ElectionProviderBench::<Runtime>]
Expand Down
1 change: 1 addition & 0 deletions polkadot/runtime/westend/src/weights/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ pub mod frame_system;
pub mod pallet_asset_rate;
pub mod pallet_bags_list;
pub mod pallet_balances;
pub mod pallet_beefy_mmr;
pub mod pallet_conviction_voting;
pub mod pallet_election_provider_multi_phase;
pub mod pallet_fast_unstake;
Expand Down
89 changes: 89 additions & 0 deletions polkadot/runtime/westend/src/weights/pallet_beefy_mmr.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
// Copyright (C) Parity Technologies (UK) Ltd.
// This file is part of Polkadot.

// Polkadot is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Polkadot is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.

//! Autogenerated weights for `pallet_beefy_mmr`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 32.0.0
//! DATE: 2024-08-13, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `runner-696hpswk-project-674-concurrent-0`, CPU: `Intel(R) Xeon(R) CPU @ 2.60GHz`
//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("westend-dev")`, DB CACHE: 1024

// Executed Command:
// target/production/polkadot
// benchmark
// pallet
// --steps=50
// --repeat=20
// --extrinsic=*
// --wasm-execution=compiled
// --heap-pages=4096
// --json-file=/builds/parity/mirrors/polkadot-sdk/.git/.artifacts/bench.json
// --pallet=pallet_beefy_mmr
// --chain=westend-dev
// --header=./polkadot/file_header.txt
// --output=./polkadot/runtime/westend/src/weights/

#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
#![allow(missing_docs)]

use frame_support::{traits::Get, weights::Weight};
use core::marker::PhantomData;

/// Weight functions for `pallet_beefy_mmr`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_beefy_mmr::WeightInfo for WeightInfo<T> {
/// Storage: `System::BlockHash` (r:1 w:0)
/// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`)
fn extract_validation_context() -> Weight {
// Proof Size summary in bytes:
// Measured: `92`
// Estimated: `3509`
// Minimum execution time: 7_850_000 picoseconds.
Weight::from_parts(8_169_000, 0)
.saturating_add(Weight::from_parts(0, 3509))
.saturating_add(T::DbWeight::get().reads(1))
}
/// Storage: `Mmr::Nodes` (r:1 w:0)
/// Proof: `Mmr::Nodes` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn read_peak() -> Weight {
// Proof Size summary in bytes:
// Measured: `201`
// Estimated: `3505`
// Minimum execution time: 6_852_000 picoseconds.
Weight::from_parts(7_448_000, 0)
.saturating_add(Weight::from_parts(0, 3505))
.saturating_add(T::DbWeight::get().reads(1))
}
/// Storage: `Mmr::RootHash` (r:1 w:0)
/// Proof: `Mmr::RootHash` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`)
/// Storage: `Mmr::NumberOfLeaves` (r:1 w:0)
/// Proof: `Mmr::NumberOfLeaves` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// The range of component `n` is `[2, 512]`.
fn n_items_proof_is_non_canonical(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `193`
// Estimated: `1517`
// Minimum execution time: 12_860_000 picoseconds.
Weight::from_parts(17_158_162, 0)
.saturating_add(Weight::from_parts(0, 1517))
// Standard Error: 1_732
.saturating_add(Weight::from_parts(1_489_410, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(2))
}
}
32 changes: 32 additions & 0 deletions prdoc/pr_5188.prdoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Schema: Polkadot SDK PRDoc Schema (prdoc) v1.0.0
# See doc at https://raw.githubusercontent.com/paritytech/polkadot-sdk/master/prdoc/schema_user.json

title: Added benchmarks for BEEFY fork voting

doc:
- audience:
- Runtime Dev
- Runtime User
description: |
This PR adds benchmarks for `report_fork_voting` and `report_future_voting` extrinsics to `pallet-beefy`.
`report_future_voting` can be called now. `report_fork_voting` can't be called yet. Even though we have added
the formula for computing its weight, we still use `Weight::MAX`. We will set the proper weight in a future PR.
In order to do this we need to also check that the ancestry proof is optimal.
The PR adds a `WeightInfo` associated trait to the `pallet_beefy_mmr::Config` and defines benchmarks for
`pallet_beefy_mmr`.

crates:
- name: pallet-mmr
bump: minor
- name: sp-mmr-primitives
bump: minor
- name: sp-consensus-beefy
bump: minor
- name: rococo-runtime
bump: minor
- name: pallet-beefy
bump: major
- name: pallet-beefy-mmr
bump: major
- name: westend-runtime
bump: minor
2 changes: 2 additions & 0 deletions substrate/bin/node/runtime/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1612,6 +1612,7 @@ impl pallet_beefy_mmr::Config for Runtime {
type BeefyAuthorityToMerkleLeaf = pallet_beefy_mmr::BeefyEcdsaToEthereum;
type LeafExtra = Vec<u8>;
type BeefyDataProvider = ();
type WeightInfo = ();
}

parameter_types! {
Expand Down Expand Up @@ -2585,6 +2586,7 @@ mod benches {
[pallet_babe, Babe]
[pallet_bags_list, VoterList]
[pallet_balances, Balances]
[pallet_beefy_mmr, MmrLeaf]
[pallet_bounties, Bounties]
[pallet_broker, Broker]
[pallet_child_bounties, ChildBounties]
Expand Down
Loading
Loading