mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 15:47:58 +00:00
Add benchmark extrinsic command (#11456)
* Benchmark extrinsic Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Reduce warmup and repeat Running this 1000 times with a full block takes ~33 minutes 🙈. Reducing it to ~3 minutes per default. Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Make ExistentialDeposit public Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Add 'bechmark extrinsic' command Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * fmt Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Add --list and cleanup Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Unrelated Clippy Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Clippy Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fix tests and doc Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Move implementations up + fmt Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Dont use parameter_types macro Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Cache to_lowercase() call The .to_lowercase() on the builder is actually not needes since its already documented to only return lower case. Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Spelling Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Use correct nightly for fmt... Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Rename ED Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fix compile Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Subtract block base weight Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fixes Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Use tmp folder for test This should already be the case since --dev is passed but somehow not... Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fix test Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
This commit is contained in:
committed by
GitHub
parent
3d95c270e0
commit
1843ae83ba
@@ -31,10 +31,11 @@ use serde::Serialize;
|
||||
use std::{fmt::Debug, sync::Arc};
|
||||
|
||||
use crate::{
|
||||
overhead::{
|
||||
bench::{Benchmark, BenchmarkParams, BenchmarkType},
|
||||
template::TemplateData,
|
||||
extrinsic::{
|
||||
bench::{Benchmark, BenchmarkParams as ExtrinsicBenchmarkParams},
|
||||
ExtrinsicBuilder,
|
||||
},
|
||||
overhead::template::TemplateData,
|
||||
shared::{HostInfoParams, WeightParams},
|
||||
};
|
||||
|
||||
@@ -63,20 +64,20 @@ pub struct OverheadParams {
|
||||
|
||||
#[allow(missing_docs)]
|
||||
#[clap(flatten)]
|
||||
pub bench: BenchmarkParams,
|
||||
pub bench: ExtrinsicBenchmarkParams,
|
||||
|
||||
#[allow(missing_docs)]
|
||||
#[clap(flatten)]
|
||||
pub hostinfo: HostInfoParams,
|
||||
}
|
||||
|
||||
/// Used by the benchmark to build signed extrinsics.
|
||||
///
|
||||
/// The built extrinsics only need to be valid in the first block
|
||||
/// who's parent block is the genesis block.
|
||||
pub trait ExtrinsicBuilder {
|
||||
/// Build a `System::remark` extrinsic.
|
||||
fn remark(&self, nonce: u32) -> std::result::Result<OpaqueExtrinsic, &'static str>;
|
||||
/// Type of a benchmark.
|
||||
#[derive(Serialize, Clone, PartialEq, Copy)]
|
||||
pub(crate) enum BenchmarkType {
|
||||
/// Measure the per-extrinsic execution overhead.
|
||||
Extrinsic,
|
||||
/// Measure the per-block execution overhead.
|
||||
Block,
|
||||
}
|
||||
|
||||
impl OverheadCmd {
|
||||
@@ -89,7 +90,7 @@ impl OverheadCmd {
|
||||
cfg: Configuration,
|
||||
client: Arc<C>,
|
||||
inherent_data: sp_inherents::InherentData,
|
||||
ext_builder: Arc<dyn ExtrinsicBuilder>,
|
||||
ext_builder: &dyn ExtrinsicBuilder,
|
||||
) -> Result<()>
|
||||
where
|
||||
Block: BlockT<Extrinsic = OpaqueExtrinsic>,
|
||||
@@ -97,18 +98,21 @@ impl OverheadCmd {
|
||||
C: BlockBuilderProvider<BA, Block, C> + ProvideRuntimeApi<Block>,
|
||||
C::Api: ApiExt<Block, StateBackend = BA::State> + BlockBuilderApi<Block>,
|
||||
{
|
||||
let bench = Benchmark::new(client, self.params.bench.clone(), inherent_data, ext_builder);
|
||||
if ext_builder.pallet() != "system" || ext_builder.extrinsic() != "remark" {
|
||||
return Err(format!("The extrinsic builder is required to build `System::Remark` extrinsics but builds `{}` extrinsics instead", ext_builder.name()).into());
|
||||
}
|
||||
let bench = Benchmark::new(client, self.params.bench.clone(), inherent_data);
|
||||
|
||||
// per-block execution overhead
|
||||
{
|
||||
let stats = bench.bench(BenchmarkType::Block)?;
|
||||
let stats = bench.bench_block()?;
|
||||
info!("Per-block execution overhead [ns]:\n{:?}", stats);
|
||||
let template = TemplateData::new(BenchmarkType::Block, &cfg, &self.params, &stats)?;
|
||||
template.write(&self.params.weight.weight_path)?;
|
||||
}
|
||||
// per-extrinsic execution overhead
|
||||
{
|
||||
let stats = bench.bench(BenchmarkType::Extrinsic)?;
|
||||
let stats = bench.bench_extrinsic(ext_builder)?;
|
||||
info!("Per-extrinsic execution overhead [ns]:\n{:?}", stats);
|
||||
let template = TemplateData::new(BenchmarkType::Extrinsic, &cfg, &self.params, &stats)?;
|
||||
template.write(&self.params.weight.weight_path)?;
|
||||
@@ -118,6 +122,24 @@ impl OverheadCmd {
|
||||
}
|
||||
}
|
||||
|
||||
impl BenchmarkType {
|
||||
/// Short name of the benchmark type.
|
||||
pub(crate) fn short_name(&self) -> &'static str {
|
||||
match self {
|
||||
Self::Extrinsic => "extrinsic",
|
||||
Self::Block => "block",
|
||||
}
|
||||
}
|
||||
|
||||
/// Long name of the benchmark type.
|
||||
pub(crate) fn long_name(&self) -> &'static str {
|
||||
match self {
|
||||
Self::Extrinsic => "ExtrinsicBase",
|
||||
Self::Block => "BlockExecution",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Boilerplate
|
||||
impl CliConfiguration for OverheadCmd {
|
||||
fn shared_params(&self) -> &SharedParams {
|
||||
|
||||
Reference in New Issue
Block a user