mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-28 14:27:26 +00:00
362dc50940
* Move new_rng to shared code Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Add bechmark machine command Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Use sc-sysinfo Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Add --no-hardware-benchmarks Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Lockfile Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Do not create components if not needed Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fix tests Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Revert "Add --no-hardware-benchmarks" This reverts commit d4ee98222bf1a5ea62ac60dd7d5c62070e2d7f70. * Fix tests Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Update Cargo deps Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Move sr255119::verify bench to sc-sysinfo Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Move sr255119::verify bench to sc-sysinfo Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Switch benchmarks to return f64 Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Review fixes Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * fmt Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Hide command until completed Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Use concrete rand implementation Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Put clobber into a function Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Add test Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Add comment Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Update cargo to match polkadot Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Remove doc that does not format in the console Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Limit benchmark by time Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Add ExecutionLimit and make function infallible Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * CI Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Add doc Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
67 lines
2.2 KiB
Rust
67 lines
2.2 KiB
Rust
// This file is part of Substrate.
|
|
|
|
// Copyright (C) 2022 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.
|
|
|
|
use sc_cli::Result;
|
|
use sc_client_api::{Backend as ClientBackend, StorageProvider, UsageProvider};
|
|
use sp_core::storage::StorageKey;
|
|
use sp_runtime::{
|
|
generic::BlockId,
|
|
traits::{Block as BlockT, Header as HeaderT},
|
|
};
|
|
|
|
use log::info;
|
|
use rand::prelude::*;
|
|
use std::{fmt::Debug, sync::Arc, time::Instant};
|
|
|
|
use super::cmd::StorageCmd;
|
|
use crate::shared::{new_rng, BenchRecord};
|
|
|
|
impl StorageCmd {
|
|
/// Benchmarks the time it takes to read a single Storage item.
|
|
/// Uses the latest state that is available for the given client.
|
|
pub(crate) fn bench_read<B, BA, C>(&self, client: Arc<C>) -> Result<BenchRecord>
|
|
where
|
|
C: UsageProvider<B> + StorageProvider<B, BA>,
|
|
B: BlockT + Debug,
|
|
BA: ClientBackend<B>,
|
|
<<B as BlockT>::Header as HeaderT>::Number: From<u32>,
|
|
{
|
|
let mut record = BenchRecord::default();
|
|
let block = BlockId::Number(client.usage_info().chain.best_number);
|
|
|
|
info!("Preparing keys from block {}", block);
|
|
// Load all keys and randomly shuffle them.
|
|
let empty_prefix = StorageKey(Vec::new());
|
|
let mut keys = client.storage_keys(&block, &empty_prefix)?;
|
|
let (mut rng, _) = new_rng(None);
|
|
keys.shuffle(&mut rng);
|
|
|
|
// Interesting part here:
|
|
// Read all the keys in the database and measure the time it takes to access each.
|
|
info!("Reading {} keys", keys.len());
|
|
for key in keys.clone() {
|
|
let start = Instant::now();
|
|
let v = client
|
|
.storage(&block, &key)
|
|
.expect("Checked above to exist")
|
|
.ok_or("Value unexpectedly empty")?;
|
|
record.append(v.0.len(), start.elapsed())?;
|
|
}
|
|
Ok(record)
|
|
}
|
|
}
|