Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
dccce70
Add new hardware and software metrics
koute Mar 18, 2022
99633f9
Move sysinfo tests into `mod tests`
koute Mar 23, 2022
55c7358
Correct a typo in a comment
koute Mar 23, 2022
909df21
Remove unnecessary `nix` dependency
koute Mar 23, 2022
706e4d3
Fix the version tests
koute Mar 23, 2022
c1e409f
Add a `--disable-hardware-benchmarks` CLI argument
koute Mar 24, 2022
a05159a
Disable hardware benchmarks in the integration tests
koute Mar 25, 2022
fff4573
Remove unused import
koute Mar 25, 2022
3d15f0e
Fix benchmarks compilation
koute Mar 25, 2022
a8c71c1
Merge remote-tracking branch 'origin/master' into master_hwswinfo
koute Mar 25, 2022
d215b39
Move code to a new `sc-sysinfo` crate
koute Mar 28, 2022
c1da1fa
Correct `impl_version` comment
koute Mar 28, 2022
b98bcfa
Move `--disable-hardware-benchmarks` to the chain-specific bin crate
koute Mar 28, 2022
0d25408
Move printing out of hardware bench results to `sc-sysinfo`
koute Mar 28, 2022
46c9de2
Move hardware benchmarks to a separate messages; trigger them manually
koute Mar 29, 2022
56a1e3a
Rename some of the fields in the `HwBench` struct
koute Mar 31, 2022
457b4da
Revert changes to the telemetry crate; manually send hwbench messages
koute Apr 4, 2022
bb26cfa
Move sysinfo logs into the sysinfo crate
koute Apr 4, 2022
77f9c5f
Move the `TARGET_OS_*` constants into the sysinfo crate
koute Apr 4, 2022
73b230a
Minor cleanups
koute Apr 5, 2022
c3214e5
Move the `HwBench` struct to the sysinfo crate
koute Apr 5, 2022
b6d78a0
Derive `Clone` for `HwBench`
koute Apr 5, 2022
19f43ab
Fix broken telemetry connection notification stream
koute Apr 5, 2022
15e5f9e
Prevent the telemetry connection notifiers from leaking if they're di…
koute Apr 5, 2022
e5f210f
Turn the telemetry notification failure log into a debug log
koute Apr 6, 2022
0cafbf8
Rename `--disable-hardware-benchmarks` to `--no-hardware-benchmarks`
koute Apr 6, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 19 additions & 9 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ members = [
"client/service",
"client/service/test",
"client/state-db",
"client/sysinfo",
"client/sync-state-rpc",
"client/telemetry",
"client/tracing",
Expand Down
1 change: 1 addition & 0 deletions bin/node/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ sc-telemetry = { version = "4.0.0-dev", path = "../../../client/telemetry" }
sc-executor = { version = "0.10.0-dev", path = "../../../client/executor" }
sc-authority-discovery = { version = "0.10.0-dev", path = "../../../client/authority-discovery" }
sc-sync-state-rpc = { version = "0.10.0-dev", path = "../../../client/sync-state-rpc" }
sc-sysinfo = { version = "6.0.0-dev", path = "../../../client/sysinfo" }

# frame dependencies
frame-system = { version = "4.0.0-dev", path = "../../../frame/system" }
Expand Down
3 changes: 2 additions & 1 deletion bin/node/cli/benches/block_production.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,8 @@ fn new_node(tokio_handle: Handle) -> node_cli::service::NewFullBase {
wasm_runtime_overrides: None,
};

node_cli::service::new_full_base(config, |_, _| ()).expect("creating a full node doesn't fail")
node_cli::service::new_full_base(config, false, |_, _| ())
.expect("creating a full node doesn't fail")
}

fn extrinsic_set_time(now: u64) -> OpaqueExtrinsic {
Expand Down
2 changes: 1 addition & 1 deletion bin/node/cli/benches/transaction_pool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ fn new_node(tokio_handle: Handle) -> node_cli::service::NewFullBase {
wasm_runtime_overrides: None,
};

node_cli::service::new_full_base(config, |_, _| ()).expect("Creates node")
node_cli::service::new_full_base(config, false, |_, _| ()).expect("Creates node")
}

fn create_accounts(num: usize) -> Vec<sr25519::Pair> {
Expand Down
2 changes: 1 addition & 1 deletion bin/node/cli/src/chain_spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -471,7 +471,7 @@ pub(crate) mod tests {

sc_service_test::connectivity(integration_test_config_with_two_authorities(), |config| {
let NewFullBase { task_manager, client, network, transaction_pool, .. } =
new_full_base(config, |_, _| ())?;
new_full_base(config, false, |_, _| ())?;
Ok(sc_service_test::TestNetComponents::new(
task_manager,
client,
Expand Down
10 changes: 10 additions & 0 deletions bin/node/cli/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,16 @@ pub struct Cli {
#[allow(missing_docs)]
#[clap(flatten)]
pub run: sc_cli::RunCmd,

/// Disable automatic hardware benchmarks.
///
/// By default these benchmarks are automatically ran at startup and measure
/// the CPU speed, the memory bandwidth and the disk speed.
///
/// The results are then printed out in the logs, and also sent as part of
/// telemetry, if telemetry is enabled.
#[clap(long)]
pub disable_hardware_benchmarks: bool,
}

/// Possible subcommands of the main binary.
Expand Down
3 changes: 2 additions & 1 deletion bin/node/cli/src/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ pub fn run() -> Result<()> {
None => {
let runner = cli.create_runner(&cli.run)?;
runner.run_node_until_exit(|config| async move {
service::new_full(config).map_err(sc_cli::Error::Service)
service::new_full(config, cli.disable_hardware_benchmarks)
.map_err(sc_cli::Error::Service)
})
},
Some(Subcommand::Inspect(cmd)) => {
Expand Down
34 changes: 31 additions & 3 deletions bin/node/cli/src/service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -309,11 +309,21 @@ pub struct NewFullBase {
/// Creates a full service from the configuration.
pub fn new_full_base(
mut config: Configuration,
disable_hardware_benchmarks: bool,
with_startup_data: impl FnOnce(
&sc_consensus_babe::BabeBlockImport<Block, FullClient, FullGrandpaBlockImport>,
&sc_consensus_babe::BabeLink<Block>,
),
) -> Result<NewFullBase, ServiceError> {
let hwbench = if !disable_hardware_benchmarks {
config.database.path().map(|database_path| {
let _ = std::fs::create_dir_all(&database_path);
sc_sysinfo::gather_hwbench(Some(database_path))
})
} else {
None
};

let sc_service::PartialComponents {
client,
backend,
Expand Down Expand Up @@ -383,6 +393,19 @@ pub fn new_full_base(
telemetry: telemetry.as_mut(),
})?;

if let Some(hwbench) = hwbench {
sc_sysinfo::print_hwbench(&hwbench);

if let Some(ref mut telemetry) = telemetry {
let telemetry_handle = telemetry.handle();
task_manager.spawn_handle().spawn(
"telemetry_hwbench",
None,
sc_sysinfo::initialize_hwbench_telemetry(telemetry_handle, hwbench),
);
}
}

let (block_import, grandpa_link, babe_link) = import_setup;

(with_startup_data)(&block_import, &babe_link);
Expand Down Expand Up @@ -530,8 +553,12 @@ pub fn new_full_base(
}

/// Builds a new service for a full client.
pub fn new_full(config: Configuration) -> Result<TaskManager, ServiceError> {
new_full_base(config, |_, _| ()).map(|NewFullBase { task_manager, .. }| task_manager)
pub fn new_full(
config: Configuration,
disable_hardware_benchmarks: bool,
) -> Result<TaskManager, ServiceError> {
new_full_base(config, disable_hardware_benchmarks, |_, _| ())
.map(|NewFullBase { task_manager, .. }| task_manager)
}

#[cfg(test)]
Expand Down Expand Up @@ -598,6 +625,7 @@ mod tests {
let NewFullBase { task_manager, client, network, transaction_pool, .. } =
new_full_base(
config,
false,
|block_import: &sc_consensus_babe::BabeBlockImport<Block, _, _>,
babe_link: &sc_consensus_babe::BabeLink<Block>| {
setup_handles = Some((block_import.clone(), babe_link.clone()));
Expand Down Expand Up @@ -775,7 +803,7 @@ mod tests {
crate::chain_spec::tests::integration_test_config_with_two_authorities(),
|config| {
let NewFullBase { task_manager, client, network, transaction_pool, .. } =
new_full_base(config, |_, _| ())?;
new_full_base(config, false, |_, _| ())?;
Ok(sc_service_test::TestNetComponents::new(
task_manager,
client,
Expand Down
3 changes: 2 additions & 1 deletion bin/node/cli/tests/check_block_works.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ pub mod common;
async fn check_block_works() {
let base_path = tempdir().expect("could not create a temp dir");

common::run_node_for_a_while(base_path.path(), &["--dev"]).await;
common::run_node_for_a_while(base_path.path(), &["--dev", "--disable-hardware-benchmarks"])
.await;

let status = Command::new(cargo_bin("substrate"))
.args(&["check-block", "--dev", "--pruning", "archive", "-d"])
Expand Down
3 changes: 2 additions & 1 deletion bin/node/cli/tests/export_import_flow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,8 @@ async fn export_import_revert() {
let exported_blocks_file = base_path.path().join("exported_blocks");
let db_path = base_path.path().join("db");

common::run_node_for_a_while(base_path.path(), &["--dev"]).await;
common::run_node_for_a_while(base_path.path(), &["--dev", "--disable-hardware-benchmarks"])
.await;

let mut executor = ExportImportRevertExecutor::new(&base_path, &exported_blocks_file, &db_path);

Expand Down
3 changes: 2 additions & 1 deletion bin/node/cli/tests/inspect_works.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ pub mod common;
async fn inspect_works() {
let base_path = tempdir().expect("could not create a temp dir");

common::run_node_for_a_while(base_path.path(), &["--dev"]).await;
common::run_node_for_a_while(base_path.path(), &["--dev", "--disable-hardware-benchmarks"])
.await;

let status = Command::new(cargo_bin("substrate"))
.args(&["inspect", "--dev", "--pruning", "archive", "-d"])
Expand Down
3 changes: 2 additions & 1 deletion bin/node/cli/tests/purge_chain_works.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ pub mod common;
async fn purge_chain_works() {
let base_path = tempdir().expect("could not create a temp dir");

common::run_node_for_a_while(base_path.path(), &["--dev"]).await;
common::run_node_for_a_while(base_path.path(), &["--dev", "--disable-hardware-benchmarks"])
.await;

let status = Command::new(cargo_bin("substrate"))
.args(&["purge-chain", "--dev", "-d"])
Expand Down
3 changes: 2 additions & 1 deletion bin/node/cli/tests/running_the_node_and_interrupt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ async fn running_the_node_works_and_can_be_interrupted() {
Command::new(cargo_bin("substrate"))
.args(&["--dev", "-d"])
.arg(base_path.path())
.arg("--disable-hardware-benchmarks")
.spawn()
.unwrap(),
);
Expand All @@ -64,7 +65,7 @@ async fn running_the_node_works_and_can_be_interrupted() {
async fn running_two_nodes_with_the_same_ws_port_should_work() {
fn start_node() -> Child {
Command::new(cargo_bin("substrate"))
.args(&["--dev", "--tmp", "--ws-port=45789"])
.args(&["--dev", "--tmp", "--ws-port=45789", "--disable-hardware-benchmarks"])
.spawn()
.unwrap()
}
Expand Down
1 change: 1 addition & 0 deletions bin/node/cli/tests/telemetry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ async fn telemetry_works() {
let mut substrate = substrate
.args(&["--dev", "--tmp", "--telemetry-url"])
.arg(format!("ws://{} 10", addr))
.arg("--disable-hardware-benchmarks")
.stdout(process::Stdio::piped())
.stderr(process::Stdio::piped())
.stdin(process::Stdio::null())
Expand Down
2 changes: 1 addition & 1 deletion bin/node/cli/tests/temp_base_path_works.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ pub mod common;
async fn temp_base_path_works() {
let mut cmd = Command::new(cargo_bin("substrate"));
let mut child = common::KillChildOnDrop(
cmd.args(&["--dev", "--tmp"])
cmd.args(&["--dev", "--tmp", "--disable-hardware-benchmarks"])
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.spawn()
Expand Down
24 changes: 3 additions & 21 deletions bin/node/cli/tests/version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,11 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>.

use assert_cmd::cargo::cargo_bin;
use platforms::*;
use regex::Regex;
use std::process::Command;

fn expected_regex() -> Regex {
Regex::new(r"^substrate (\d+\.\d+\.\d+(?:-.+?)?)-([a-f\d]+|unknown)-(.+?)-(.+?)(?:-(.+))?$")
.unwrap()
Regex::new(r"^substrate (.+)-([a-f\d]+)$").unwrap()
}

#[test]
Expand All @@ -37,33 +35,17 @@ fn version_is_full() {
let captures = expected.captures(output.as_str()).expect("could not parse version in output");

assert_eq!(&captures[1], env!("CARGO_PKG_VERSION"));
assert_eq!(&captures[3], TARGET_ARCH.as_str());
assert_eq!(&captures[4], TARGET_OS.as_str());
assert_eq!(captures.get(5).map(|x| x.as_str()), TARGET_ENV.map(|x| x.as_str()));
}

#[test]
fn test_regex_matches_properly() {
let expected = expected_regex();

let captures = expected.captures("substrate 2.0.0-da487d19d-x86_64-linux-gnu").unwrap();
let captures = expected.captures("substrate 2.0.0-da487d19d").unwrap();
assert_eq!(&captures[1], "2.0.0");
assert_eq!(&captures[2], "da487d19d");
assert_eq!(&captures[3], "x86_64");
assert_eq!(&captures[4], "linux");
assert_eq!(captures.get(5).map(|x| x.as_str()), Some("gnu"));

let captures = expected.captures("substrate 2.0.0-alpha.5-da487d19d-x86_64-linux-gnu").unwrap();
let captures = expected.captures("substrate 2.0.0-alpha.5-da487d19d").unwrap();
assert_eq!(&captures[1], "2.0.0-alpha.5");
assert_eq!(&captures[2], "da487d19d");
assert_eq!(&captures[3], "x86_64");
assert_eq!(&captures[4], "linux");
assert_eq!(captures.get(5).map(|x| x.as_str()), Some("gnu"));

let captures = expected.captures("substrate 2.0.0-alpha.5-da487d19d-x86_64-linux").unwrap();
assert_eq!(&captures[1], "2.0.0-alpha.5");
assert_eq!(&captures[2], "da487d19d");
assert_eq!(&captures[3], "x86_64");
assert_eq!(&captures[4], "linux");
assert_eq!(captures.get(5).map(|x| x.as_str()), None);
}
2 changes: 1 addition & 1 deletion client/cli/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ pub trait SubstrateCli: Sized {
///
/// By default this will look like this:
///
/// `2.0.0-b950f731c-x86_64-linux-gnu`
/// `2.0.0-b950f731c`
///
/// Where the hash is the short commit hash of the commit of in the Git repository.
fn impl_version() -> String;
Expand Down
1 change: 1 addition & 0 deletions client/service/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ sc-offchain = { version = "4.0.0-dev", path = "../offchain" }
prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.10.0-dev" }
sc-tracing = { version = "4.0.0-dev", path = "../tracing" }
sp-tracing = { version = "5.0.0", path = "../../primitives/tracing" }
sc-sysinfo = { version = "6.0.0-dev", path = "../sysinfo" }
tracing = "0.1.29"
tracing-futures = { version = "0.2.4" }
parity-util-mem = { version = "0.11.0", default-features = false, features = [
Expand Down
12 changes: 11 additions & 1 deletion client/service/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -487,8 +487,13 @@ where
)
.map_err(|e| Error::Application(Box::new(e)))?;

let sysinfo = sc_sysinfo::gather_sysinfo();
sc_sysinfo::print_sysinfo(&sysinfo);

let telemetry = telemetry
.map(|telemetry| init_telemetry(&mut config, network.clone(), client.clone(), telemetry))
.map(|telemetry| {
init_telemetry(&mut config, network.clone(), client.clone(), telemetry, Some(sysinfo))
})
.transpose()?;

info!("📦 Highest known block at #{}", chain_info.best_number);
Expand Down Expand Up @@ -609,12 +614,16 @@ fn init_telemetry<TBl: BlockT, TCl: BlockBackend<TBl>>(
network: Arc<NetworkService<TBl, <TBl as BlockT>::Hash>>,
client: Arc<TCl>,
telemetry: &mut Telemetry,
sysinfo: Option<sc_telemetry::SysInfo>,
) -> sc_telemetry::Result<TelemetryHandle> {
let genesis_hash = client.block_hash(Zero::zero()).ok().flatten().unwrap_or_default();
let connection_message = ConnectionMessage {
name: config.network.node_name.to_owned(),
implementation: config.impl_name.to_owned(),
version: config.impl_version.to_owned(),
target_os: sc_sysinfo::TARGET_OS.into(),
target_arch: sc_sysinfo::TARGET_ARCH.into(),
target_env: sc_sysinfo::TARGET_ENV.into(),
config: String::new(),
chain: config.chain_spec.name().to_owned(),
genesis_hash: format!("{:?}", genesis_hash),
Expand All @@ -625,6 +634,7 @@ fn init_telemetry<TBl: BlockT, TCl: BlockBackend<TBl>>(
.unwrap_or(0)
.to_string(),
network_id: network.local_peer_id().to_base58(),
sysinfo,
};

telemetry.start_telemetry(connection_message)?;
Expand Down
Loading