performance-metrics: Store the test list in a const array

Fixes: #3740

Signed-off-by: Bo Chen <chen.bo@intel.com>
This commit is contained in:
Bo Chen 2022-02-22 06:18:41 -08:00 committed by Sebastien Boeuf
parent 9cbb94b6d9
commit ec7d4e727a
3 changed files with 152 additions and 182 deletions

1
Cargo.lock generated
View File

@ -678,7 +678,6 @@ version = "0.1.0"
dependencies = [ dependencies = [
"clap", "clap",
"dirs 4.0.0", "dirs 4.0.0",
"lazy_static",
"serde", "serde",
"serde_derive", "serde_derive",
"serde_json", "serde_json",

View File

@ -8,7 +8,6 @@ build = "build.rs"
[dependencies] [dependencies]
clap = { version = "3.1.2", features = ["wrap_help","cargo"] } clap = { version = "3.1.2", features = ["wrap_help","cargo"] }
dirs = "4.0.0" dirs = "4.0.0"
lazy_static= "1.4.0"
serde = { version = "1.0.136", features = ["rc"] } serde = { version = "1.0.136", features = ["rc"] }
serde_derive = "1.0.136" serde_derive = "1.0.136"
serde_json = "1.0.78" serde_json = "1.0.78"

View File

@ -1,6 +1,4 @@
// Custom harness to run performance tests // Custom harness to run performance tests
#[macro_use]
extern crate lazy_static;
extern crate test_infra; extern crate test_infra;
#[macro_use(crate_authors)] #[macro_use(crate_authors)]
extern crate clap; extern crate clap;
@ -10,15 +8,7 @@ mod performance_tests;
use clap::{Arg, Command as ClapCommand}; use clap::{Arg, Command as ClapCommand};
use performance_tests::*; use performance_tests::*;
use serde_derive::{Deserialize, Serialize}; use serde_derive::{Deserialize, Serialize};
use std::{ use std::{env, fmt, process::Command, sync::mpsc::channel, thread, time::Duration};
collections::HashSet,
env, fmt,
hash::{Hash, Hasher},
process::Command,
sync::mpsc::channel,
thread,
time::Duration,
};
use thiserror::Error; use thiserror::Error;
#[derive(Error, Debug)] #[derive(Error, Debug)]
@ -125,15 +115,15 @@ impl fmt::Display for PerformanceTestControl {
} }
} }
impl Default for PerformanceTestControl { impl PerformanceTestControl {
fn default() -> Self { const fn default() -> Self {
Self { Self {
test_time: 10, test_time: 10,
test_iterations: 30, test_iterations: 30,
queue_num: Default::default(), queue_num: None,
queue_size: Default::default(), queue_size: None,
net_rx: Default::default(), net_rx: None,
fio_ops: Default::default(), fio_ops: None,
} }
} }
} }
@ -147,20 +137,6 @@ struct PerformanceTest {
pub control: PerformanceTestControl, pub control: PerformanceTestControl,
} }
impl Hash for PerformanceTest {
fn hash<H: Hasher>(&self, state: &mut H) {
self.name.hash(state);
}
}
impl PartialEq for PerformanceTest {
fn eq(&self, other: &Self) -> bool {
self.name == other.name
}
}
impl Eq for PerformanceTest {}
impl PerformanceTest { impl PerformanceTest {
pub fn run(&self) -> PerformanceTestResult { pub fn run(&self) -> PerformanceTestResult {
let mut metrics = Vec::new(); let mut metrics = Vec::new();
@ -219,155 +195,151 @@ fn std_deviation(data: &[f64]) -> Option<f64> {
} }
} }
lazy_static! { const TEST_LIST: [PerformanceTest; 15] = [
static ref TEST_LIST: HashSet<PerformanceTest> = { PerformanceTest {
let mut m = HashSet::new(); name: "performance_boot_time",
m.insert(PerformanceTest { func_ptr: performance_boot_time,
name: "performance_boot_time", control: PerformanceTestControl {
func_ptr: performance_boot_time, test_time: 2,
control: PerformanceTestControl { test_iterations: 10,
test_time: 2, ..PerformanceTestControl::default()
test_iterations: 10, },
..Default::default() },
} PerformanceTest {
}); name: "performance_boot_time_pmem",
m.insert(PerformanceTest { func_ptr: performance_boot_time_pmem,
name: "performance_boot_time_pmem", control: PerformanceTestControl {
func_ptr: performance_boot_time_pmem, test_time: 2,
control: PerformanceTestControl { test_iterations: 10,
test_time: 2, ..PerformanceTestControl::default()
test_iterations: 10, },
..Default::default() },
} PerformanceTest {
}); name: "performance_virtio_net_latency",
m.insert(PerformanceTest { func_ptr: performance_net_latency,
name: "performance_virtio_net_latency", control: PerformanceTestControl::default(),
func_ptr: performance_net_latency, },
control: Default::default(), PerformanceTest {
}); name: "performance_virtio_net_throughput_bps_single_queue_rx",
m.insert(PerformanceTest { func_ptr: performance_net_throughput,
name: "performance_virtio_net_throughput_bps_single_queue_rx", control: PerformanceTestControl {
func_ptr: performance_net_throughput, queue_num: Some(1), // used as 'queue_pairs'
control: PerformanceTestControl { queue_size: Some(256),
queue_num: Some(1), // used as 'queue_pairs' net_rx: Some(true),
queue_size: Some(256), ..PerformanceTestControl::default()
net_rx: Some(true), },
..Default::default() },
} PerformanceTest {
}); name: "performance_virtio_net_throughput_bps_single_queue_tx",
m.insert(PerformanceTest { func_ptr: performance_net_throughput,
name: "performance_virtio_net_throughput_bps_single_queue_tx", control: PerformanceTestControl {
func_ptr: performance_net_throughput, queue_num: Some(1), // used as 'queue_pairs'
control: PerformanceTestControl { queue_size: Some(256),
queue_num: Some(1), // used as 'queue_pairs' net_rx: Some(false),
queue_size: Some(256), ..PerformanceTestControl::default()
net_rx: Some(false), },
..Default::default() },
} PerformanceTest {
}); name: "performance_virtio_net_throughput_bps_multi_queue_rx",
m.insert(PerformanceTest { func_ptr: performance_net_throughput,
name: "performance_virtio_net_throughput_bps_multi_queue_rx", control: PerformanceTestControl {
func_ptr: performance_net_throughput, queue_num: Some(2), // used as 'queue_pairs'
control: PerformanceTestControl { queue_size: Some(1024),
queue_num: Some(2), // used as 'queue_pairs' net_rx: Some(true),
queue_size: Some(1024), ..PerformanceTestControl::default()
net_rx: Some(true), },
..Default::default() },
} PerformanceTest {
}); name: "performance_virtio_net_throughput_bps_multi_queue_tx",
m.insert(PerformanceTest { func_ptr: performance_net_throughput,
name: "performance_virtio_net_throughput_bps_multi_queue_tx", control: PerformanceTestControl {
func_ptr: performance_net_throughput, queue_num: Some(2), // used as 'queue_pairs'
control: PerformanceTestControl { queue_size: Some(1024),
queue_num: Some(2), // used as 'queue_pairs' net_rx: Some(false),
queue_size: Some(1024), ..PerformanceTestControl::default()
net_rx: Some(false), },
..Default::default() },
} PerformanceTest {
}); name: "performance_block_io_bps_read",
m.insert(PerformanceTest { func_ptr: performance_block_io,
name: "performance_block_io_bps_read", control: PerformanceTestControl {
func_ptr: performance_block_io, queue_num: Some(1),
control: PerformanceTestControl { queue_size: Some(1024),
queue_num: Some(1), fio_ops: Some(FioOps::Read),
queue_size: Some(1024), ..PerformanceTestControl::default()
fio_ops: Some(FioOps::Read), },
..Default::default() },
} PerformanceTest {
}); name: "performance_block_io_bps_write",
m.insert(PerformanceTest { func_ptr: performance_block_io,
name: "performance_block_io_bps_write", control: PerformanceTestControl {
func_ptr: performance_block_io, queue_num: Some(1),
control: PerformanceTestControl { queue_size: Some(1024),
queue_num: Some(1), fio_ops: Some(FioOps::Write),
queue_size: Some(1024), ..PerformanceTestControl::default()
fio_ops: Some(FioOps::Write), },
..Default::default() },
} PerformanceTest {
}); name: "performance_block_io_bps_random_read",
m.insert(PerformanceTest { func_ptr: performance_block_io,
name: "performance_block_io_bps_random_read", control: PerformanceTestControl {
func_ptr: performance_block_io, queue_num: Some(1),
control: PerformanceTestControl { queue_size: Some(1024),
queue_num: Some(1), fio_ops: Some(FioOps::RandomRead),
queue_size: Some(1024), ..PerformanceTestControl::default()
fio_ops: Some(FioOps::RandomRead), },
..Default::default() },
} PerformanceTest {
}); name: "performance_block_io_bps_random_write",
m.insert(PerformanceTest { func_ptr: performance_block_io,
name: "performance_block_io_bps_random_write", control: PerformanceTestControl {
func_ptr: performance_block_io, queue_num: Some(1),
control: PerformanceTestControl { queue_size: Some(1024),
queue_num: Some(1), fio_ops: Some(FioOps::RandomWrite),
queue_size: Some(1024), ..PerformanceTestControl::default()
fio_ops: Some(FioOps::RandomWrite), },
..Default::default() },
} PerformanceTest {
}); name: "performance_block_io_bps_multi_queue_read",
m.insert(PerformanceTest { func_ptr: performance_block_io,
name: "performance_block_io_bps_multi_queue_read", control: PerformanceTestControl {
func_ptr: performance_block_io, queue_num: Some(2),
control: PerformanceTestControl { queue_size: Some(1024),
queue_num: Some(2), fio_ops: Some(FioOps::Read),
queue_size: Some(1024), ..PerformanceTestControl::default()
fio_ops: Some(FioOps::Read), },
..Default::default() },
} PerformanceTest {
}); name: "performance_block_io_bps_multi_queue_write",
m.insert(PerformanceTest { func_ptr: performance_block_io,
name: "performance_block_io_bps_multi_queue_write", control: PerformanceTestControl {
func_ptr: performance_block_io, queue_num: Some(2),
control: PerformanceTestControl { queue_size: Some(1024),
queue_num: Some(2), fio_ops: Some(FioOps::Write),
queue_size: Some(1024), ..PerformanceTestControl::default()
fio_ops: Some(FioOps::Write), },
..Default::default() },
} PerformanceTest {
}); name: "performance_block_io_bps_multi_queue_random_read",
m.insert(PerformanceTest { func_ptr: performance_block_io,
name: "performance_block_io_bps_multi_queue_random_read", control: PerformanceTestControl {
func_ptr: performance_block_io, queue_num: Some(2),
control: PerformanceTestControl { queue_size: Some(1024),
queue_num: Some(2), fio_ops: Some(FioOps::RandomRead),
queue_size: Some(1024), ..PerformanceTestControl::default()
fio_ops: Some(FioOps::RandomRead), },
..Default::default() },
} PerformanceTest {
}); name: "performance_block_io_bps_multi_queue_random_write",
m.insert(PerformanceTest { func_ptr: performance_block_io,
name: "performance_block_io_bps_multi_queue_random_write", control: PerformanceTestControl {
func_ptr: performance_block_io, queue_num: Some(2),
control: PerformanceTestControl { queue_size: Some(1024),
queue_num: Some(2), fio_ops: Some(FioOps::RandomWrite),
queue_size: Some(1024), ..PerformanceTestControl::default()
fio_ops: Some(FioOps::RandomWrite), },
..Default::default() },
} ];
});
m
};
}
fn run_test_with_timetout(test: &'static PerformanceTest) -> Result<PerformanceTestResult, Error> { fn run_test_with_timetout(test: &'static PerformanceTest) -> Result<PerformanceTestResult, Error> {
let (sender, receiver) = channel::<Result<PerformanceTestResult, Error>>(); let (sender, receiver) = channel::<Result<PerformanceTestResult, Error>>();