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

Commit

Permalink
WeightInfo for ImOnline (#7128)
Browse files Browse the repository at this point in the history
* Add WeightInfo, not final weights

* benchmark machine weights
  • Loading branch information
shawntabrizi authored and bkchr committed Sep 18, 2020
1 parent 86026fc commit da02c0b
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 20 deletions.
2 changes: 1 addition & 1 deletion bin/node/runtime/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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! {
Expand Down
1 change: 1 addition & 0 deletions bin/node/runtime/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_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;
Expand Down
34 changes: 34 additions & 0 deletions bin/node/runtime/src/weights/pallet_im_online.rs
Original file line number Diff line number Diff line change
@@ -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))
}
}
2 changes: 2 additions & 0 deletions frame/im-online/src/benchmarking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,14 @@ pub fn create_heartbeat<T: Trait>(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::<T>(k, e)?;
}: _(RawOrigin::None, input_heartbeat, signature)

#[extra]
validate_unsigned {
let k in 1 .. MAX_KEYS;
let e in 1 .. MAX_EXTERNAL_ADDRESSES;
Expand Down
33 changes: 33 additions & 0 deletions frame/im-online/src/default_weight.rs
Original file line number Diff line number Diff line change
@@ -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))
}
}
28 changes: 9 additions & 19 deletions frame/im-online/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
mod mock;
mod tests;
mod benchmarking;
mod default_weight;

use sp_application_crypto::RuntimeAppPublic;
use codec::{Encode, Decode};
Expand Down Expand Up @@ -227,17 +228,9 @@ pub struct Heartbeat<BlockNumber>
}

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<Call<Self>> + pallet_session::historical::Trait {
/// The identifier type for an authority.
type AuthorityId: Member + Parameter + RuntimeAppPublic + Default + Ord;
Expand Down Expand Up @@ -333,23 +326,20 @@ decl_module! {
fn deposit_event() = default;

/// # <weight>
/// - 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`
/// # </weight>
// 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 = <T as Trait>::WeightInfo::validate_unsigned_and_then_heartbeat(
heartbeat.validators_len as u32,
heartbeat.network_state.external_addresses.len() as u32,
)]
fn heartbeat(
origin,
heartbeat: Heartbeat<T::BlockNumber>,
Expand Down

0 comments on commit da02c0b

Please sign in to comment.