mirror of
https://github.com/sharkdp/hyperfine.git
synced 2026-11-02 17:11:28 +00:00
Move user and system time
This commit is contained in:
1 parent
14d773998a
commit
50232feb22
6 files changed
+106
-42
No files matched your search
@@ -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<_>>(),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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),
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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,
|
||||||
|
|||||||
Reference in new issue
Block a user