mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 09:57:56 +00:00
Warn validators with slow hardware (#12620)
* move Metric * run hardware bench if validiator flag is being used * fix rustdoc & update node-template * fix * unused improt * warn * move Requirement * bench_result * ensure_requirements * make the code compile * check if authority * Update client/sysinfo/src/sysinfo.rs Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * nit fixes * warning signs * Update client/sysinfo/src/sysinfo.rs Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
This commit is contained in:
@@ -27,7 +27,7 @@ mod storage;
|
||||
|
||||
pub use block::BlockCmd;
|
||||
pub use extrinsic::{ExtrinsicBuilder, ExtrinsicCmd, ExtrinsicFactory};
|
||||
pub use machine::{MachineCmd, Requirements, SUBSTRATE_REFERENCE_HARDWARE};
|
||||
pub use machine::{MachineCmd, SUBSTRATE_REFERENCE_HARDWARE};
|
||||
pub use overhead::OverheadCmd;
|
||||
pub use pallet::PalletCmd;
|
||||
pub use sc_service::BasePath;
|
||||
|
||||
@@ -18,40 +18,7 @@
|
||||
//! Contains types to define hardware requirements.
|
||||
|
||||
use lazy_static::lazy_static;
|
||||
use sc_sysinfo::Throughput;
|
||||
use serde::{de::Visitor, Deserialize, Deserializer, Serialize, Serializer};
|
||||
use sp_std::{fmt, fmt::Formatter};
|
||||
|
||||
/// Serializes throughput into MiBs and represents it as `f64`.
|
||||
fn serialize_throughput_as_f64<S>(throughput: &Throughput, serializer: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
serializer.serialize_f64(throughput.as_mibs())
|
||||
}
|
||||
|
||||
struct ThroughputVisitor;
|
||||
impl<'de> Visitor<'de> for ThroughputVisitor {
|
||||
type Value = Throughput;
|
||||
|
||||
fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
|
||||
formatter.write_str("A value that is a f64.")
|
||||
}
|
||||
|
||||
fn visit_f64<E>(self, value: f64) -> Result<Self::Value, E>
|
||||
where
|
||||
E: serde::de::Error,
|
||||
{
|
||||
Ok(Throughput::from_mibs(value))
|
||||
}
|
||||
}
|
||||
|
||||
fn deserialize_throughput<'de, D>(deserializer: D) -> Result<Throughput, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
Ok(deserializer.deserialize_f64(ThroughputVisitor))?
|
||||
}
|
||||
use sc_sysinfo::Requirements;
|
||||
|
||||
lazy_static! {
|
||||
/// The hardware requirements as measured on reference hardware.
|
||||
@@ -67,62 +34,6 @@ lazy_static! {
|
||||
};
|
||||
}
|
||||
|
||||
/// Multiple requirements for the hardware.
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
|
||||
pub struct Requirements(pub Vec<Requirement>);
|
||||
|
||||
/// A single requirement for the hardware.
|
||||
#[derive(Deserialize, Serialize, Debug, Clone, Copy, PartialEq)]
|
||||
pub struct Requirement {
|
||||
/// The metric to measure.
|
||||
pub metric: Metric,
|
||||
/// The minimal throughput that needs to be archived for this requirement.
|
||||
#[serde(
|
||||
serialize_with = "serialize_throughput_as_f64",
|
||||
deserialize_with = "deserialize_throughput"
|
||||
)]
|
||||
pub minimum: Throughput,
|
||||
}
|
||||
|
||||
/// A single hardware metric.
|
||||
///
|
||||
/// The implementation of these is in `sc-sysinfo`.
|
||||
#[derive(Deserialize, Serialize, Debug, Clone, Copy, PartialEq)]
|
||||
pub enum Metric {
|
||||
/// SR25519 signature verification.
|
||||
Sr25519Verify,
|
||||
/// Blake2-256 hashing algorithm.
|
||||
Blake2256,
|
||||
/// Copying data in RAM.
|
||||
MemCopy,
|
||||
/// Disk sequential write.
|
||||
DiskSeqWrite,
|
||||
/// Disk random write.
|
||||
DiskRndWrite,
|
||||
}
|
||||
|
||||
impl Metric {
|
||||
/// The category of the metric.
|
||||
pub fn category(&self) -> &'static str {
|
||||
match self {
|
||||
Self::Sr25519Verify | Self::Blake2256 => "CPU",
|
||||
Self::MemCopy => "Memory",
|
||||
Self::DiskSeqWrite | Self::DiskRndWrite => "Disk",
|
||||
}
|
||||
}
|
||||
|
||||
/// The name of the metric. It is always prefixed by the [`self::category()`].
|
||||
pub fn name(&self) -> &'static str {
|
||||
match self {
|
||||
Self::Sr25519Verify => "SR25519-Verify",
|
||||
Self::Blake2256 => "BLAKE2-256",
|
||||
Self::MemCopy => "Copy",
|
||||
Self::DiskSeqWrite => "Seq Write",
|
||||
Self::DiskRndWrite => "Rnd Write",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
@@ -30,11 +30,12 @@ use sc_cli::{CliConfiguration, Result, SharedParams};
|
||||
use sc_service::Configuration;
|
||||
use sc_sysinfo::{
|
||||
benchmark_cpu, benchmark_disk_random_writes, benchmark_disk_sequential_writes,
|
||||
benchmark_memory, benchmark_sr25519_verify, ExecutionLimit, Throughput,
|
||||
benchmark_memory, benchmark_sr25519_verify, ExecutionLimit, Metric, Requirement, Requirements,
|
||||
Throughput,
|
||||
};
|
||||
|
||||
use crate::shared::check_build_profile;
|
||||
pub use hardware::{Metric, Requirement, Requirements, SUBSTRATE_REFERENCE_HARDWARE};
|
||||
pub use hardware::SUBSTRATE_REFERENCE_HARDWARE;
|
||||
|
||||
/// Command to benchmark the hardware.
|
||||
///
|
||||
|
||||
Reference in New Issue
Block a user