Move user and system time

This commit is contained in:
David Peter authored and David Peter committed 2026-10-05 15:56:36 +02:00
1 parent 14d773998a
commit 50232feb22
6 files changed
+106 -42

No files matched your search

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