Add baseline benchmark for sr25519 verification (#10414)

* 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>
This commit is contained in:
Zeke Mostov
2021-12-06 13:31:16 -08:00
committed by GitHub
parent b5b3e827ab
commit e65caa56d4
4 changed files with 77 additions and 22 deletions
+39 -2
View File
@@ -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 {}
@@ -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;
@@ -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
}
}
+34 -20
View File
@@ -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:
@@ -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)]
@@ -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;
}
@@ -58,32 +58,39 @@ 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 {
(35_449_143_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 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)))
}
}
@@ -91,32 +98,39 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
// 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 {
(35_449_143_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 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)))
}
}