diff --git a/src/benchmark/benchmark_result.rs b/src/benchmark/benchmark_result.rs index 6a2eea5..5913c83 100644 --- a/src/benchmark/benchmark_result.rs +++ b/src/benchmark/benchmark_result.rs @@ -10,9 +10,14 @@ use crate::util::{ #[derive(Debug, Default, Clone, Serialize, PartialEq)] pub struct BenchmarkRun { + /// Wall clock time measurement pub wall_clock_time: Second, - // user_time: Second, - // system_time: Second, + + /// Time spent in user mode + pub user_time: Second, + + /// Time spent in kernel mode + pub system_time: Second, } use crate::benchmark::measurement::Measurements; @@ -37,12 +42,6 @@ pub struct BenchmarkResult { /// The full command line, including parameters not used in the command template. pub command_with_unused_parameters: String, - /// Time spent in user mode - pub user: f64, - - /// Time spent in kernel mode - pub system: f64, - /// All run time measurements pub runs: Vec, @@ -157,4 +156,24 @@ impl BenchmarkResult { pub fn max(&self) -> Second { max(&self.wall_clock_times()) } + + pub fn user_mean(&self) -> Second { + mean( + &self + .runs + .iter() + .map(|run| run.user_time) + .collect::>(), + ) + } + + pub fn system_mean(&self) -> Second { + mean( + &self + .runs + .iter() + .map(|run| run.system_time) + .collect::>(), + ) + } } diff --git a/src/benchmark/mod.rs b/src/benchmark/mod.rs index f5c7e28..4a23dbf 100644 --- a/src/benchmark/mod.rs +++ b/src/benchmark/mod.rs @@ -490,12 +490,13 @@ impl<'a> Benchmark<'a> { Ok(BenchmarkResult { command: self.command.get_name(), command_with_unused_parameters: self.command.get_name_with_unused_parameters(), - user: user_mean, - system: system_mean, runs: times_real .iter() - .map(|t| BenchmarkRun { - wall_clock_time: *t, + .zip(times_user.iter().zip(times_system.iter())) + .map(|(wall_clock_time, (user_time, system_time))| BenchmarkRun { + wall_clock_time: *wall_clock_time, + user_time: *user_time, + system_time: *system_time, }) .collect(), memory_usage_byte: Some(memory_usage_byte), diff --git a/src/benchmark/relative_speed.rs b/src/benchmark/relative_speed.rs index fc18ae3..f20b5de 100644 --- a/src/benchmark/relative_speed.rs +++ b/src/benchmark/relative_speed.rs @@ -152,10 +152,10 @@ fn create_result(name: &str, mean: f64) -> BenchmarkResult { BenchmarkResult { command: name.into(), command_with_unused_parameters: name.into(), - user: mean, - system: 0.0, runs: vec![BenchmarkRun { wall_clock_time: mean, + user_time: mean, + system_time: 0., }], memory_usage_byte: None, exit_codes: Vec::new(), diff --git a/src/benchmark/scheduler.rs b/src/benchmark/scheduler.rs index 56d75c1..a1b1953 100644 --- a/src/benchmark/scheduler.rs +++ b/src/benchmark/scheduler.rs @@ -205,11 +205,13 @@ fn generate_results(args: &[&'static str]) -> Result> { fn scheduler_basic() -> Result<()> { insta::assert_yaml_snapshot!(generate_results(&["--runs=2", "sleep 0.123", "sleep 0.456"])?, @r#" - command: sleep 0.123 - user: 0 - system: 0 runs: - wall_clock_time: 0.123 + user_time: 0 + system_time: 0 - wall_clock_time: 0.123 + user_time: 0 + system_time: 0 memory_usage_byte: - 0 - 0 @@ -217,11 +219,13 @@ fn scheduler_basic() -> Result<()> { - 0 - 0 - command: sleep 0.456 - user: 0 - system: 0 runs: - wall_clock_time: 0.456 + user_time: 0 + system_time: 0 - wall_clock_time: 0.456 + user_time: 0 + system_time: 0 memory_usage_byte: - 0 - 0 diff --git a/src/export/csv.rs b/src/export/csv.rs index 27e8bf6..c9d81b8 100644 --- a/src/export/csv.rs +++ b/src/export/csv.rs @@ -47,8 +47,8 @@ impl Exporter for CsvExporter { res.mean(), res.stddev().unwrap_or(0.0), res.median(), - res.user, - res.system, + res.user_mean(), + res.system_mean(), res.min(), res.max(), ] { @@ -85,17 +85,21 @@ fn test_csv() { BenchmarkResult { command: String::from("command_a"), command_with_unused_parameters: String::from("command_a"), - user: 3.0, - system: 4.0, runs: vec![ BenchmarkRun { wall_clock_time: 7.0, + user_time: 7.0, + system_time: 0.0, }, BenchmarkRun { wall_clock_time: 8.0, + user_time: 8.0, + system_time: 0.0, }, BenchmarkRun { wall_clock_time: 12.0, + user_time: 12.0, + system_time: 0.0, }, ], memory_usage_byte: None, @@ -122,17 +126,21 @@ fn test_csv() { BenchmarkResult { command: String::from("command_b"), command_with_unused_parameters: String::from("command_b"), - user: 13.0, - system: 14.0, runs: vec![ BenchmarkRun { wall_clock_time: 17.0, + user_time: 17.0, + system_time: 0.0, }, BenchmarkRun { wall_clock_time: 18.0, + user_time: 18.0, + system_time: 0.0, }, BenchmarkRun { wall_clock_time: 19.0, + user_time: 19.0, + system_time: 0.0, }, ], memory_usage_byte: None, @@ -167,7 +175,7 @@ fn test_csv() { insta::assert_snapshot!(actual, @r#" command,mean,stddev,median,user,system,min,max,parameter_bar,parameter_foo - command_a,9,2.6457513110645907,8,3,4,7,12,two,one - command_b,18,1,18,13,14,17,19,seven,one + command_a,9,2.6457513110645907,8,9,0,7,12,two,one + command_b,18,1,18,18,0,17,19,seven,one "#); } diff --git a/src/export/tests.rs b/src/export/tests.rs index 527128c..298cd0d 100644 --- a/src/export/tests.rs +++ b/src/export/tests.rs @@ -28,17 +28,21 @@ fn test_markup_export_auto_ms() { BenchmarkResult { command: String::from("sleep 0.1"), command_with_unused_parameters: String::from("sleep 0.1"), - user: 0.0009, - system: 0.0011, runs: vec![ BenchmarkRun { wall_clock_time: 0.09, + user_time: 0.09, + system_time: 0., }, BenchmarkRun { wall_clock_time: 0.10, + user_time: 0.10, + system_time: 0., }, BenchmarkRun { wall_clock_time: 0.14, + user_time: 0.14, + system_time: 0., }, ], memory_usage_byte: None, @@ -48,17 +52,21 @@ fn test_markup_export_auto_ms() { BenchmarkResult { command: String::from("sleep 2"), command_with_unused_parameters: String::from("sleep 2"), - user: 0.0009, - system: 0.0012, runs: vec![ BenchmarkRun { wall_clock_time: 2.0, + user_time: 2.0, + system_time: 0., }, BenchmarkRun { wall_clock_time: 3.0, + user_time: 3.0, + system_time: 0., }, BenchmarkRun { wall_clock_time: 4.0, + user_time: 4.0, + system_time: 0., }, ], memory_usage_byte: None, @@ -113,17 +121,21 @@ fn test_markup_export_auto_s() { BenchmarkResult { command: String::from("sleep 2"), command_with_unused_parameters: String::from("sleep 2"), - user: 0.0009, - system: 0.0012, runs: vec![ BenchmarkRun { wall_clock_time: 2.1, + user_time: 2.1, + system_time: 0., }, BenchmarkRun { wall_clock_time: 2.2, + user_time: 2.2, + system_time: 0., }, BenchmarkRun { wall_clock_time: 2.3, + user_time: 2.3, + system_time: 0., }, ], memory_usage_byte: None, @@ -133,17 +145,21 @@ fn test_markup_export_auto_s() { BenchmarkResult { command: String::from("sleep 0.1"), command_with_unused_parameters: String::from("sleep 0.1"), - user: 0.0009, - system: 0.0011, runs: vec![ BenchmarkRun { wall_clock_time: 0.1, + user_time: 0.1, + system_time: 0., }, BenchmarkRun { wall_clock_time: 0.2, + user_time: 0.2, + system_time: 0., }, BenchmarkRun { wall_clock_time: 0.3, + user_time: 0.3, + system_time: 0., }, ], memory_usage_byte: None, @@ -198,17 +214,21 @@ fn test_markup_export_manual_ms() { BenchmarkResult { command: String::from("sleep 2"), command_with_unused_parameters: String::from("sleep 2"), - user: 0.0009, - system: 0.0012, runs: vec![ BenchmarkRun { wall_clock_time: 2.1, + user_time: 2.1, + system_time: 0., }, BenchmarkRun { wall_clock_time: 2.2, + user_time: 2.2, + system_time: 0., }, BenchmarkRun { wall_clock_time: 2.3, + user_time: 2.3, + system_time: 0., }, ], memory_usage_byte: None, @@ -218,17 +238,21 @@ fn test_markup_export_manual_ms() { BenchmarkResult { command: String::from("sleep 0.1"), command_with_unused_parameters: String::from("sleep 0.1"), - user: 0.0009, - system: 0.0011, runs: vec![ BenchmarkRun { wall_clock_time: 0.1, + user_time: 0.1, + system_time: 0., }, BenchmarkRun { wall_clock_time: 0.2, + user_time: 0.2, + system_time: 0., }, BenchmarkRun { wall_clock_time: 0.3, + user_time: 0.3, + system_time: 0., }, ], memory_usage_byte: None, @@ -282,17 +306,21 @@ fn test_markup_export_manual_s() { BenchmarkResult { command: String::from("sleep 2"), command_with_unused_parameters: String::from("sleep 2"), - user: 0.0009, - system: 0.0012, runs: vec![ BenchmarkRun { wall_clock_time: 2.01, + user_time: 2.01, + system_time: 0., }, BenchmarkRun { wall_clock_time: 2.02, + user_time: 2.02, + system_time: 0., }, BenchmarkRun { wall_clock_time: 2.03, + user_time: 2.03, + system_time: 0., }, ], memory_usage_byte: None, @@ -302,17 +330,21 @@ fn test_markup_export_manual_s() { BenchmarkResult { command: String::from("sleep 0.1"), command_with_unused_parameters: String::from("sleep 0.1"), - user: 0.0009, - system: 0.0011, runs: vec![ BenchmarkRun { wall_clock_time: 0.11, + user_time: 0.11, + system_time: 0., }, BenchmarkRun { wall_clock_time: 0.12, + user_time: 0.12, + system_time: 0., }, BenchmarkRun { wall_clock_time: 0.13, + user_time: 0.13, + system_time: 0., }, ], memory_usage_byte: None,