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 {