From ec7d4e727a9cf5badce8c2bf3714848c501a8c7a Mon Sep 17 00:00:00 2001 From: Bo Chen Date: Tue, 22 Feb 2022 06:18:41 -0800 Subject: [PATCH] performance-metrics: Store the test list in a const array Fixes: #3740 Signed-off-by: Bo Chen --- Cargo.lock | 1 - performance-metrics/Cargo.toml | 1 - performance-metrics/src/main.rs | 332 +++++++++++++++----------------- 3 files changed, 152 insertions(+), 182 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 67c9ea4aa..512517c63 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -678,7 +678,6 @@ version = "0.1.0" dependencies = [ "clap", "dirs 4.0.0", - "lazy_static", "serde", "serde_derive", "serde_json", diff --git a/performance-metrics/Cargo.toml b/performance-metrics/Cargo.toml index 56df56f82..9e3412fab 100644 --- a/performance-metrics/Cargo.toml +++ b/performance-metrics/Cargo.toml @@ -8,7 +8,6 @@ build = "build.rs" [dependencies] clap = { version = "3.1.2", features = ["wrap_help","cargo"] } dirs = "4.0.0" -lazy_static= "1.4.0" serde = { version = "1.0.136", features = ["rc"] } serde_derive = "1.0.136" serde_json = "1.0.78" diff --git a/performance-metrics/src/main.rs b/performance-metrics/src/main.rs index 6c60e26c2..1c5e99af4 100644 --- a/performance-metrics/src/main.rs +++ b/performance-metrics/src/main.rs @@ -1,6 +1,4 @@ // Custom harness to run performance tests -#[macro_use] -extern crate lazy_static; extern crate test_infra; #[macro_use(crate_authors)] extern crate clap; @@ -10,15 +8,7 @@ mod performance_tests; use clap::{Arg, Command as ClapCommand}; use performance_tests::*; use serde_derive::{Deserialize, Serialize}; -use std::{ - collections::HashSet, - env, fmt, - hash::{Hash, Hasher}, - process::Command, - sync::mpsc::channel, - thread, - time::Duration, -}; +use std::{env, fmt, process::Command, sync::mpsc::channel, thread, time::Duration}; use thiserror::Error; #[derive(Error, Debug)] @@ -125,15 +115,15 @@ impl fmt::Display for PerformanceTestControl { } } -impl Default for PerformanceTestControl { - fn default() -> Self { +impl PerformanceTestControl { + const fn default() -> Self { Self { test_time: 10, test_iterations: 30, - queue_num: Default::default(), - queue_size: Default::default(), - net_rx: Default::default(), - fio_ops: Default::default(), + queue_num: None, + queue_size: None, + net_rx: None, + fio_ops: None, } } } @@ -147,20 +137,6 @@ struct PerformanceTest { pub control: PerformanceTestControl, } -impl Hash for PerformanceTest { - fn hash(&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 { pub fn run(&self) -> PerformanceTestResult { let mut metrics = Vec::new(); @@ -219,155 +195,151 @@ fn std_deviation(data: &[f64]) -> Option { } } -lazy_static! { - static ref TEST_LIST: HashSet = { - let mut m = HashSet::new(); - m.insert(PerformanceTest { - name: "performance_boot_time", - func_ptr: performance_boot_time, - control: PerformanceTestControl { - test_time: 2, - test_iterations: 10, - ..Default::default() - } - }); - m.insert(PerformanceTest { - name: "performance_boot_time_pmem", - func_ptr: performance_boot_time_pmem, - control: PerformanceTestControl { - test_time: 2, - test_iterations: 10, - ..Default::default() - } - }); - m.insert(PerformanceTest { - name: "performance_virtio_net_latency", - func_ptr: performance_net_latency, - control: Default::default(), - }); - m.insert(PerformanceTest { - name: "performance_virtio_net_throughput_bps_single_queue_rx", - func_ptr: performance_net_throughput, - control: PerformanceTestControl { - queue_num: Some(1), // used as 'queue_pairs' - queue_size: Some(256), - net_rx: Some(true), - ..Default::default() - } - }); - m.insert(PerformanceTest { - name: "performance_virtio_net_throughput_bps_single_queue_tx", - func_ptr: performance_net_throughput, - control: PerformanceTestControl { - queue_num: Some(1), // used as 'queue_pairs' - queue_size: Some(256), - net_rx: Some(false), - ..Default::default() - } - }); - m.insert(PerformanceTest { - name: "performance_virtio_net_throughput_bps_multi_queue_rx", - func_ptr: performance_net_throughput, - control: PerformanceTestControl { - queue_num: Some(2), // used as 'queue_pairs' - queue_size: Some(1024), - net_rx: Some(true), - ..Default::default() - } - }); - m.insert(PerformanceTest { - name: "performance_virtio_net_throughput_bps_multi_queue_tx", - func_ptr: performance_net_throughput, - control: PerformanceTestControl { - queue_num: Some(2), // used as 'queue_pairs' - queue_size: Some(1024), - net_rx: Some(false), - ..Default::default() - } - }); - m.insert(PerformanceTest { - name: "performance_block_io_bps_read", - func_ptr: performance_block_io, - control: PerformanceTestControl { - queue_num: Some(1), - queue_size: Some(1024), - fio_ops: Some(FioOps::Read), - ..Default::default() - } - }); - m.insert(PerformanceTest { - name: "performance_block_io_bps_write", - func_ptr: performance_block_io, - control: PerformanceTestControl { - queue_num: Some(1), - queue_size: Some(1024), - fio_ops: Some(FioOps::Write), - ..Default::default() - } - }); - m.insert(PerformanceTest { - name: "performance_block_io_bps_random_read", - func_ptr: performance_block_io, - control: PerformanceTestControl { - queue_num: Some(1), - queue_size: Some(1024), - fio_ops: Some(FioOps::RandomRead), - ..Default::default() - } - }); - m.insert(PerformanceTest { - name: "performance_block_io_bps_random_write", - func_ptr: performance_block_io, - control: PerformanceTestControl { - queue_num: Some(1), - queue_size: Some(1024), - fio_ops: Some(FioOps::RandomWrite), - ..Default::default() - } - }); - m.insert(PerformanceTest { - name: "performance_block_io_bps_multi_queue_read", - func_ptr: performance_block_io, - control: PerformanceTestControl { - queue_num: Some(2), - queue_size: Some(1024), - fio_ops: Some(FioOps::Read), - ..Default::default() - } - }); - m.insert(PerformanceTest { - name: "performance_block_io_bps_multi_queue_write", - func_ptr: performance_block_io, - control: PerformanceTestControl { - queue_num: Some(2), - queue_size: Some(1024), - fio_ops: Some(FioOps::Write), - ..Default::default() - } - }); - m.insert(PerformanceTest { - name: "performance_block_io_bps_multi_queue_random_read", - func_ptr: performance_block_io, - control: PerformanceTestControl { - queue_num: Some(2), - queue_size: Some(1024), - fio_ops: Some(FioOps::RandomRead), - ..Default::default() - } - }); - m.insert(PerformanceTest { - name: "performance_block_io_bps_multi_queue_random_write", - func_ptr: performance_block_io, - control: PerformanceTestControl { - queue_num: Some(2), - queue_size: Some(1024), - fio_ops: Some(FioOps::RandomWrite), - ..Default::default() - } - }); - m - }; -} +const TEST_LIST: [PerformanceTest; 15] = [ + PerformanceTest { + name: "performance_boot_time", + func_ptr: performance_boot_time, + control: PerformanceTestControl { + test_time: 2, + test_iterations: 10, + ..PerformanceTestControl::default() + }, + }, + PerformanceTest { + name: "performance_boot_time_pmem", + func_ptr: performance_boot_time_pmem, + control: PerformanceTestControl { + test_time: 2, + test_iterations: 10, + ..PerformanceTestControl::default() + }, + }, + PerformanceTest { + name: "performance_virtio_net_latency", + func_ptr: performance_net_latency, + control: PerformanceTestControl::default(), + }, + PerformanceTest { + name: "performance_virtio_net_throughput_bps_single_queue_rx", + func_ptr: performance_net_throughput, + control: PerformanceTestControl { + queue_num: Some(1), // used as 'queue_pairs' + queue_size: Some(256), + net_rx: Some(true), + ..PerformanceTestControl::default() + }, + }, + PerformanceTest { + name: "performance_virtio_net_throughput_bps_single_queue_tx", + func_ptr: performance_net_throughput, + control: PerformanceTestControl { + queue_num: Some(1), // used as 'queue_pairs' + queue_size: Some(256), + net_rx: Some(false), + ..PerformanceTestControl::default() + }, + }, + PerformanceTest { + name: "performance_virtio_net_throughput_bps_multi_queue_rx", + func_ptr: performance_net_throughput, + control: PerformanceTestControl { + queue_num: Some(2), // used as 'queue_pairs' + queue_size: Some(1024), + net_rx: Some(true), + ..PerformanceTestControl::default() + }, + }, + PerformanceTest { + name: "performance_virtio_net_throughput_bps_multi_queue_tx", + func_ptr: performance_net_throughput, + control: PerformanceTestControl { + queue_num: Some(2), // used as 'queue_pairs' + queue_size: Some(1024), + net_rx: Some(false), + ..PerformanceTestControl::default() + }, + }, + PerformanceTest { + name: "performance_block_io_bps_read", + func_ptr: performance_block_io, + control: PerformanceTestControl { + queue_num: Some(1), + queue_size: Some(1024), + fio_ops: Some(FioOps::Read), + ..PerformanceTestControl::default() + }, + }, + PerformanceTest { + name: "performance_block_io_bps_write", + func_ptr: performance_block_io, + control: PerformanceTestControl { + queue_num: Some(1), + queue_size: Some(1024), + fio_ops: Some(FioOps::Write), + ..PerformanceTestControl::default() + }, + }, + PerformanceTest { + name: "performance_block_io_bps_random_read", + func_ptr: performance_block_io, + control: PerformanceTestControl { + queue_num: Some(1), + queue_size: Some(1024), + fio_ops: Some(FioOps::RandomRead), + ..PerformanceTestControl::default() + }, + }, + PerformanceTest { + name: "performance_block_io_bps_random_write", + func_ptr: performance_block_io, + control: PerformanceTestControl { + queue_num: Some(1), + queue_size: Some(1024), + fio_ops: Some(FioOps::RandomWrite), + ..PerformanceTestControl::default() + }, + }, + PerformanceTest { + name: "performance_block_io_bps_multi_queue_read", + func_ptr: performance_block_io, + control: PerformanceTestControl { + queue_num: Some(2), + queue_size: Some(1024), + fio_ops: Some(FioOps::Read), + ..PerformanceTestControl::default() + }, + }, + PerformanceTest { + name: "performance_block_io_bps_multi_queue_write", + func_ptr: performance_block_io, + control: PerformanceTestControl { + queue_num: Some(2), + queue_size: Some(1024), + fio_ops: Some(FioOps::Write), + ..PerformanceTestControl::default() + }, + }, + PerformanceTest { + name: "performance_block_io_bps_multi_queue_random_read", + func_ptr: performance_block_io, + control: PerformanceTestControl { + queue_num: Some(2), + queue_size: Some(1024), + fio_ops: Some(FioOps::RandomRead), + ..PerformanceTestControl::default() + }, + }, + PerformanceTest { + name: "performance_block_io_bps_multi_queue_random_write", + func_ptr: performance_block_io, + control: PerformanceTestControl { + queue_num: Some(2), + queue_size: Some(1024), + fio_ops: Some(FioOps::RandomWrite), + ..PerformanceTestControl::default() + }, + }, +]; fn run_test_with_timetout(test: &'static PerformanceTest) -> Result { let (sender, receiver) = channel::>();