mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-27 10:27:59 +00:00
Benchmarks Writer CLI (#6567)
* initial mockup * add and wipe * track writes * start to add to pipeline * return all reads/writes * Log reads and writes from bench db * causes panic * Allow multiple commits * commit before ending benchmark * doesn't work??? * fix * Update lib.rs * switch to struct for `BenchmarkResults` * add to output * fix test * line width * @kianenigma review * Add Whitelist to DB Tracking in Benchmarks Pipeline (#6405) * hardcoded whitelist * Add whitelist to pipeline * Remove whitelist pipeline from CLI, add to runtime * clean-up unused db initialized whitelist * Add regression analysis to DB Tracking (#6475) * Add selector * add tests * debug formatter for easy formula * initial idea * use all benchmarks * broken * working without trait * Make work for multiple pallets * Fix merge issues * writer appends to file * implement () for balances weight trait * update name of trait * Weights to WeightInfo * auto trait writer * Heap pages are configurable * clean out runtime changes * more clean up * Fix string generation * Update comments * Update bin/node/runtime/src/lib.rs Co-authored-by: arkpar <arkady.paronyan@gmail.com>
This commit is contained in:
@@ -22,11 +22,11 @@ use linregress::{FormulaRegressionBuilder, RegressionDataBuilder, RegressionMode
|
||||
use crate::BenchmarkResults;
|
||||
|
||||
pub struct Analysis {
|
||||
base: u128,
|
||||
slopes: Vec<u128>,
|
||||
names: Vec<String>,
|
||||
value_dists: Option<Vec<(Vec<u32>, u128, u128)>>,
|
||||
model: Option<RegressionModel>,
|
||||
pub base: u128,
|
||||
pub slopes: Vec<u128>,
|
||||
pub names: Vec<String>,
|
||||
pub value_dists: Option<Vec<(Vec<u32>, u128, u128)>>,
|
||||
pub model: Option<RegressionModel>,
|
||||
}
|
||||
|
||||
pub enum BenchmarkSelector {
|
||||
|
||||
@@ -1158,31 +1158,46 @@ macro_rules! impl_benchmark_test {
|
||||
/// First create an object that holds in the input parameters for the benchmark:
|
||||
///
|
||||
/// ```ignore
|
||||
/// let params = (&pallet, &benchmark, &lowest_range_values, &highest_range_values, &steps, repeat);
|
||||
/// let params = (&pallet, &benchmark, &lowest_range_values, &highest_range_values, &steps, repeat, &whitelist);
|
||||
/// ```
|
||||
///
|
||||
/// The `whitelist` is a `Vec<Vec<u8>>` of storage keys that you would like to skip for DB tracking. For example:
|
||||
///
|
||||
/// ```ignore
|
||||
/// let whitelist: Vec<Vec<u8>> = vec![
|
||||
/// // Block Number
|
||||
/// hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec(),
|
||||
/// // Total Issuance
|
||||
/// hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec(),
|
||||
/// // Execution Phase
|
||||
/// hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec(),
|
||||
/// // Event Count
|
||||
/// hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec(),
|
||||
/// ];
|
||||
///
|
||||
/// Then define a mutable local variable to hold your `BenchmarkBatch` object:
|
||||
///
|
||||
/// ```ignore
|
||||
/// let mut batches = Vec::<BenchmarkBatch>::new();
|
||||
/// ````
|
||||
///
|
||||
/// Then add the pallets you want to benchmark to this object, including the string
|
||||
/// you want to use target a particular pallet:
|
||||
/// Then add the pallets you want to benchmark to this object, using their crate name and generated
|
||||
/// module struct:
|
||||
///
|
||||
/// ```ignore
|
||||
/// add_benchmark!(params, batches, b"balances", Balances);
|
||||
/// add_benchmark!(params, batches, b"identity", Identity);
|
||||
/// add_benchmark!(params, batches, b"session", SessionBench::<Runtime>);
|
||||
/// add_benchmark!(params, batches, pallet_balances, Balances);
|
||||
/// add_benchmark!(params, batches, pallet_session, SessionBench::<Runtime>);
|
||||
/// add_benchmark!(params, batches, frame_system, SystemBench::<Runtime>);
|
||||
/// ...
|
||||
/// ```
|
||||
///
|
||||
/// At the end of `dispatch_benchmark`, you should return this batches object.
|
||||
#[macro_export]
|
||||
macro_rules! add_benchmark {
|
||||
( $params:ident, $batches:ident, $name:literal, $( $location:tt )* ) => (
|
||||
( $params:ident, $batches:ident, $name:ident, $( $location:tt )* ) => (
|
||||
let name_string = stringify!($name).as_bytes();
|
||||
let (pallet, benchmark, lowest_range_values, highest_range_values, steps, repeat, whitelist) = $params;
|
||||
if &pallet[..] == &$name[..] || &pallet[..] == &b"*"[..] {
|
||||
if &pallet[..] == &name_string[..] || &pallet[..] == &b"*"[..] {
|
||||
if &pallet[..] == &b"*"[..] || &benchmark[..] == &b"*"[..] {
|
||||
for benchmark in $( $location )*::benchmarks().into_iter() {
|
||||
$batches.push($crate::BenchmarkBatch {
|
||||
@@ -1194,7 +1209,7 @@ macro_rules! add_benchmark {
|
||||
repeat,
|
||||
whitelist,
|
||||
)?,
|
||||
pallet: $name.to_vec(),
|
||||
pallet: name_string.to_vec(),
|
||||
benchmark: benchmark.to_vec(),
|
||||
});
|
||||
}
|
||||
@@ -1208,7 +1223,7 @@ macro_rules! add_benchmark {
|
||||
repeat,
|
||||
whitelist,
|
||||
)?,
|
||||
pallet: $name.to_vec(),
|
||||
pallet: name_string.to_vec(),
|
||||
benchmark: benchmark.clone(),
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user