diff --git a/Cargo.lock b/Cargo.lock index 84d7637..8dd6b2d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -135,6 +135,7 @@ dependencies = [ "aquatic_udp", "aquatic_udp_load_test", "clap 4.4.11", + "humanize-bytes", "indexmap 2.1.0", "indoc", "itertools 0.12.0", @@ -1398,6 +1399,15 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +[[package]] +name = "humanize-bytes" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c8f5a0ffae64f844e5e311016d1d8184dd496c7136af420f665a877ac2f0681" +dependencies = [ + "smartstring", +] + [[package]] name = "hwloc" version = "0.5.0" @@ -2605,6 +2615,17 @@ version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + [[package]] name = "snafu" version = "0.7.5" diff --git a/crates/bencher/Cargo.toml b/crates/bencher/Cargo.toml index 5fd5631..2be6137 100644 --- a/crates/bencher/Cargo.toml +++ b/crates/bencher/Cargo.toml @@ -24,6 +24,7 @@ aquatic_udp_load_test = { optional = true, workspace = true } anyhow = "1" clap = { version = "4", features = ["derive"] } +humanize-bytes = "1" indexmap = "2" indoc = "2" itertools = "0.12" diff --git a/crates/bencher/src/html.rs b/crates/bencher/src/html.rs index a232bf9..15a0b93 100644 --- a/crates/bencher/src/html.rs +++ b/crates/bencher/src/html.rs @@ -1,3 +1,4 @@ +use humanize_bytes::humanize_bytes_binary; use indexmap::{IndexMap, IndexSet}; use indoc::formatdoc; use itertools::Itertools; @@ -198,7 +199,7 @@ pub fn html_all_runs(all_results: &[TrackerCoreCountResults]) -> String { {avg_responses} {tracker_key_values} {cpu}% - {mem} kB + {mem} {tracker_vcpus} {load_test_key_values} {load_test_vcpus} @@ -212,7 +213,8 @@ pub fn html_all_runs(all_results: &[TrackerCoreCountResults]) -> String { }).join("\n"), cpu = r.tracker_stats.map(|stats| stats.avg_cpu_utilization.to_string()) .unwrap_or_else(|| "-".to_string()), - mem = r.tracker_stats.map(|stats| stats.peak_rss_kb.to_string()) + mem = r.tracker_stats + .map(|stats| humanize_bytes_binary!(stats.peak_rss_bytes).to_string()) .unwrap_or_else(|| "-".to_string()), tracker_vcpus = r.tracker_vcpus, load_test_key_values = load_test_key_names.iter().map(|name| { diff --git a/crates/bencher/src/run.rs b/crates/bencher/src/run.rs index 800f6e8..d3b0210 100644 --- a/crates/bencher/src/run.rs +++ b/crates/bencher/src/run.rs @@ -315,7 +315,7 @@ impl std::fmt::Display for RunErrorResults { #[derive(Debug, Clone, Copy)] pub struct ProcessStats { pub avg_cpu_utilization: f32, - pub peak_rss_kb: f32, + pub peak_rss_bytes: u64, } impl FromStr for ProcessStats { @@ -324,9 +324,12 @@ impl FromStr for ProcessStats { fn from_str(s: &str) -> Result { let mut parts = s.trim().split_whitespace(); + let avg_cpu_utilization = parts.next().ok_or(())?.parse().map_err(|_| ())?; + let peak_rss_kb: f32 = parts.next().ok_or(())?.parse().map_err(|_| ())?; + Ok(Self { - avg_cpu_utilization: parts.next().ok_or(())?.parse().map_err(|_| ())?, - peak_rss_kb: parts.next().ok_or(())?.parse().map_err(|_| ())?, + avg_cpu_utilization, + peak_rss_bytes: (peak_rss_kb * 1000.0) as u64, }) } } diff --git a/crates/bencher/src/set.rs b/crates/bencher/src/set.rs index 3aee777..d4f7f80 100644 --- a/crates/bencher/src/set.rs +++ b/crates/bencher/src/set.rs @@ -1,5 +1,6 @@ use std::rc::Rc; +use humanize_bytes::humanize_bytes_binary; use indexmap::IndexMap; use num_format::{Locale, ToFormattedString}; @@ -207,8 +208,8 @@ impl LoadTestRunResults { r.tracker_process_stats.avg_cpu_utilization, ); println!( - "- Peak tracker RSS: {} kB", - r.tracker_process_stats.peak_rss_kb + "- Peak tracker RSS: {}", + humanize_bytes_binary!(r.tracker_process_stats.peak_rss_bytes) ); LoadTestRunResults::Success(LoadTestRunResultsSuccess {