performance-metrics: Add qcow2 fsync micro benchmark

Add micro_bench_qcow_fsync which writes num_ops clusters into an
empty qcow2 image to dirty L2 and refcount metadata then times a
single fsync call that flushes all dirty tables to disk. This
isolates the metadata flush cost which scales with the number of
dirty L2 table entries and refcount blocks.

Two TEST_LIST entries: micro_block_qcow_fsync_64_us and
micro_block_qcow_fsync_256_us with 64 and 256 cluster workloads.

Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
This commit is contained in:
Anatol Belski
2026-03-15 14:17:55 +01:00
committed by Rob Bradford
parent c3312dca3f
commit e802c0d8b9
2 changed files with 55 additions and 1 deletions

View File

@@ -378,7 +378,7 @@ mod adjuster {
}
}
const TEST_LIST: [PerformanceTest; 68] = [
const TEST_LIST: [PerformanceTest; 70] = [
PerformanceTest {
name: "boot_time_ms",
func_ptr: performance_boot_time,
@@ -1325,6 +1325,30 @@ const TEST_LIST: [PerformanceTest; 68] = [
},
unit_adjuster: adjuster::s_to_us,
},
PerformanceTest {
name: "micro_block_qcow_fsync_128_us",
func_ptr: micro_bench_block::micro_bench_qcow_fsync,
control: PerformanceTestControl {
test_timeout: 10,
test_iterations: 20,
warmup_iterations: 5,
num_ops: Some(128),
..PerformanceTestControl::default()
},
unit_adjuster: adjuster::s_to_us,
},
PerformanceTest {
name: "micro_block_qcow_fsync_256_us",
func_ptr: micro_bench_block::micro_bench_qcow_fsync,
control: PerformanceTestControl {
test_timeout: 10,
test_iterations: 20,
warmup_iterations: 5,
num_ops: Some(256),
..PerformanceTestControl::default()
},
unit_adjuster: adjuster::s_to_us,
},
];
fn run_test_with_timeout(