mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 19:21:13 +00:00
State-db I/o metrics (#4562)
* add usage mod to sp-state-machine * State usage tracking finalized. * fix spaces * add license preamble * imporove output * review suggestions * update naming * merge fixes * Update client/db/src/light.rs Co-Authored-By: Gavin Wood <gavin@parity.io> Co-authored-by: Gavin Wood <github@gavwood.com>
This commit is contained in:
@@ -18,11 +18,16 @@
|
||||
|
||||
use log::warn;
|
||||
use hash_db::Hasher;
|
||||
use crate::trie_backend::TrieBackend;
|
||||
use crate::trie_backend_essence::TrieBackendStorage;
|
||||
use sp_trie::{TrieMut, MemoryDB, trie_types::TrieDBMut};
|
||||
use codec::Encode;
|
||||
|
||||
use sp_core::storage::{ChildInfo, OwnedChildInfo};
|
||||
use sp_trie::{TrieMut, MemoryDB, trie_types::TrieDBMut};
|
||||
|
||||
use crate::{
|
||||
trie_backend::TrieBackend,
|
||||
trie_backend_essence::TrieBackendStorage,
|
||||
UsageInfo,
|
||||
};
|
||||
|
||||
/// A state backend is used to read state data and can have changes committed
|
||||
/// to it.
|
||||
@@ -200,6 +205,14 @@ pub trait Backend<H: Hasher>: std::fmt::Debug {
|
||||
txs.consolidate(parent_txs);
|
||||
(root, txs)
|
||||
}
|
||||
|
||||
/// Query backend usage statistics (i/o, memory)
|
||||
///
|
||||
/// Not all implementations are expected to be able to do this. In the
|
||||
/// case when thay don't, empty statistics is returned.
|
||||
fn usage_info(&self) -> UsageInfo {
|
||||
UsageInfo::empty()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T: Backend<H>, H: Hasher> Backend<H> for &'a T {
|
||||
@@ -284,7 +297,11 @@ impl<'a, T: Backend<H>, H: Hasher> Backend<H> for &'a T {
|
||||
fn for_key_values_with_prefix<F: FnMut(&[u8], &[u8])>(&self, prefix: &[u8], f: F) {
|
||||
(*self).for_key_values_with_prefix(prefix, f);
|
||||
}
|
||||
}
|
||||
|
||||
fn usage_info(&self) -> UsageInfo {
|
||||
(*self).usage_info()
|
||||
}
|
||||
}
|
||||
|
||||
/// Trait that allows consolidate two transactions together.
|
||||
pub trait Consolidate {
|
||||
|
||||
@@ -40,6 +40,7 @@ mod overlayed_changes;
|
||||
mod proving_backend;
|
||||
mod trie_backend;
|
||||
mod trie_backend_essence;
|
||||
mod stats;
|
||||
|
||||
pub use sp_trie::{trie_types::{Layout, TrieDBMut}, TrieMut, DBValue, MemoryDB};
|
||||
pub use testing::TestExternalities;
|
||||
@@ -68,6 +69,7 @@ pub use trie_backend_essence::{TrieBackendStorage, Storage};
|
||||
pub use trie_backend::TrieBackend;
|
||||
pub use error::{Error, ExecutionError};
|
||||
pub use in_memory_backend::InMemory as InMemoryBackend;
|
||||
pub use stats::{UsageInfo, UsageUnit};
|
||||
|
||||
type CallResult<R, E> = Result<NativeOrEncoded<R>, E>;
|
||||
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
// Copyright 2017-2020 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Substrate.
|
||||
|
||||
// Substrate is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Substrate is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Substrate. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
//! Usage statistics for state db
|
||||
|
||||
use std::time::{Instant, Duration};
|
||||
|
||||
/// Measured count of operations and total bytes.
|
||||
#[derive(Clone, Debug, Default)]
|
||||
pub struct UsageUnit {
|
||||
/// Number of operations.
|
||||
pub ops: u64,
|
||||
/// Number of bytes.
|
||||
pub bytes: u64,
|
||||
}
|
||||
|
||||
/// Usage statistics for state backend.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct UsageInfo {
|
||||
/// Read statistics (total).
|
||||
pub reads: UsageUnit,
|
||||
/// Write statistics.
|
||||
pub writes: UsageUnit,
|
||||
/// Cache read statistics.
|
||||
pub cache_reads: UsageUnit,
|
||||
/// Memory used.
|
||||
pub memory: usize,
|
||||
|
||||
/// Moment at which current statistics has been started being collected.
|
||||
pub started: Instant,
|
||||
/// Timespan of the statistics.
|
||||
pub span: Duration,
|
||||
}
|
||||
|
||||
impl UsageInfo {
|
||||
/// Empty statistics.
|
||||
///
|
||||
/// Means no data was collected.
|
||||
pub fn empty() -> Self {
|
||||
Self {
|
||||
reads: UsageUnit::default(),
|
||||
writes: UsageUnit::default(),
|
||||
cache_reads: UsageUnit::default(),
|
||||
memory: 0,
|
||||
started: Instant::now(),
|
||||
span: Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user