From 0a90d5f455d47265db0e5bcece07c675a5e6a898 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Thu, 17 Sep 2020 15:40:51 +0200 Subject: [PATCH] WeightInfo for ImOnline (#7128) * Add WeightInfo, not final weights * benchmark machine weights --- bin/node/runtime/src/lib.rs | 2 +- bin/node/runtime/src/weights/mod.rs | 1 + .../runtime/src/weights/pallet_im_online.rs | 34 +++++++++++++++++++ frame/im-online/src/benchmarking.rs | 2 ++ frame/im-online/src/default_weight.rs | 33 ++++++++++++++++++ frame/im-online/src/lib.rs | 28 +++++---------- 6 files changed, 80 insertions(+), 20 deletions(-) create mode 100644 bin/node/runtime/src/weights/pallet_im_online.rs create mode 100644 frame/im-online/src/default_weight.rs diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 5737fcfd2e2f1..b543227200750 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -736,7 +736,7 @@ impl pallet_im_online::Trait for Runtime { type SessionDuration = SessionDuration; type ReportUnresponsiveness = Offences; type UnsignedPriority = ImOnlineUnsignedPriority; - type WeightInfo = (); + type WeightInfo = weights::pallet_im_online::WeightInfo; } parameter_types! { diff --git a/bin/node/runtime/src/weights/mod.rs b/bin/node/runtime/src/weights/mod.rs index 86cab773b18e3..7fbef9c0953d1 100644 --- a/bin/node/runtime/src/weights/mod.rs +++ b/bin/node/runtime/src/weights/mod.rs @@ -19,6 +19,7 @@ pub mod frame_system; pub mod pallet_balances; pub mod pallet_collective; pub mod pallet_democracy; +pub mod pallet_im_online; pub mod pallet_proxy; pub mod pallet_timestamp; pub mod pallet_utility; diff --git a/bin/node/runtime/src/weights/pallet_im_online.rs b/bin/node/runtime/src/weights/pallet_im_online.rs new file mode 100644 index 0000000000000..25daff6a6e18f --- /dev/null +++ b/bin/node/runtime/src/weights/pallet_im_online.rs @@ -0,0 +1,34 @@ +// This file is part of Substrate. + +// Copyright (C) 2020 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0-rc6 + +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::weights::{Weight, constants::RocksDbWeight as DbWeight}; + +pub struct WeightInfo; +impl pallet_im_online::WeightInfo for WeightInfo { + fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight { + (139830000 as Weight) + .saturating_add((211000 as Weight).saturating_mul(k as Weight)) + .saturating_add((654000 as Weight).saturating_mul(e as Weight)) + .saturating_add(DbWeight::get().reads(4 as Weight)) + .saturating_add(DbWeight::get().writes(1 as Weight)) + } +} diff --git a/frame/im-online/src/benchmarking.rs b/frame/im-online/src/benchmarking.rs index 55f294505602e..b92be023ce480 100644 --- a/frame/im-online/src/benchmarking.rs +++ b/frame/im-online/src/benchmarking.rs @@ -65,12 +65,14 @@ pub fn create_heartbeat(k: u32, e: u32) -> benchmarks! { _{ } + #[extra] heartbeat { let k in 1 .. MAX_KEYS; let e in 1 .. MAX_EXTERNAL_ADDRESSES; let (input_heartbeat, signature) = create_heartbeat::(k, e)?; }: _(RawOrigin::None, input_heartbeat, signature) + #[extra] validate_unsigned { let k in 1 .. MAX_KEYS; let e in 1 .. MAX_EXTERNAL_ADDRESSES; diff --git a/frame/im-online/src/default_weight.rs b/frame/im-online/src/default_weight.rs new file mode 100644 index 0000000000000..e6efb42f2e3d8 --- /dev/null +++ b/frame/im-online/src/default_weight.rs @@ -0,0 +1,33 @@ +// This file is part of Substrate. + +// Copyright (C) 2020 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0-rc6 + +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::weights::{Weight, constants::RocksDbWeight as DbWeight}; + +impl crate::WeightInfo for () { + fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight { + (139830000 as Weight) + .saturating_add((211000 as Weight).saturating_mul(k as Weight)) + .saturating_add((654000 as Weight).saturating_mul(e as Weight)) + .saturating_add(DbWeight::get().reads(4 as Weight)) + .saturating_add(DbWeight::get().writes(1 as Weight)) + } +} diff --git a/frame/im-online/src/lib.rs b/frame/im-online/src/lib.rs index 7856ecfd5aa46..ef9c6b9182af6 100644 --- a/frame/im-online/src/lib.rs +++ b/frame/im-online/src/lib.rs @@ -72,6 +72,7 @@ mod mock; mod tests; mod benchmarking; +mod default_weight; use sp_application_crypto::RuntimeAppPublic; use codec::{Encode, Decode}; @@ -227,17 +228,9 @@ pub struct Heartbeat } pub trait WeightInfo { - fn heartbeat(k: u32, e: u32, ) -> Weight; - fn validate_unsigned(k: u32, e: u32, ) -> Weight; fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight; } -impl WeightInfo for () { - fn heartbeat(_k: u32, _e: u32, ) -> Weight { 1_000_000_000 } - fn validate_unsigned(_k: u32, _e: u32, ) -> Weight { 1_000_000_000 } - fn validate_unsigned_and_then_heartbeat(_k: u32, _e: u32, ) -> Weight { 1_000_000_000 } -} - pub trait Trait: SendTransactionTypes> + pallet_session::historical::Trait { /// The identifier type for an authority. type AuthorityId: Member + Parameter + RuntimeAppPublic + Default + Ord; @@ -333,23 +326,20 @@ decl_module! { fn deposit_event() = default; /// # - /// - Complexity: `O(K + E)` where K is length of `Keys` and E is length of - /// `Heartbeat.network_state.external_address` - /// + /// - Complexity: `O(K + E)` where K is length of `Keys` (heartbeat.validators_len) + /// and E is length of `heartbeat.network_state.external_address` /// - `O(K)`: decoding of length `K` /// - `O(E)`: decoding/encoding of length `E` /// - DbReads: pallet_session `Validators`, pallet_session `CurrentIndex`, `Keys`, /// `ReceivedHeartbeats` /// - DbWrites: `ReceivedHeartbeats` /// # - // NOTE: the weight include cost of validate_unsigned as it is part of the cost to import - // block with such an extrinsic. - #[weight = (310_000_000 + T::DbWeight::get().reads_writes(4, 1)) - .saturating_add(750_000.saturating_mul(heartbeat.validators_len as Weight)) - .saturating_add( - 1_200_000.saturating_mul(heartbeat.network_state.external_addresses.len() as Weight) - ) - ] + // NOTE: the weight includes the cost of validate_unsigned as it is part of the cost to + // import block with such an extrinsic. + #[weight = ::WeightInfo::validate_unsigned_and_then_heartbeat( + heartbeat.validators_len as u32, + heartbeat.network_state.external_addresses.len() as u32, + )] fn heartbeat( origin, heartbeat: Heartbeat,