diff --git a/performance-metrics/src/main.rs b/performance-metrics/src/main.rs index bba89cc4f..79c0699cf 100644 --- a/performance-metrics/src/main.rs +++ b/performance-metrics/src/main.rs @@ -162,6 +162,13 @@ impl fmt::Display for PerformanceTestOverrides { } } +#[derive(Clone)] +pub struct BlockControl { + pub fio_ops: FioOps, + pub bandwidth: bool, + pub test_file: &'static str, +} + #[derive(Clone)] pub struct PerformanceTestControl { test_timeout: u32, @@ -169,7 +176,7 @@ pub struct PerformanceTestControl { num_queues: Option, queue_size: Option, net_control: Option<(bool, bool)>, // First bool is for RX(true)/TX(false), second bool is for bandwidth or PPS - fio_control: Option<(FioOps, bool)>, // Second parameter controls whether we want bandwidth or IOPS + block_control: Option, num_boot_vcpus: Option, } @@ -189,9 +196,11 @@ impl fmt::Display for PerformanceTestControl { let (rx, bw) = o; output = format!("{output}, rx = {rx}, bandwidth = {bw}"); } - if let Some(o) = &self.fio_control { - let (ops, bw) = o; - output = format!("{output}, fio_ops = {ops}, bandwidth = {bw}"); + if let Some(o) = &self.block_control { + output = format!( + "{output}, fio_ops = {}, bandwidth = {}, test_file = {}", + o.fio_ops, o.bandwidth, o.test_file + ); } write!(f, "{output}") @@ -206,7 +215,7 @@ impl PerformanceTestControl { num_queues: None, queue_size: None, net_control: None, - fio_control: None, + block_control: None, num_boot_vcpus: Some(1), } } @@ -467,7 +476,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(1), queue_size: Some(128), - fio_control: Some((FioOps::Read, true)), + block_control: Some(BlockControl { + fio_ops: FioOps::Read, + bandwidth: true, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::Bps_to_MiBps, @@ -478,7 +491,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(1), queue_size: Some(128), - fio_control: Some((FioOps::Write, true)), + block_control: Some(BlockControl { + fio_ops: FioOps::Write, + bandwidth: true, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::Bps_to_MiBps, @@ -489,7 +506,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(1), queue_size: Some(128), - fio_control: Some((FioOps::RandomRead, true)), + block_control: Some(BlockControl { + fio_ops: FioOps::RandomRead, + bandwidth: true, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::Bps_to_MiBps, @@ -500,7 +521,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(1), queue_size: Some(128), - fio_control: Some((FioOps::RandomWrite, true)), + block_control: Some(BlockControl { + fio_ops: FioOps::RandomWrite, + bandwidth: true, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::Bps_to_MiBps, @@ -511,7 +536,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(2), queue_size: Some(128), - fio_control: Some((FioOps::Read, true)), + block_control: Some(BlockControl { + fio_ops: FioOps::Read, + bandwidth: true, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::Bps_to_MiBps, @@ -522,7 +551,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(2), queue_size: Some(128), - fio_control: Some((FioOps::Write, true)), + block_control: Some(BlockControl { + fio_ops: FioOps::Write, + bandwidth: true, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::Bps_to_MiBps, @@ -533,7 +566,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(2), queue_size: Some(128), - fio_control: Some((FioOps::RandomRead, true)), + block_control: Some(BlockControl { + fio_ops: FioOps::RandomRead, + bandwidth: true, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::Bps_to_MiBps, @@ -544,7 +581,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(2), queue_size: Some(128), - fio_control: Some((FioOps::RandomWrite, true)), + block_control: Some(BlockControl { + fio_ops: FioOps::RandomWrite, + bandwidth: true, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::Bps_to_MiBps, @@ -555,7 +596,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(1), queue_size: Some(128), - fio_control: Some((FioOps::Read, false)), + block_control: Some(BlockControl { + fio_ops: FioOps::Read, + bandwidth: false, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::identity, @@ -566,7 +611,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(1), queue_size: Some(128), - fio_control: Some((FioOps::Write, false)), + block_control: Some(BlockControl { + fio_ops: FioOps::Write, + bandwidth: false, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::identity, @@ -577,7 +626,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(1), queue_size: Some(128), - fio_control: Some((FioOps::RandomRead, false)), + block_control: Some(BlockControl { + fio_ops: FioOps::RandomRead, + bandwidth: false, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::identity, @@ -588,7 +641,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(1), queue_size: Some(128), - fio_control: Some((FioOps::RandomWrite, false)), + block_control: Some(BlockControl { + fio_ops: FioOps::RandomWrite, + bandwidth: false, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::identity, @@ -599,7 +656,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(2), queue_size: Some(128), - fio_control: Some((FioOps::Read, false)), + block_control: Some(BlockControl { + fio_ops: FioOps::Read, + bandwidth: false, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::identity, @@ -610,7 +671,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(2), queue_size: Some(128), - fio_control: Some((FioOps::Write, false)), + block_control: Some(BlockControl { + fio_ops: FioOps::Write, + bandwidth: false, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::identity, @@ -621,7 +686,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(2), queue_size: Some(128), - fio_control: Some((FioOps::RandomRead, false)), + block_control: Some(BlockControl { + fio_ops: FioOps::RandomRead, + bandwidth: false, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::identity, @@ -632,7 +701,11 @@ const TEST_LIST: [PerformanceTest; 30] = [ control: PerformanceTestControl { num_queues: Some(2), queue_size: Some(128), - fio_control: Some((FioOps::RandomWrite, false)), + block_control: Some(BlockControl { + fio_ops: FioOps::RandomWrite, + bandwidth: false, + test_file: BLK_IO_TEST_IMG, + }), ..PerformanceTestControl::default() }, unit_adjuster: adjuster::identity, diff --git a/performance-metrics/src/performance_tests.rs b/performance-metrics/src/performance_tests.rs index e16bd938e..049310a09 100644 --- a/performance-metrics/src/performance_tests.rs +++ b/performance-metrics/src/performance_tests.rs @@ -32,7 +32,7 @@ enum Error { // The test image cannot be created on tmpfs (e.g. /tmp) filesystem, // as tmpfs does not support O_DIRECT -const BLK_IO_TEST_IMG: &str = "/var/tmp/ch-blk-io-test.img"; +pub const BLK_IO_TEST_IMG: &str = "/var/tmp/ch-blk-io-test.img"; pub fn init_tests(overrides: &PerformanceTestOverrides) { let mut cmd = format!("dd if=/dev/zero of={BLK_IO_TEST_IMG} bs=1M count=4096"); @@ -366,7 +366,10 @@ pub fn performance_block_io(control: &PerformanceTestControl) -> f64 { let test_timeout = control.test_timeout; let num_queues = control.num_queues.unwrap(); let queue_size = control.queue_size.unwrap(); - let (fio_ops, bandwidth) = control.fio_control.as_ref().unwrap(); + let block_control = control.block_control.as_ref().unwrap(); + let fio_ops = &block_control.fio_ops; + let bandwidth = block_control.bandwidth; + let test_file = block_control.test_file; let focal = UbuntuDiskConfig::new(FOCAL_IMAGE_NAME.to_string()); let guest = performance_test_new_guest(Box::new(focal)); @@ -395,8 +398,7 @@ pub fn performance_block_io(control: &PerformanceTestControl) -> f64 { guest.disk_config.disk(DiskType::CloudInit).unwrap() ) .as_str(), - format!("path={BLK_IO_TEST_IMG},queue_size={queue_size},num_queues={num_queues}") - .as_str(), + format!("path={test_file},queue_size={queue_size},num_queues={num_queues}").as_str(), ]) .default_net() .args(["--api-socket", &api_socket]) @@ -420,7 +422,7 @@ pub fn performance_block_io(control: &PerformanceTestControl) -> f64 { .unwrap(); // Parse fio output - if *bandwidth { + if bandwidth { parse_fio_output(&output, fio_ops, num_queues).unwrap() } else { parse_fio_output_iops(&output, fio_ops, num_queues).unwrap()