Skip to content

Commit

Permalink
Add baseline benchmark for sr25519 verification (paritytech#10414)
Browse files Browse the repository at this point in the history
* Add baseline benchmark for sr25519 verification

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=frame_benchmarking --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/benchmarking/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* Register keystore for correct test externalities

* Update frame/benchmarking/src/baseline.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* fix build

Co-authored-by: Parity Bot <admin@parity.io>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
  • Loading branch information
3 people authored and grishasobol committed Mar 28, 2022
1 parent 499b1dc commit e305cf0
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 22 deletions.
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions frame/benchmarking/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,15 @@ sp-runtime-interface = { version = "4.0.0-dev", path = "../../primitives/runtime
sp-runtime = { version = "4.0.0-dev", path = "../../primitives/runtime", default-features = false }
sp-std = { version = "4.0.0-dev", path = "../../primitives/std", default-features = false }
sp-io = { version = "4.0.0-dev", path = "../../primitives/io", default-features = false }
sp-application-crypto = { version = "4.0.0-dev", path = "../../primitives/application-crypto", default-features = false }
sp-storage = { version = "4.0.0-dev", path = "../../primitives/storage", default-features = false }
frame-support = { version = "4.0.0-dev", default-features = false, path = "../support" }
frame-system = { version = "4.0.0-dev", default-features = false, path = "../system" }
log = { version = "0.4.14", default-features = false }

[dev-dependencies]
hex-literal = "0.3.4"
sp-keystore = { version = "0.10.0-dev", path = "../../primitives/keystore" }

[features]
default = ["std"]
Expand Down
41 changes: 39 additions & 2 deletions frame/benchmarking/src/baseline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,23 @@
use crate::benchmarks;
use codec::Encode;
use frame_system::Pallet as System;
use sp_runtime::traits::Hash;
use sp_application_crypto::KeyTypeId;
use sp_runtime::{
traits::{AppVerify, Hash},
RuntimeAppPublic,
};
use sp_std::prelude::*;

pub const TEST_KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"test");

mod app_sr25519 {
use super::TEST_KEY_TYPE_ID;
use sp_application_crypto::{app_crypto, sr25519};
app_crypto!(sr25519, TEST_KEY_TYPE_ID);
}

type SignerId = app_sr25519::Public;

pub struct Pallet<T: Config>(System<T>);
pub trait Config: frame_system::Config {}

Expand Down Expand Up @@ -75,6 +89,23 @@ benchmarks! {
assert!(hash != T::Hash::default());
}

sr25519_verification {
let i in 1 .. 100;

let public = SignerId::generate_pair(None);

let sigs_count: u8 = i.try_into().unwrap();
let msg_and_sigs: Vec<_> = (0..sigs_count).map(|j| {
let msg = vec![j, j];
(msg.clone(), public.sign(&msg).unwrap())
})
.collect();
}: {
msg_and_sigs.iter().for_each(|(msg, sig)| {
assert!(sig.verify(&msg[..], &public));
});
}

#[skip_meta]
storage_read {
let i in 0 .. 1_000;
Expand Down Expand Up @@ -169,7 +200,13 @@ pub mod mock {
impl super::Config for Test {}

pub fn new_test_ext() -> sp_io::TestExternalities {
use sp_keystore::{testing::KeyStore, KeystoreExt, SyncCryptoStorePtr};
use sp_std::sync::Arc;

let t = frame_system::GenesisConfig::default().build_storage::<Test>().unwrap();
sp_io::TestExternalities::new(t)
let mut ext = sp_io::TestExternalities::new(t);
ext.register_extension(KeystoreExt(Arc::new(KeyStore::new()) as SyncCryptoStorePtr));

ext
}
}
54 changes: 34 additions & 20 deletions frame/benchmarking/src/weights.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
//! Autogenerated weights for frame_benchmarking
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
//! DATE: 2021-10-30, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! DATE: 2021-12-02, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128

// Executed Command:
Expand All @@ -35,7 +35,6 @@
// --output=./frame/benchmarking/src/weights.rs
// --template=./.maintain/frame-weight-template.hbs


#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
Expand All @@ -50,6 +49,7 @@ pub trait WeightInfo {
fn multiplication(i: u32, ) -> Weight;
fn division(i: u32, ) -> Weight;
fn hashing(i: u32, ) -> Weight;
fn sr25519_verification(i: u32, ) -> Weight;
fn storage_read(i: u32, ) -> Weight;
fn storage_write(i: u32, ) -> Weight;
}
Expand All @@ -58,65 +58,79 @@ pub trait WeightInfo {
pub struct SubstrateWeight<T>(PhantomData<T>);
impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
fn addition(_i: u32, ) -> Weight {
(337_000 as Weight)
(284_000 as Weight)
}
fn subtraction(_i: u32, ) -> Weight {
(343_000 as Weight)
(279_000 as Weight)
}
fn multiplication(_i: u32, ) -> Weight {
(340_000 as Weight)
(278_000 as Weight)
}
fn division(_i: u32, ) -> Weight {
(346_000 as Weight)
(274_000 as Weight)
}
fn hashing(i: u32, ) -> Weight {
(33_441_957_000 as Weight)
// Standard Error: 535_000
.saturating_add((363_000 as Weight).saturating_mul(i as Weight))
}
fn hashing(_i: u32, ) -> Weight {
(35_449_143_000 as Weight)
fn sr25519_verification(i: u32, ) -> Weight {
(26_000 as Weight)
// Standard Error: 14_000
.saturating_add((48_151_000 as Weight).saturating_mul(i as Weight))
}
// Storage: Skipped Metadata (r:0 w:0)
fn storage_read(i: u32, ) -> Weight {
(0 as Weight)
// Standard Error: 3_000
.saturating_add((2_851_000 as Weight).saturating_mul(i as Weight))
// Standard Error: 4_000
.saturating_add((2_694_000 as Weight).saturating_mul(i as Weight))
.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight)))
}
// Storage: Skipped Metadata (r:0 w:0)
fn storage_write(i: u32, ) -> Weight {
(0 as Weight)
// Standard Error: 0
.saturating_add((662_000 as Weight).saturating_mul(i as Weight))
.saturating_add((606_000 as Weight).saturating_mul(i as Weight))
.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight)))
}
}

// For backwards compatibility and tests
impl WeightInfo for () {
fn addition(_i: u32, ) -> Weight {
(337_000 as Weight)
(284_000 as Weight)
}
fn subtraction(_i: u32, ) -> Weight {
(343_000 as Weight)
(279_000 as Weight)
}
fn multiplication(_i: u32, ) -> Weight {
(340_000 as Weight)
(278_000 as Weight)
}
fn division(_i: u32, ) -> Weight {
(346_000 as Weight)
(274_000 as Weight)
}
fn hashing(i: u32, ) -> Weight {
(33_441_957_000 as Weight)
// Standard Error: 535_000
.saturating_add((363_000 as Weight).saturating_mul(i as Weight))
}
fn hashing(_i: u32, ) -> Weight {
(35_449_143_000 as Weight)
fn sr25519_verification(i: u32, ) -> Weight {
(26_000 as Weight)
// Standard Error: 14_000
.saturating_add((48_151_000 as Weight).saturating_mul(i as Weight))
}
// Storage: Skipped Metadata (r:0 w:0)
fn storage_read(i: u32, ) -> Weight {
(0 as Weight)
// Standard Error: 3_000
.saturating_add((2_851_000 as Weight).saturating_mul(i as Weight))
// Standard Error: 4_000
.saturating_add((2_694_000 as Weight).saturating_mul(i as Weight))
.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(i as Weight)))
}
// Storage: Skipped Metadata (r:0 w:0)
fn storage_write(i: u32, ) -> Weight {
(0 as Weight)
// Standard Error: 0
.saturating_add((662_000 as Weight).saturating_mul(i as Weight))
.saturating_add((606_000 as Weight).saturating_mul(i as Weight))
.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(i as Weight)))
}
}

0 comments on commit e305cf0

Please sign in to comment.