From ddce329050f7df5b62e4944429a24fcbfa7fbc81 Mon Sep 17 00:00:00 2001 From: saibulusu Date: Sat, 9 Aug 2025 17:44:42 -0700 Subject: [PATCH 1/9] fio discovery profile v2 --- VERSION | 2 +- .../FIO/FioDiscoveryExecutorTests.cs | 90 ++++++++++++++---- .../FIO/FioDiscoveryExecutor.cs | 4 +- .../profiles/PERF-IO-FIO-DISCOVERY-v2.json | 93 +++++++++++++++++++ 4 files changed, 170 insertions(+), 19 deletions(-) create mode 100644 src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY-v2.json diff --git a/VERSION b/VERSION index 348fc11efe..ea4bd0fb3d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.1.12 +2.1.13 diff --git a/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioDiscoveryExecutorTests.cs b/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioDiscoveryExecutorTests.cs index 1db50e5d22..6188c6faa8 100644 --- a/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioDiscoveryExecutorTests.cs +++ b/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioDiscoveryExecutorTests.cs @@ -37,7 +37,7 @@ public void SetupTest() this.Parameters = new Dictionary { { nameof(FioDiscoveryExecutor.Scenario), "AnyScenario_ReadOrWrite_AnyBlockSize" }, - { nameof(FioDiscoveryExecutor.CommandLine), "--ioengine=libaio --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=30 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json" }, + { nameof(FioDiscoveryExecutor.CommandLine), "--ioengine=libaio --size={FileSize} --direct={DirectIO} --ramp_time=30 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json" }, { nameof(FioDiscoveryExecutor.BlockSize), "4K" }, { nameof(FioDiscoveryExecutor.DiskFillSize), "140G" }, { nameof(FioDiscoveryExecutor.FileSize), "134G" }, @@ -51,7 +51,6 @@ public void SetupTest() { nameof(FioDiscoveryExecutor.PackageName), "fio" }, { nameof(FioDiscoveryExecutor.DiskFilter), "BiggestSize" } }; - this.FileSystem.Setup(fe => fe.File.Exists(It.IsAny())).Returns(true); this.defaultOutput.Clear(); @@ -173,9 +172,9 @@ public async Task FioDiscoveryExecutorExecutesAsExpectedInSingleProcessModel() List expectedCommandLines = new List { - $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z] --filename=/dev/sd[a-z] --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z] --filename=/dev/sd[a-z] --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z] --filename=/dev/sd[a-z] --filename=/dev/sd[a-z]" + $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z] --filename=/dev/sd[a-z] --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z] --filename=/dev/sd[a-z] --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z] --filename=/dev/sd[a-z] --filename=/dev/sd[a-z]" }; using (TestFioDiscoveryExecutor executor = new TestFioDiscoveryExecutor(this.Dependencies, this.Parameters)) @@ -195,15 +194,15 @@ public async Task FioDiscoveryExecutorExecutesAsExpectedInSingleProcessPerDiskMo List expectedCommandLines = new List { - $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]" + $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]" }; using (TestFioDiscoveryExecutor executor = new TestFioDiscoveryExecutor(this.Dependencies, this.Parameters)) @@ -284,9 +283,9 @@ public async Task FioDiscoveryExecutorExecutesAsExpectedIfGroupIDIsRemoved() List expectedCommandLines = new List { $"sudo chmod", - $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sdc --filename=/dev/sdd --filename=/dev/sde", - $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sdc --filename=/dev/sdd --filename=/dev/sde", - $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sdc --filename=/dev/sdd --filename=/dev/sde" + $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sdc --filename=/dev/sdd --filename=/dev/sde", + $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sdc --filename=/dev/sdd --filename=/dev/sde", + $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sdc --filename=/dev/sdd --filename=/dev/sde" }; using (TestFioDiscoveryExecutor executor = new TestFioDiscoveryExecutor(this.Dependencies, this.Parameters)) @@ -299,6 +298,63 @@ public async Task FioDiscoveryExecutorExecutesAsExpectedIfGroupIDIsRemoved() } } + [Test] + public async Task FioDiscoveryExecutorExecutesAsExpectedWithMultipleBlockSizeIOTypes() + { + this.Parameters[nameof(FioDiscoveryExecutor.BlockSize)] = "1K,4K"; + this.Parameters[nameof(FioDiscoveryExecutor.IOType)] = "randwrite,randread"; + this.Parameters[nameof(FioDiscoveryExecutor.ProcessModel)] = WorkloadProcessModel.SingleProcessPerDisk; + + List expectedCommandLines = new List + { + $"--name=fio_discovery_randwrite_134G_1K_d1_th1 --numjobs=1 --iodepth=1 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_1K_d1_th1 --numjobs=1 --iodepth=1 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_1K_d1_th1 --numjobs=1 --iodepth=1 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_1K_d1_th4 --numjobs=4 --iodepth=1 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_1K_d1_th4 --numjobs=4 --iodepth=1 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_1K_d1_th4 --numjobs=4 --iodepth=1 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_1K_d2_th8 --numjobs=8 --iodepth=2 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_1K_d2_th8 --numjobs=8 --iodepth=2 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_1K_d2_th8 --numjobs=8 --iodepth=2 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_1K_d1_th1 --numjobs=1 --iodepth=1 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_1K_d1_th1 --numjobs=1 --iodepth=1 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_1K_d1_th1 --numjobs=1 --iodepth=1 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_1K_d1_th4 --numjobs=4 --iodepth=1 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_1K_d1_th4 --numjobs=4 --iodepth=1 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_1K_d1_th4 --numjobs=4 --iodepth=1 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_1K_d2_th8 --numjobs=8 --iodepth=2 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_1K_d2_th8 --numjobs=8 --iodepth=2 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_1K_d2_th8 --numjobs=8 --iodepth=2 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randread_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]" + }; + + using (TestFioDiscoveryExecutor executor = new TestFioDiscoveryExecutor(this.Dependencies, this.Parameters)) + { + await executor.ExecuteAsync(CancellationToken.None) + .ConfigureAwait(false); + + Assert.AreEqual(1 + expectedCommandLines.Count, this.ProcessManager.Commands.Count()); + Assert.IsTrue(this.ProcessManager.CommandsExecuted(expectedCommandLines.ToArray())); + } + } + private class TestFioDiscoveryExecutor : FioDiscoveryExecutor { public TestFioDiscoveryExecutor(IServiceCollection dependencies, IDictionary parameters) diff --git a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs index cec4862034..f27443b5ae 100644 --- a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs @@ -244,7 +244,7 @@ await this.Logger.LogMessageAsync($"{this.TypeName}.ExecuteVariation", variation int direct = this.DirectIO; commandLine = this.ApplyParameter(commandLine, nameof(this.DirectIO), direct); - commandLine = $"--name={testName} --numjobs={numJobs} --iodepth={queueDepthPerThread} {commandLine}"; + commandLine = $"--name={testName} --numjobs={numJobs} --iodepth={queueDepthPerThread} --bs={blockSize} --rw={ioType} {commandLine}"; string filePath = string.Join(',', disksToTest.Select(disk => disk.DevicePath).ToArray()); @@ -254,6 +254,8 @@ await this.Logger.LogMessageAsync($"{this.TypeName}.ExecuteVariation", variation [nameof(this.DurationSec).CamelCased()] = this.DurationSec, [nameof(this.ProfileIteration).CamelCased()] = this.ProfileIteration, [nameof(this.ProfileIterationStartTime).CamelCased()] = this.ProfileIterationStartTime, + [nameof(this.BlockSize).CamelCased()] = blockSize, + [nameof(this.IOType).CamelCased()] = ioType, [nameof(blockSizeKiB).CamelCased()] = blockSizeKiB, [nameof(queueDepth).CamelCased()] = queueDepth, [nameof(ioType).CamelCased()] = ioType, diff --git a/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY-v2.json b/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY-v2.json new file mode 100644 index 0000000000..031f6f50cd --- /dev/null +++ b/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY-v2.json @@ -0,0 +1,93 @@ +{ + "Description": "FIO I/O Stress Performance Workload", + "Metadata": { + "RecommendedMinimumExecutionTime": "02:00:00", + "SupportedPlatforms": "linux-x64,linux-arm64,win-x64", + "SupportedOperatingSystems": "CBL-Mariner,CentOS,Debian,RedHat,Suse,Ubuntu,Windows" + }, + "Parameters": { + "DiskFillSize": "134G", + "FileSize": "134G", + "DiskFilter": "BiggestSize", + "ProcessModel": "SingleProcess", + "MaxThreads": "8", + "QueueDepths": "1,4,16,64,256,1024", + "BlockSize": "1k,4k,8k", + "IOType": "randread,randwrite", + "Engine": "{calculate(\"{Platform}\".StartsWith(\"linux\") ? \"libaio\" : \"windowsaio\")}", + "DirectIO": true, + "InitializeDisksInParallel": true + }, + "Actions": [ + { + "Type": "FioDiscoveryExecutor", + "Parameters": { + "Scenario": "DiskFill", + "CommandLine": "--name=disk_fill --size={DiskFillSize} --rw=write --bs=256K --numjobs=1 --iodepth=64 --ioengine={Engine} --fallocate=none --refill_buffers=1 --direct=1 --overwrite=1 --output-format=json", + "Engine": "$.Parameters.Engine", + "PackageName": "fio", + "ProcessModel": "SingleProcessPerDisk", + "DiskFillSize": "$.Parameters.DiskFillSize", + "DiskFill": true, + "DeleteTestFilesOnFinish": false, + "DiskFilter": "$.Parameters.DiskFilter" + } + }, + { + "Type": "FioDiscoveryExecutor", + "Parameters": { + "Scenario": "FIOAction", + "BlockSize": "$.Parameters.BlockSize", + "CommandLine": "--ioengine={Engine} --size={FileSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "Engine": "$.Parameters.Engine", + "FileSize": "$.Parameters.FileSize", + "DurationSec": "180", + "IOType": "$.Parameters.IOType", + "MaxThreads": "$.Parameters.MaxThreads", + "PackageName": "fio", + "ProcessModel": "$.Parameters.ProcessModel", + "QueueDepths": "$.Parameters.QueueDepths", + "DirectIO": "$.Parameters.DirectIO", + "DeleteTestFilesOnFinish": false, + "DiskFilter": "$.Parameters.DiskFilter", + "Tags": "IO,FIO,Discovery,randread,randwrite,read,write" + } + } + ], + "Dependencies": [ + { + "Type": "LinuxPackageInstallation", + "Parameters": { + "Scenario": "InstallLinuxPackages", + "Packages-Apt": "fio", + "Packages-Dnf": "fio,lshw,parted", + "Packages-Yum": "fio", + "Packages-Zypper": "fio" + } + }, + { + "Type": "FormatDisks", + "Parameters": { + "Scenario": "InitializeDisks" + } + }, + { + "Type": "MountDisks", + "Parameters": { + "Scenario": "CreateMountPoints", + "DiskFilter": "$.Parameters.DiskFilter" + } + }, + { + "Type": "DependencyPackageInstallation", + "Parameters": { + "Scenario": "InstallFIOPackage", + "SupportedPlatforms": "win-x64", + "BlobContainer": "packages", + "BlobName": "fio.3.30.0.zip", + "PackageName": "fio", + "Extract": true + } + } + ] +} \ No newline at end of file From 484651f1dfb69981f0de440b366c0bf8d4875d8b Mon Sep 17 00:00:00 2001 From: saibulusu Date: Sat, 9 Aug 2025 17:59:35 -0700 Subject: [PATCH 2/9] Removing unnecessary metrics metadata fields. --- .../VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs index f27443b5ae..5abf4d6c58 100644 --- a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs @@ -254,8 +254,6 @@ await this.Logger.LogMessageAsync($"{this.TypeName}.ExecuteVariation", variation [nameof(this.DurationSec).CamelCased()] = this.DurationSec, [nameof(this.ProfileIteration).CamelCased()] = this.ProfileIteration, [nameof(this.ProfileIterationStartTime).CamelCased()] = this.ProfileIterationStartTime, - [nameof(this.BlockSize).CamelCased()] = blockSize, - [nameof(this.IOType).CamelCased()] = ioType, [nameof(blockSizeKiB).CamelCased()] = blockSizeKiB, [nameof(queueDepth).CamelCased()] = queueDepth, [nameof(ioType).CamelCased()] = ioType, From aa795213d42bbb1e0ba2e4a475b2250aaa0fccd9 Mon Sep 17 00:00:00 2001 From: saibulusu Date: Sat, 9 Aug 2025 20:09:03 -0700 Subject: [PATCH 3/9] Fixing a unit test and adding a full set of parameters for fio discovery v2. --- .../FioDiscoveryProfileTests.cs | 179 ++++-------------- .../profiles/PERF-IO-FIO-DISCOVERY-v2.json | 4 +- 2 files changed, 34 insertions(+), 149 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioDiscoveryProfileTests.cs b/src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioDiscoveryProfileTests.cs index 775c643ab7..999539edec 100644 --- a/src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioDiscoveryProfileTests.cs +++ b/src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioDiscoveryProfileTests.cs @@ -26,7 +26,7 @@ public void SetupFixture() } [Test] - [TestCase("PERF-IO-FIO-DISCOVERY.json")] + [TestCase("PERF-IO-FIO-DISCOVERY-v2.json")] public void FioDiscoveryWorkloadProfileParametersAreInlinedCorrectly(string profile) { this.mockFixture.Setup(PlatformID.Win32NT); @@ -37,7 +37,7 @@ public void FioDiscoveryWorkloadProfileParametersAreInlinedCorrectly(string prof } [Test] - [TestCase("PERF-IO-FIO-DISCOVERY.json")] + [TestCase("PERF-IO-FIO-DISCOVERY-v2.json")] public async Task FioDiscoveryWorkloadProfileInstallsTheExpectedDependenciesOnUnixPlatform(string profile) { // The disks are setup in a typical Azure VM scenario @@ -61,7 +61,7 @@ public async Task FioDiscoveryWorkloadProfileInstallsTheExpectedDependenciesOnUn } [Test] - [TestCase("PERF-IO-FIO-DISCOVERY.json")] + [TestCase("PERF-IO-FIO-DISCOVERY-v2.json")] public async Task FioDiscoveryWorkloadProfileExecutesTheExpectedWorkloadsOnUnixPlatform(string profile) { IEnumerable expectedCommands = FioDiscoveryProfileTests.GetFioProfileExpectedCommands(PlatformID.Unix); @@ -98,151 +98,36 @@ private static IEnumerable GetFioProfileExpectedCommands(PlatformID plat { return new List { + // this is not a complete list of the commands run by default using the FIO Discovery v2 profile "fio --name=disk_fill --size=134G --rw=write --bs=256K --numjobs=1 --iodepth=64 --ioengine=libaio --fallocate=none --refill_buffers=1 --direct=1 --overwrite=1 --output-format=json", - "fio --name=fio_discovery_randread_134G_4k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_4k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_4k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_4k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_4k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_4k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_8k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_8k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_8k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_8k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_8k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_8k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_16k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_16k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_16k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_16k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_16k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_16k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_64k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_64k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_64k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_64k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_64k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_64k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_256k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_256k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_256k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_256k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_256k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_256k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_1024k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_1024k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_1024k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_1024k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_1024k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_1024k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_4k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_4k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_4k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_4k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randwrite --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_4k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randwrite --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_4k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randwrite --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_8k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_8k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_8k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_8k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randwrite --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_8k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randwrite --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_8k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randwrite --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_16k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_16k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_16k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_16k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randwrite --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_16k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randwrite --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_16k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randwrite --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_64k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_64k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_64k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_64k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randwrite --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_64k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randwrite --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_64k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randwrite --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_256k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_256k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_256k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_256k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randwrite --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_256k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randwrite --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_256k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randwrite --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_1024k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_1024k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_1024k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_1024k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randwrite --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_1024k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randwrite --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randwrite_134G_1024k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randwrite --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_4k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_4k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_4k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=read --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_4k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=read --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_4k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=read --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_4k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=read --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_8k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_8k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_8k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=read --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_8k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=read --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_8k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=read --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_8k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=read --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_16k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_16k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_16k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=read --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_16k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=read --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_16k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=read --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_16k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=read --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_64k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_64k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_64k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=read --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_64k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=read --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_64k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=read --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_64k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=read --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_256k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_256k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_256k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=read --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_256k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=read --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_256k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=read --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_256k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=read --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_1024k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_1024k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_1024k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=read --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_1024k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=read --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_1024k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=read --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_read_134G_1024k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=read --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_4k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_4k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_4k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=write --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_4k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=write --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_4k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=write --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_4k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=write --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_8k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_8k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_8k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=write --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_8k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=write --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_8k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=write --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_8k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=write --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_16k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_16k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_16k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=write --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_16k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=write --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_16k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=write --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_16k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=write --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_64k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_64k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_64k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=write --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_64k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=write --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_64k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=write --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_64k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=write --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_256k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_256k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_256k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=write --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_256k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=write --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_256k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=write --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_256k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=write --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_1024k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_1024k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_1024k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=write --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_1024k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=write --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_1024k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=write --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_write_134G_1024k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=write --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]" + "fio --name=fio_discovery_randread_134G_4k_d1_th1 --numjobs=1 --iodepth=1 --bs=4k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_4k_d1_th4 --numjobs=4 --iodepth=1 --bs=4k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_4k_d2_th8 --numjobs=8 --iodepth=2 --bs=4k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_4k_d8_th8 --numjobs=8 --iodepth=8 --bs=4k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_4k_d32_th8 --numjobs=8 --iodepth=32 --bs=4k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_4k_d128_th8 --numjobs=8 --iodepth=128 --bs=4k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_8k_d1_th1 --numjobs=1 --iodepth=1 --bs=8k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_8k_d1_th4 --numjobs=4 --iodepth=1 --bs=8k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_8k_d2_th8 --numjobs=8 --iodepth=2 --bs=8k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_8k_d8_th8 --numjobs=8 --iodepth=8 --bs=8k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_8k_d32_th8 --numjobs=8 --iodepth=32 --bs=8k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_8k_d128_th8 --numjobs=8 --iodepth=128 --bs=8k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_16k_d1_th1 --numjobs=1 --iodepth=1 --bs=16k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_16k_d1_th4 --numjobs=4 --iodepth=1 --bs=16k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_16k_d2_th8 --numjobs=8 --iodepth=2 --bs=16k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_16k_d8_th8 --numjobs=8 --iodepth=8 --bs=16k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_16k_d32_th8 --numjobs=8 --iodepth=32 --bs=16k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_16k_d128_th8 --numjobs=8 --iodepth=128 --bs=16k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_64k_d1_th1 --numjobs=1 --iodepth=1 --bs=64k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_64k_d1_th4 --numjobs=4 --iodepth=1 --bs=64k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_64k_d2_th8 --numjobs=8 --iodepth=2 --bs=64k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_64k_d8_th8 --numjobs=8 --iodepth=8 --bs=64k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_64k_d32_th8 --numjobs=8 --iodepth=32 --bs=64k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_64k_d128_th8 --numjobs=8 --iodepth=128 --bs=64k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_256k_d1_th1 --numjobs=1 --iodepth=1 --bs=256k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_256k_d1_th4 --numjobs=4 --iodepth=1 --bs=256k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_256k_d2_th8 --numjobs=8 --iodepth=2 --bs=256k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_256k_d8_th8 --numjobs=8 --iodepth=8 --bs=256k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]" }; } } diff --git a/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY-v2.json b/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY-v2.json index 031f6f50cd..ddc0d25187 100644 --- a/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY-v2.json +++ b/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY-v2.json @@ -12,8 +12,8 @@ "ProcessModel": "SingleProcess", "MaxThreads": "8", "QueueDepths": "1,4,16,64,256,1024", - "BlockSize": "1k,4k,8k", - "IOType": "randread,randwrite", + "BlockSize": "1k,4k,8k,16k,64k,256k,1024k", + "IOType": "randread,randwrite,read,write", "Engine": "{calculate(\"{Platform}\".StartsWith(\"linux\") ? \"libaio\" : \"windowsaio\")}", "DirectIO": true, "InitializeDisksInParallel": true From bc80cd0b6032f96c831757c9e79aa0b39d97e3ce Mon Sep 17 00:00:00 2001 From: saibulusu Date: Mon, 11 Aug 2025 12:35:48 -0700 Subject: [PATCH 4/9] Removing v2 profile, removing InitializeDisksInParallel parameter from fio profiles, expanding discovery profile to include block size of 1k, using IOType and BlockSize as strings instead of lists. --- .../FioDiscoveryProfileTests.cs | 203 +++++++++++++++--- .../FIO/FioDiscoveryExecutor.cs | 156 +++++++------- .../profiles/PERF-IO-FIO-DISCOVERY-v2.json | 93 -------- .../profiles/PERF-IO-FIO-DISCOVERY.json | 83 ++++++- .../profiles/PERF-IO-FIO-MULTITHROUGHPUT.json | 1 - 5 files changed, 327 insertions(+), 209 deletions(-) delete mode 100644 src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY-v2.json diff --git a/src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioDiscoveryProfileTests.cs b/src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioDiscoveryProfileTests.cs index 999539edec..980a83b146 100644 --- a/src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioDiscoveryProfileTests.cs +++ b/src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioDiscoveryProfileTests.cs @@ -26,7 +26,7 @@ public void SetupFixture() } [Test] - [TestCase("PERF-IO-FIO-DISCOVERY-v2.json")] + [TestCase("PERF-IO-FIO-DISCOVERY.json")] public void FioDiscoveryWorkloadProfileParametersAreInlinedCorrectly(string profile) { this.mockFixture.Setup(PlatformID.Win32NT); @@ -37,7 +37,7 @@ public void FioDiscoveryWorkloadProfileParametersAreInlinedCorrectly(string prof } [Test] - [TestCase("PERF-IO-FIO-DISCOVERY-v2.json")] + [TestCase("PERF-IO-FIO-DISCOVERY.json")] public async Task FioDiscoveryWorkloadProfileInstallsTheExpectedDependenciesOnUnixPlatform(string profile) { // The disks are setup in a typical Azure VM scenario @@ -61,7 +61,7 @@ public async Task FioDiscoveryWorkloadProfileInstallsTheExpectedDependenciesOnUn } [Test] - [TestCase("PERF-IO-FIO-DISCOVERY-v2.json")] + [TestCase("PERF-IO-FIO-DISCOVERY.json")] public async Task FioDiscoveryWorkloadProfileExecutesTheExpectedWorkloadsOnUnixPlatform(string profile) { IEnumerable expectedCommands = FioDiscoveryProfileTests.GetFioProfileExpectedCommands(PlatformID.Unix); @@ -98,36 +98,175 @@ private static IEnumerable GetFioProfileExpectedCommands(PlatformID plat { return new List { - // this is not a complete list of the commands run by default using the FIO Discovery v2 profile "fio --name=disk_fill --size=134G --rw=write --bs=256K --numjobs=1 --iodepth=64 --ioengine=libaio --fallocate=none --refill_buffers=1 --direct=1 --overwrite=1 --output-format=json", - "fio --name=fio_discovery_randread_134G_4k_d1_th1 --numjobs=1 --iodepth=1 --bs=4k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_4k_d1_th4 --numjobs=4 --iodepth=1 --bs=4k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_4k_d2_th8 --numjobs=8 --iodepth=2 --bs=4k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_4k_d8_th8 --numjobs=8 --iodepth=8 --bs=4k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_4k_d32_th8 --numjobs=8 --iodepth=32 --bs=4k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_4k_d128_th8 --numjobs=8 --iodepth=128 --bs=4k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_8k_d1_th1 --numjobs=1 --iodepth=1 --bs=8k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_8k_d1_th4 --numjobs=4 --iodepth=1 --bs=8k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_8k_d2_th8 --numjobs=8 --iodepth=2 --bs=8k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_8k_d8_th8 --numjobs=8 --iodepth=8 --bs=8k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_8k_d32_th8 --numjobs=8 --iodepth=32 --bs=8k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_8k_d128_th8 --numjobs=8 --iodepth=128 --bs=8k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_16k_d1_th1 --numjobs=1 --iodepth=1 --bs=16k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_16k_d1_th4 --numjobs=4 --iodepth=1 --bs=16k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_16k_d2_th8 --numjobs=8 --iodepth=2 --bs=16k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_16k_d8_th8 --numjobs=8 --iodepth=8 --bs=16k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_16k_d32_th8 --numjobs=8 --iodepth=32 --bs=16k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_16k_d128_th8 --numjobs=8 --iodepth=128 --bs=16k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_64k_d1_th1 --numjobs=1 --iodepth=1 --bs=64k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_64k_d1_th4 --numjobs=4 --iodepth=1 --bs=64k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_64k_d2_th8 --numjobs=8 --iodepth=2 --bs=64k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_64k_d8_th8 --numjobs=8 --iodepth=8 --bs=64k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_64k_d32_th8 --numjobs=8 --iodepth=32 --bs=64k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_64k_d128_th8 --numjobs=8 --iodepth=128 --bs=64k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_256k_d1_th1 --numjobs=1 --iodepth=1 --bs=256k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_256k_d1_th4 --numjobs=4 --iodepth=1 --bs=256k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_256k_d2_th8 --numjobs=8 --iodepth=2 --bs=256k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_256k_d8_th8 --numjobs=8 --iodepth=8 --bs=256k --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]" + "fio --name=fio_discovery_randread_134G_1k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_1k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_1k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_1k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_1k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_1k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_1k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_4k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_4k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_4k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_4k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_4k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_8k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_8k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_8k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_8k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_8k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_8k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_16k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_16k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_16k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_16k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_16k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_16k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_64k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_64k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_64k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_64k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_64k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_64k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_256k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_256k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_256k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_256k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_256k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_256k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_1024k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_1024k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_1024k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_1024k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_1024k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_1024k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_1k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_1k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_1k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_1k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randwrite --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_1k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randwrite --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_1k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randwrite --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_4k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_4k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_4k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_4k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randwrite --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_4k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randwrite --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_4k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randwrite --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_8k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_8k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_8k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_8k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randwrite --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_8k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randwrite --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_8k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randwrite --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_16k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_16k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_16k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_16k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randwrite --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_16k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randwrite --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_16k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randwrite --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_64k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_64k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_64k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_64k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randwrite --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_64k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randwrite --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_64k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randwrite --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_256k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_256k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_256k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_256k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randwrite --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_256k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randwrite --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_256k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randwrite --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_1024k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_1024k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_1024k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_1024k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randwrite --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_1024k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randwrite --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randwrite_134G_1024k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randwrite --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_1k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_1k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_1k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=read --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_1k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=read --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_1k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=read --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_1k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=read --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_4k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_4k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_4k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=read --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_4k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=read --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_4k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=read --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_4k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=read --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_8k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_8k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_8k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=read --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_8k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=read --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_8k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=read --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_8k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=read --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_16k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_16k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_16k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=read --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_16k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=read --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_16k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=read --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_16k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=read --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_64k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_64k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_64k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=read --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_64k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=read --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_64k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=read --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_64k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=read --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_256k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_256k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_256k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=read --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_256k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=read --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_256k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=read --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_256k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=read --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_1024k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_1024k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=read --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_1024k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=read --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_1024k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=read --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_1024k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=read --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_read_134G_1024k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=read --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_1k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_1k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_1k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=write --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_1k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=write --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_1k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=write --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_1k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=write --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_4k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_4k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_4k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=write --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_4k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=write --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_4k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=write --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_4k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=write --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_8k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_8k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_8k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=write --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_8k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=write --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_8k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=write --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_8k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=write --bs=8k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_16k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_16k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_16k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=write --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_16k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=write --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_16k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=write --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_16k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=write --bs=16k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_64k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_64k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_64k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=write --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_64k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=write --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_64k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=write --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_64k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=write --bs=64k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_256k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_256k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_256k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=write --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_256k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=write --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_256k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=write --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_256k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=write --bs=256k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_1024k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_1024k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=write --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_1024k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=write --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_1024k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=write --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_1024k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=write --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_write_134G_1024k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=write --bs=1024k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]" }; } } diff --git a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs index 5abf4d6c58..57c632ea25 100644 --- a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs @@ -42,11 +42,11 @@ public FioDiscoveryExecutor(IServiceCollection dependencies, IDictionary /// The Blocksizes list for discovery parameters. /// - public List BlockSize + public string BlockSize { get { - return this.Parameters.GetValue(nameof(this.BlockSize)).Split(VirtualClientComponent.CommonDelimiters).ToList(); + return this.Parameters.GetValue(nameof(this.BlockSize)); } } @@ -67,13 +67,13 @@ private set } /// - /// The IO types list whether it is randomRead,randomWrite,sequentialRead,sequentialWrite. + /// The IO type whether it is randomRead,randomWrite, read (sequential read), write (sequential write). /// - public List IOType + public string IOType { get { - return this.Parameters.GetValue(nameof(this.IOType)).Split(VirtualClientComponent.CommonDelimiters).ToList(); + return this.Parameters.GetValue(nameof(this.IOType)); } } @@ -209,95 +209,89 @@ protected override async Task ExecuteAsync(EventContext telemetryContext, Cancel List exceptions = new List(); foreach (int maxThreads in this.MaxThreads) { - foreach (string ioType in this.IOType) + foreach (int queueDepth in this.QueueDepths) { - foreach (string blockSize in this.BlockSize) + int variation = Interlocked.Increment(ref variationNumber); + if (!cancellationToken.IsCancellationRequested) { - foreach (int queueDepth in this.QueueDepths) - { - int variation = Interlocked.Increment(ref variationNumber); - if (!cancellationToken.IsCancellationRequested) - { - int numJobs = (queueDepth < maxThreads) ? queueDepth : maxThreads; - int queueDepthPerThread = (queueDepth + numJobs - 1) / numJobs; + int numJobs = (queueDepth < maxThreads) ? queueDepth : maxThreads; + int queueDepthPerThread = (queueDepth + numJobs - 1) / numJobs; - // e.g. fio_discovery_randread_134G_4K_d8_th8 - string testName = $"fio_discovery_{ioType.ToLowerInvariant()}_{this.FileSize}_{blockSize}_d{queueDepthPerThread}_th{numJobs}"; + // e.g. fio_discovery_randread_134G_4K_d8_th8 + string testName = $"fio_discovery_{ioType.ToLowerInvariant()}_{this.FileSize}_{blockSize}_d{queueDepthPerThread}_th{numJobs}"; - EventContext variationContext = telemetryContext.Clone().AddContext(nameof(testName), testName); + EventContext variationContext = telemetryContext.Clone().AddContext(nameof(testName), testName); - try - { - await this.Logger.LogMessageAsync($"{this.TypeName}.ExecuteVariation", variationContext, async () => - { - // Converting Byte to Gigabytes - double fileSizeGiB = Convert.ToDouble(TextParsingExtensions.TranslateStorageByUnit(this.FileSize, MetricUnit.Gigabytes)); + try + { + await this.Logger.LogMessageAsync($"{this.TypeName}.ExecuteVariation", variationContext, async () => + { + // Converting Byte to Gigabytes + double fileSizeGiB = Convert.ToDouble(TextParsingExtensions.TranslateStorageByUnit(this.FileSize, MetricUnit.Gigabytes)); - // Converting Bytes to Kilobytes - double blockSizeKiB = Convert.ToDouble(TextParsingExtensions.TranslateStorageByUnit(blockSize, MetricUnit.Kilobytes)); + // Converting Bytes to Kilobytes + double blockSizeKiB = Convert.ToDouble(TextParsingExtensions.TranslateStorageByUnit(blockSize, MetricUnit.Kilobytes)); - string commandLine = this.ApplyParameter(this.CommandLine, nameof(this.FileSize), this.FileSize); + string commandLine = this.ApplyParameter(this.CommandLine, nameof(this.FileSize), this.FileSize); - commandLine = this.ApplyParameter(commandLine, nameof(this.IOType), ioType); - commandLine = this.ApplyParameter(commandLine, nameof(this.BlockSize), blockSize); - commandLine = this.ApplyParameter(commandLine, nameof(this.DurationSec), this.DurationSec.ToString()); + commandLine = this.ApplyParameter(commandLine, nameof(this.IOType), ioType); + commandLine = this.ApplyParameter(commandLine, nameof(this.BlockSize), blockSize); + commandLine = this.ApplyParameter(commandLine, nameof(this.DurationSec), this.DurationSec.ToString()); - int direct = this.DirectIO; - commandLine = this.ApplyParameter(commandLine, nameof(this.DirectIO), direct); - commandLine = $"--name={testName} --numjobs={numJobs} --iodepth={queueDepthPerThread} --bs={blockSize} --rw={ioType} {commandLine}"; + int direct = this.DirectIO; + commandLine = this.ApplyParameter(commandLine, nameof(this.DirectIO), direct); + commandLine = $"--name={testName} --numjobs={numJobs} --iodepth={queueDepthPerThread} --bs={blockSize} --rw={ioType} {commandLine}"; - string filePath = string.Join(',', disksToTest.Select(disk => disk.DevicePath).ToArray()); + string filePath = string.Join(',', disksToTest.Select(disk => disk.DevicePath).ToArray()); - Dictionary metricsMetadata = new Dictionary - { - [nameof(this.GroupId).CamelCased()] = this.GroupId, - [nameof(this.DurationSec).CamelCased()] = this.DurationSec, - [nameof(this.ProfileIteration).CamelCased()] = this.ProfileIteration, - [nameof(this.ProfileIterationStartTime).CamelCased()] = this.ProfileIterationStartTime, - [nameof(blockSizeKiB).CamelCased()] = blockSizeKiB, - [nameof(queueDepth).CamelCased()] = queueDepth, - [nameof(ioType).CamelCased()] = ioType, - [nameof(testName).CamelCased()] = testName, - [nameof(commandLine).CamelCased()] = commandLine, - [nameof(variation).CamelCased()] = variation, - [nameof(maxThreads).CamelCased()] = maxThreads, - [nameof(numJobs).CamelCased()] = numJobs, - [nameof(fileSizeGiB).CamelCased()] = fileSizeGiB, - [nameof(filePath).CamelCased()] = filePath - }; - - await fioDiscoveryRetryPolicy.ExecuteAsync(async () => - { - using (BackgroundOperations profiling = BackgroundOperations.BeginProfiling(this, cancellationToken)) - { - this.WorkloadProcesses.Clear(); - this.WorkloadProcesses.AddRange(this.CreateWorkloadProcesses(this.ExecutablePath, commandLine, disksToTest, this.ProcessModel, telemetryContext)); - - foreach (DiskWorkloadProcess process in this.WorkloadProcesses) - { - fioProcessTasks.Add(this.ExecuteWorkloadAsync(process, testName, variationContext, cancellationToken, metricsMetadata)); - } - - if (!cancellationToken.IsCancellationRequested) - { - await Task.WhenAll(fioProcessTasks); - } - } - }); - - }); - - await this.CleanUpWorkloadTestFilesAsync(); - } - catch (VirtualClientException exc) + Dictionary metricsMetadata = new Dictionary { - exceptions.Add(exc); - } - finally + [nameof(this.GroupId).CamelCased()] = this.GroupId, + [nameof(this.DurationSec).CamelCased()] = this.DurationSec, + [nameof(this.ProfileIteration).CamelCased()] = this.ProfileIteration, + [nameof(this.ProfileIterationStartTime).CamelCased()] = this.ProfileIterationStartTime, + [nameof(blockSizeKiB).CamelCased()] = blockSizeKiB, + [nameof(queueDepth).CamelCased()] = queueDepth, + [nameof(ioType).CamelCased()] = ioType, + [nameof(testName).CamelCased()] = testName, + [nameof(commandLine).CamelCased()] = commandLine, + [nameof(variation).CamelCased()] = variation, + [nameof(maxThreads).CamelCased()] = maxThreads, + [nameof(numJobs).CamelCased()] = numJobs, + [nameof(fileSizeGiB).CamelCased()] = fileSizeGiB, + [nameof(filePath).CamelCased()] = filePath + }; + + await fioDiscoveryRetryPolicy.ExecuteAsync(async () => { - await this.CleanUpWorkloadTestFilesAsync(); - } - } + using (BackgroundOperations profiling = BackgroundOperations.BeginProfiling(this, cancellationToken)) + { + this.WorkloadProcesses.Clear(); + this.WorkloadProcesses.AddRange(this.CreateWorkloadProcesses(this.ExecutablePath, commandLine, disksToTest, this.ProcessModel, telemetryContext)); + + foreach (DiskWorkloadProcess process in this.WorkloadProcesses) + { + fioProcessTasks.Add(this.ExecuteWorkloadAsync(process, testName, variationContext, cancellationToken, metricsMetadata)); + } + + if (!cancellationToken.IsCancellationRequested) + { + await Task.WhenAll(fioProcessTasks); + } + } + }); + + }); + + await this.CleanUpWorkloadTestFilesAsync(); + } + catch (VirtualClientException exc) + { + exceptions.Add(exc); + } + finally + { + await this.CleanUpWorkloadTestFilesAsync(); } } } diff --git a/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY-v2.json b/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY-v2.json deleted file mode 100644 index ddc0d25187..0000000000 --- a/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY-v2.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "Description": "FIO I/O Stress Performance Workload", - "Metadata": { - "RecommendedMinimumExecutionTime": "02:00:00", - "SupportedPlatforms": "linux-x64,linux-arm64,win-x64", - "SupportedOperatingSystems": "CBL-Mariner,CentOS,Debian,RedHat,Suse,Ubuntu,Windows" - }, - "Parameters": { - "DiskFillSize": "134G", - "FileSize": "134G", - "DiskFilter": "BiggestSize", - "ProcessModel": "SingleProcess", - "MaxThreads": "8", - "QueueDepths": "1,4,16,64,256,1024", - "BlockSize": "1k,4k,8k,16k,64k,256k,1024k", - "IOType": "randread,randwrite,read,write", - "Engine": "{calculate(\"{Platform}\".StartsWith(\"linux\") ? \"libaio\" : \"windowsaio\")}", - "DirectIO": true, - "InitializeDisksInParallel": true - }, - "Actions": [ - { - "Type": "FioDiscoveryExecutor", - "Parameters": { - "Scenario": "DiskFill", - "CommandLine": "--name=disk_fill --size={DiskFillSize} --rw=write --bs=256K --numjobs=1 --iodepth=64 --ioengine={Engine} --fallocate=none --refill_buffers=1 --direct=1 --overwrite=1 --output-format=json", - "Engine": "$.Parameters.Engine", - "PackageName": "fio", - "ProcessModel": "SingleProcessPerDisk", - "DiskFillSize": "$.Parameters.DiskFillSize", - "DiskFill": true, - "DeleteTestFilesOnFinish": false, - "DiskFilter": "$.Parameters.DiskFilter" - } - }, - { - "Type": "FioDiscoveryExecutor", - "Parameters": { - "Scenario": "FIOAction", - "BlockSize": "$.Parameters.BlockSize", - "CommandLine": "--ioengine={Engine} --size={FileSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", - "Engine": "$.Parameters.Engine", - "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", - "IOType": "$.Parameters.IOType", - "MaxThreads": "$.Parameters.MaxThreads", - "PackageName": "fio", - "ProcessModel": "$.Parameters.ProcessModel", - "QueueDepths": "$.Parameters.QueueDepths", - "DirectIO": "$.Parameters.DirectIO", - "DeleteTestFilesOnFinish": false, - "DiskFilter": "$.Parameters.DiskFilter", - "Tags": "IO,FIO,Discovery,randread,randwrite,read,write" - } - } - ], - "Dependencies": [ - { - "Type": "LinuxPackageInstallation", - "Parameters": { - "Scenario": "InstallLinuxPackages", - "Packages-Apt": "fio", - "Packages-Dnf": "fio,lshw,parted", - "Packages-Yum": "fio", - "Packages-Zypper": "fio" - } - }, - { - "Type": "FormatDisks", - "Parameters": { - "Scenario": "InitializeDisks" - } - }, - { - "Type": "MountDisks", - "Parameters": { - "Scenario": "CreateMountPoints", - "DiskFilter": "$.Parameters.DiskFilter" - } - }, - { - "Type": "DependencyPackageInstallation", - "Parameters": { - "Scenario": "InstallFIOPackage", - "SupportedPlatforms": "win-x64", - "BlobContainer": "packages", - "BlobName": "fio.3.30.0.zip", - "PackageName": "fio", - "Extract": true - } - } - ] -} \ No newline at end of file diff --git a/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY.json b/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY.json index 89873e80ff..909f249e06 100644 --- a/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY.json +++ b/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY.json @@ -13,8 +13,7 @@ "MaxThreads": "8", "QueueDepths": "1,4,16,64,256,1024", "Engine": "{calculate(\"{Platform}\".StartsWith(\"linux\") ? \"libaio\" : \"windowsaio\")}", - "DirectIO": true, - "InitializeDisksInParallel": true + "DirectIO": true }, "Actions": [ { @@ -31,6 +30,26 @@ "DiskFilter": "$.Parameters.DiskFilter" } }, + { + "Type": "FioDiscoveryExecutor", + "Parameters": { + "Scenario": "RandomRead_1k_BlockSize", + "BlockSize": "1k", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "Engine": "$.Parameters.Engine", + "FileSize": "$.Parameters.FileSize", + "DurationSec": "180", + "IOType": "randread", + "MaxThreads": "$.Parameters.MaxThreads", + "PackageName": "fio", + "ProcessModel": "$.Parameters.ProcessModel", + "QueueDepths": "$.Parameters.QueueDepths", + "DirectIO": "$.Parameters.DirectIO", + "DeleteTestFilesOnFinish": false, + "DiskFilter": "$.Parameters.DiskFilter", + "Tags": "IO,FIO,Discovery,randread" + } + }, { "Type": "FioDiscoveryExecutor", "Parameters": { @@ -151,6 +170,26 @@ "Tags": "IO,FIO,Discovery,randread" } }, + { + "Type": "FioDiscoveryExecutor", + "Parameters": { + "Scenario": "RandomWrite_1k_BlockSize", + "BlockSize": "1k", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "Engine": "$.Parameters.Engine", + "FileSize": "$.Parameters.FileSize", + "DurationSec": "180", + "IOType": "randwrite", + "MaxThreads": "$.Parameters.MaxThreads", + "PackageName": "fio", + "ProcessModel": "$.Parameters.ProcessModel", + "QueueDepths": "$.Parameters.QueueDepths", + "DirectIO": "$.Parameters.DirectIO", + "DeleteTestFilesOnFinish": false, + "DiskFilter": "$.Parameters.DiskFilter", + "Tags": "IO,FIO,Discovery,randwrite" + } + }, { "Type": "FioDiscoveryExecutor", "Parameters": { @@ -271,6 +310,26 @@ "Tags": "IO,FIO,Discovery,randwrite" } }, + { + "Type": "FioDiscoveryExecutor", + "Parameters": { + "Scenario": "SequentialRead_1k_BlockSize", + "BlockSize": "1k", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "Engine": "$.Parameters.Engine", + "FileSize": "$.Parameters.FileSize", + "DurationSec": "180", + "IOType": "read", + "MaxThreads": "$.Parameters.MaxThreads", + "PackageName": "fio", + "ProcessModel": "$.Parameters.ProcessModel", + "QueueDepths": "$.Parameters.QueueDepths", + "DirectIO": "$.Parameters.DirectIO", + "DeleteTestFilesOnFinish": false, + "DiskFilter": "$.Parameters.DiskFilter", + "Tags": "IO,FIO,Discovery,read" + } + }, { "Type": "FioDiscoveryExecutor", "Parameters": { @@ -392,6 +451,26 @@ "Tags": "IO,FIO,Discovery,read" } }, + { + "Type": "FioDiscoveryExecutor", + "Parameters": { + "Scenario": "SequentialWrite_1k_BlockSize", + "BlockSize": "1k", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "Engine": "$.Parameters.Engine", + "FileSize": "$.Parameters.FileSize", + "DurationSec": "180", + "IOType": "write", + "MaxThreads": "$.Parameters.MaxThreads", + "PackageName": "fio", + "ProcessModel": "$.Parameters.ProcessModel", + "QueueDepths": "$.Parameters.QueueDepths", + "DirectIO": "$.Parameters.DirectIO", + "DeleteTestFilesOnFinish": false, + "DiskFilter": "$.Parameters.DiskFilter", + "Tags": "IO,FIO,Discovery,write" + } + }, { "Type": "FioDiscoveryExecutor", "Parameters": { diff --git a/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-MULTITHROUGHPUT.json b/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-MULTITHROUGHPUT.json index 067a4dc42d..b13357caa4 100644 --- a/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-MULTITHROUGHPUT.json +++ b/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-MULTITHROUGHPUT.json @@ -9,7 +9,6 @@ "Parameters": { "DirectIO": true, "DiskFilter": "BiggestSize", - "InitializeDisksInParallel": true, "RandomIOFileSize": "124G", "SequentialDiskCount": "1", "SequentialIOFileSize": "20G", From f7ec1bc76970c53a69406b47f443c41273255916 Mon Sep 17 00:00:00 2001 From: saibulusu Date: Mon, 11 Aug 2025 12:37:39 -0700 Subject: [PATCH 5/9] Fixing references in FioDiscoveryExecutor. --- .../FIO/FioDiscoveryExecutor.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs index 57c632ea25..74781f0d65 100644 --- a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs @@ -218,7 +218,7 @@ protected override async Task ExecuteAsync(EventContext telemetryContext, Cancel int queueDepthPerThread = (queueDepth + numJobs - 1) / numJobs; // e.g. fio_discovery_randread_134G_4K_d8_th8 - string testName = $"fio_discovery_{ioType.ToLowerInvariant()}_{this.FileSize}_{blockSize}_d{queueDepthPerThread}_th{numJobs}"; + string testName = $"fio_discovery_{this.IOType.ToLowerInvariant()}_{this.FileSize}_{this.BlockSize}_d{queueDepthPerThread}_th{numJobs}"; EventContext variationContext = telemetryContext.Clone().AddContext(nameof(testName), testName); @@ -230,17 +230,17 @@ await this.Logger.LogMessageAsync($"{this.TypeName}.ExecuteVariation", variation double fileSizeGiB = Convert.ToDouble(TextParsingExtensions.TranslateStorageByUnit(this.FileSize, MetricUnit.Gigabytes)); // Converting Bytes to Kilobytes - double blockSizeKiB = Convert.ToDouble(TextParsingExtensions.TranslateStorageByUnit(blockSize, MetricUnit.Kilobytes)); + double blockSizeKiB = Convert.ToDouble(TextParsingExtensions.TranslateStorageByUnit(this.BlockSize, MetricUnit.Kilobytes)); string commandLine = this.ApplyParameter(this.CommandLine, nameof(this.FileSize), this.FileSize); - commandLine = this.ApplyParameter(commandLine, nameof(this.IOType), ioType); - commandLine = this.ApplyParameter(commandLine, nameof(this.BlockSize), blockSize); + commandLine = this.ApplyParameter(commandLine, nameof(this.IOType), this.IOType); + commandLine = this.ApplyParameter(commandLine, nameof(this.BlockSize), this.BlockSize); commandLine = this.ApplyParameter(commandLine, nameof(this.DurationSec), this.DurationSec.ToString()); int direct = this.DirectIO; commandLine = this.ApplyParameter(commandLine, nameof(this.DirectIO), direct); - commandLine = $"--name={testName} --numjobs={numJobs} --iodepth={queueDepthPerThread} --bs={blockSize} --rw={ioType} {commandLine}"; + commandLine = $"--name={testName} --numjobs={numJobs} --iodepth={queueDepthPerThread} --bs={this.BlockSize} --rw={this.IOType} {commandLine}"; string filePath = string.Join(',', disksToTest.Select(disk => disk.DevicePath).ToArray()); @@ -252,7 +252,7 @@ await this.Logger.LogMessageAsync($"{this.TypeName}.ExecuteVariation", variation [nameof(this.ProfileIterationStartTime).CamelCased()] = this.ProfileIterationStartTime, [nameof(blockSizeKiB).CamelCased()] = blockSizeKiB, [nameof(queueDepth).CamelCased()] = queueDepth, - [nameof(ioType).CamelCased()] = ioType, + [nameof(this.IOType).CamelCased()] = this.IOType, [nameof(testName).CamelCased()] = testName, [nameof(commandLine).CamelCased()] = commandLine, [nameof(variation).CamelCased()] = variation, From 72d0e2bd4b352dcdc65165e53dcf5206060fabb0 Mon Sep 17 00:00:00 2001 From: saibulusu Date: Mon, 11 Aug 2025 12:48:59 -0700 Subject: [PATCH 6/9] Fixing unit tests. --- .../FioDiscoveryProfileTests.cs | 2 +- .../FIO/FioDiscoveryExecutorTests.cs | 90 ++++--------------- .../FIO/FioDiscoveryExecutor.cs | 2 +- 3 files changed, 19 insertions(+), 75 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioDiscoveryProfileTests.cs b/src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioDiscoveryProfileTests.cs index 980a83b146..a75c4e97dd 100644 --- a/src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioDiscoveryProfileTests.cs +++ b/src/VirtualClient/VirtualClient.Actions.FunctionalTests/FioDiscoveryProfileTests.cs @@ -105,7 +105,7 @@ private static IEnumerable GetFioProfileExpectedCommands(PlatformID plat "fio --name=fio_discovery_randread_134G_1k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", "fio --name=fio_discovery_randread_134G_1k_d32_th8 --numjobs=8 --iodepth=32 --ioengine=libaio --size=134G --rw=randread --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", "fio --name=fio_discovery_randread_134G_1k_d128_th8 --numjobs=8 --iodepth=128 --ioengine=libaio --size=134G --rw=randread --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - "fio --name=fio_discovery_randread_134G_1k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=1k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + "fio --name=fio_discovery_randread_134G_4k_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", "fio --name=fio_discovery_randread_134G_4k_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", "fio --name=fio_discovery_randread_134G_4k_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", "fio --name=fio_discovery_randread_134G_4k_d8_th8 --numjobs=8 --iodepth=8 --ioengine=libaio --size=134G --rw=randread --bs=4k --direct=1 --ramp_time=15 --runtime=180 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", diff --git a/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioDiscoveryExecutorTests.cs b/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioDiscoveryExecutorTests.cs index 6188c6faa8..1db50e5d22 100644 --- a/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioDiscoveryExecutorTests.cs +++ b/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioDiscoveryExecutorTests.cs @@ -37,7 +37,7 @@ public void SetupTest() this.Parameters = new Dictionary { { nameof(FioDiscoveryExecutor.Scenario), "AnyScenario_ReadOrWrite_AnyBlockSize" }, - { nameof(FioDiscoveryExecutor.CommandLine), "--ioengine=libaio --size={FileSize} --direct={DirectIO} --ramp_time=30 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json" }, + { nameof(FioDiscoveryExecutor.CommandLine), "--ioengine=libaio --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=30 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json" }, { nameof(FioDiscoveryExecutor.BlockSize), "4K" }, { nameof(FioDiscoveryExecutor.DiskFillSize), "140G" }, { nameof(FioDiscoveryExecutor.FileSize), "134G" }, @@ -51,6 +51,7 @@ public void SetupTest() { nameof(FioDiscoveryExecutor.PackageName), "fio" }, { nameof(FioDiscoveryExecutor.DiskFilter), "BiggestSize" } }; + this.FileSystem.Setup(fe => fe.File.Exists(It.IsAny())).Returns(true); this.defaultOutput.Clear(); @@ -172,9 +173,9 @@ public async Task FioDiscoveryExecutorExecutesAsExpectedInSingleProcessModel() List expectedCommandLines = new List { - $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z] --filename=/dev/sd[a-z] --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z] --filename=/dev/sd[a-z] --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z] --filename=/dev/sd[a-z] --filename=/dev/sd[a-z]" + $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z] --filename=/dev/sd[a-z] --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z] --filename=/dev/sd[a-z] --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z] --filename=/dev/sd[a-z] --filename=/dev/sd[a-z]" }; using (TestFioDiscoveryExecutor executor = new TestFioDiscoveryExecutor(this.Dependencies, this.Parameters)) @@ -194,15 +195,15 @@ public async Task FioDiscoveryExecutorExecutesAsExpectedInSingleProcessPerDiskMo List expectedCommandLines = new List { - $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]" + $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", + $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]" }; using (TestFioDiscoveryExecutor executor = new TestFioDiscoveryExecutor(this.Dependencies, this.Parameters)) @@ -283,9 +284,9 @@ public async Task FioDiscoveryExecutorExecutesAsExpectedIfGroupIDIsRemoved() List expectedCommandLines = new List { $"sudo chmod", - $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sdc --filename=/dev/sdd --filename=/dev/sde", - $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sdc --filename=/dev/sdd --filename=/dev/sde", - $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sdc --filename=/dev/sdd --filename=/dev/sde" + $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sdc --filename=/dev/sdd --filename=/dev/sde", + $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sdc --filename=/dev/sdd --filename=/dev/sde", + $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --ioengine=libaio --size=134G --rw=randwrite --bs=4K --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sdc --filename=/dev/sdd --filename=/dev/sde" }; using (TestFioDiscoveryExecutor executor = new TestFioDiscoveryExecutor(this.Dependencies, this.Parameters)) @@ -298,63 +299,6 @@ public async Task FioDiscoveryExecutorExecutesAsExpectedIfGroupIDIsRemoved() } } - [Test] - public async Task FioDiscoveryExecutorExecutesAsExpectedWithMultipleBlockSizeIOTypes() - { - this.Parameters[nameof(FioDiscoveryExecutor.BlockSize)] = "1K,4K"; - this.Parameters[nameof(FioDiscoveryExecutor.IOType)] = "randwrite,randread"; - this.Parameters[nameof(FioDiscoveryExecutor.ProcessModel)] = WorkloadProcessModel.SingleProcessPerDisk; - - List expectedCommandLines = new List - { - $"--name=fio_discovery_randwrite_134G_1K_d1_th1 --numjobs=1 --iodepth=1 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_1K_d1_th1 --numjobs=1 --iodepth=1 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_1K_d1_th1 --numjobs=1 --iodepth=1 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_1K_d1_th4 --numjobs=4 --iodepth=1 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_1K_d1_th4 --numjobs=4 --iodepth=1 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_1K_d1_th4 --numjobs=4 --iodepth=1 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_1K_d2_th8 --numjobs=8 --iodepth=2 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_1K_d2_th8 --numjobs=8 --iodepth=2 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_1K_d2_th8 --numjobs=8 --iodepth=2 --bs=1K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_1K_d1_th1 --numjobs=1 --iodepth=1 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_1K_d1_th1 --numjobs=1 --iodepth=1 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_1K_d1_th1 --numjobs=1 --iodepth=1 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_1K_d1_th4 --numjobs=4 --iodepth=1 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_1K_d1_th4 --numjobs=4 --iodepth=1 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_1K_d1_th4 --numjobs=4 --iodepth=1 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_1K_d2_th8 --numjobs=8 --iodepth=2 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_1K_d2_th8 --numjobs=8 --iodepth=2 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_1K_d2_th8 --numjobs=8 --iodepth=2 --bs=1K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randwrite_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randwrite --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_4K_d1_th1 --numjobs=1 --iodepth=1 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_4K_d1_th4 --numjobs=4 --iodepth=1 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]", - $"--name=fio_discovery_randread_134G_4K_d2_th8 --numjobs=8 --iodepth=2 --bs=4K --rw=randread --ioengine=libaio --size=134G --direct=1 --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json --filename=/dev/sd[a-z]" - }; - - using (TestFioDiscoveryExecutor executor = new TestFioDiscoveryExecutor(this.Dependencies, this.Parameters)) - { - await executor.ExecuteAsync(CancellationToken.None) - .ConfigureAwait(false); - - Assert.AreEqual(1 + expectedCommandLines.Count, this.ProcessManager.Commands.Count()); - Assert.IsTrue(this.ProcessManager.CommandsExecuted(expectedCommandLines.ToArray())); - } - } - private class TestFioDiscoveryExecutor : FioDiscoveryExecutor { public TestFioDiscoveryExecutor(IServiceCollection dependencies, IDictionary parameters) diff --git a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs index 74781f0d65..eb9f5d9509 100644 --- a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs @@ -240,7 +240,7 @@ await this.Logger.LogMessageAsync($"{this.TypeName}.ExecuteVariation", variation int direct = this.DirectIO; commandLine = this.ApplyParameter(commandLine, nameof(this.DirectIO), direct); - commandLine = $"--name={testName} --numjobs={numJobs} --iodepth={queueDepthPerThread} --bs={this.BlockSize} --rw={this.IOType} {commandLine}"; + commandLine = $"--name={testName} --numjobs={numJobs} --iodepth={queueDepthPerThread} {commandLine}"; string filePath = string.Join(',', disksToTest.Select(disk => disk.DevicePath).ToArray()); From 058c92187203091e4c5a529f9a882e2117213fef Mon Sep 17 00:00:00 2001 From: saibulusu Date: Mon, 11 Aug 2025 14:17:04 -0700 Subject: [PATCH 7/9] Removing max threads as a list. --- .../FIO/FioDiscoveryExecutor.cs | 137 +++++++++--------- 1 file changed, 67 insertions(+), 70 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs index eb9f5d9509..ed339dce7d 100644 --- a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs @@ -80,11 +80,11 @@ public string IOType /// /// The maximum number of threads. /// - public List MaxThreads + public int MaxThreads { get { - return this.Parameters.GetValue(nameof(this.MaxThreads)).Split(VirtualClientComponent.CommonDelimiters).Select(int.Parse).ToList(); + return this.Parameters.GetValue(nameof(this.MaxThreads)); } } @@ -207,92 +207,89 @@ protected override async Task ExecuteAsync(EventContext telemetryContext, Cancel else { List exceptions = new List(); - foreach (int maxThreads in this.MaxThreads) + foreach (int queueDepth in this.QueueDepths) { - foreach (int queueDepth in this.QueueDepths) + int variation = Interlocked.Increment(ref variationNumber); + if (!cancellationToken.IsCancellationRequested) { - int variation = Interlocked.Increment(ref variationNumber); - if (!cancellationToken.IsCancellationRequested) - { - int numJobs = (queueDepth < maxThreads) ? queueDepth : maxThreads; - int queueDepthPerThread = (queueDepth + numJobs - 1) / numJobs; + int numJobs = (queueDepth < this.MaxThreads) ? queueDepth : this.MaxThreads; + int queueDepthPerThread = (queueDepth + numJobs - 1) / numJobs; - // e.g. fio_discovery_randread_134G_4K_d8_th8 - string testName = $"fio_discovery_{this.IOType.ToLowerInvariant()}_{this.FileSize}_{this.BlockSize}_d{queueDepthPerThread}_th{numJobs}"; + // e.g. fio_discovery_randread_134G_4K_d8_th8 + string testName = $"fio_discovery_{this.IOType.ToLowerInvariant()}_{this.FileSize}_{this.BlockSize}_d{queueDepthPerThread}_th{numJobs}"; - EventContext variationContext = telemetryContext.Clone().AddContext(nameof(testName), testName); + EventContext variationContext = telemetryContext.Clone().AddContext(nameof(testName), testName); - try + try + { + await this.Logger.LogMessageAsync($"{this.TypeName}.ExecuteVariation", variationContext, async () => { - await this.Logger.LogMessageAsync($"{this.TypeName}.ExecuteVariation", variationContext, async () => - { - // Converting Byte to Gigabytes - double fileSizeGiB = Convert.ToDouble(TextParsingExtensions.TranslateStorageByUnit(this.FileSize, MetricUnit.Gigabytes)); + // Converting Byte to Gigabytes + double fileSizeGiB = Convert.ToDouble(TextParsingExtensions.TranslateStorageByUnit(this.FileSize, MetricUnit.Gigabytes)); - // Converting Bytes to Kilobytes - double blockSizeKiB = Convert.ToDouble(TextParsingExtensions.TranslateStorageByUnit(this.BlockSize, MetricUnit.Kilobytes)); + // Converting Bytes to Kilobytes + double blockSizeKiB = Convert.ToDouble(TextParsingExtensions.TranslateStorageByUnit(this.BlockSize, MetricUnit.Kilobytes)); - string commandLine = this.ApplyParameter(this.CommandLine, nameof(this.FileSize), this.FileSize); + string commandLine = this.ApplyParameter(this.CommandLine, nameof(this.FileSize), this.FileSize); - commandLine = this.ApplyParameter(commandLine, nameof(this.IOType), this.IOType); - commandLine = this.ApplyParameter(commandLine, nameof(this.BlockSize), this.BlockSize); - commandLine = this.ApplyParameter(commandLine, nameof(this.DurationSec), this.DurationSec.ToString()); + commandLine = this.ApplyParameter(commandLine, nameof(this.IOType), this.IOType); + commandLine = this.ApplyParameter(commandLine, nameof(this.BlockSize), this.BlockSize); + commandLine = this.ApplyParameter(commandLine, nameof(this.DurationSec), this.DurationSec.ToString()); - int direct = this.DirectIO; - commandLine = this.ApplyParameter(commandLine, nameof(this.DirectIO), direct); - commandLine = $"--name={testName} --numjobs={numJobs} --iodepth={queueDepthPerThread} {commandLine}"; + int direct = this.DirectIO; + commandLine = this.ApplyParameter(commandLine, nameof(this.DirectIO), direct); + commandLine = $"--name={testName} --numjobs={numJobs} --iodepth={queueDepthPerThread} {commandLine}"; - string filePath = string.Join(',', disksToTest.Select(disk => disk.DevicePath).ToArray()); + string filePath = string.Join(',', disksToTest.Select(disk => disk.DevicePath).ToArray()); - Dictionary metricsMetadata = new Dictionary - { - [nameof(this.GroupId).CamelCased()] = this.GroupId, - [nameof(this.DurationSec).CamelCased()] = this.DurationSec, - [nameof(this.ProfileIteration).CamelCased()] = this.ProfileIteration, - [nameof(this.ProfileIterationStartTime).CamelCased()] = this.ProfileIterationStartTime, - [nameof(blockSizeKiB).CamelCased()] = blockSizeKiB, - [nameof(queueDepth).CamelCased()] = queueDepth, - [nameof(this.IOType).CamelCased()] = this.IOType, - [nameof(testName).CamelCased()] = testName, - [nameof(commandLine).CamelCased()] = commandLine, - [nameof(variation).CamelCased()] = variation, - [nameof(maxThreads).CamelCased()] = maxThreads, - [nameof(numJobs).CamelCased()] = numJobs, - [nameof(fileSizeGiB).CamelCased()] = fileSizeGiB, - [nameof(filePath).CamelCased()] = filePath - }; - - await fioDiscoveryRetryPolicy.ExecuteAsync(async () => + Dictionary metricsMetadata = new Dictionary + { + [nameof(this.GroupId).CamelCased()] = this.GroupId, + [nameof(this.DurationSec).CamelCased()] = this.DurationSec, + [nameof(this.ProfileIteration).CamelCased()] = this.ProfileIteration, + [nameof(this.ProfileIterationStartTime).CamelCased()] = this.ProfileIterationStartTime, + [nameof(this.IOType).CamelCased()] = this.IOType, + [nameof(this.MaxThreads).CamelCased()] = this.MaxThreads, + [nameof(blockSizeKiB).CamelCased()] = blockSizeKiB, + [nameof(queueDepth).CamelCased()] = queueDepth, + [nameof(testName).CamelCased()] = testName, + [nameof(commandLine).CamelCased()] = commandLine, + [nameof(variation).CamelCased()] = variation, + [nameof(numJobs).CamelCased()] = numJobs, + [nameof(fileSizeGiB).CamelCased()] = fileSizeGiB, + [nameof(filePath).CamelCased()] = filePath + }; + + await fioDiscoveryRetryPolicy.ExecuteAsync(async () => + { + using (BackgroundOperations profiling = BackgroundOperations.BeginProfiling(this, cancellationToken)) { - using (BackgroundOperations profiling = BackgroundOperations.BeginProfiling(this, cancellationToken)) + this.WorkloadProcesses.Clear(); + this.WorkloadProcesses.AddRange(this.CreateWorkloadProcesses(this.ExecutablePath, commandLine, disksToTest, this.ProcessModel, telemetryContext)); + + foreach (DiskWorkloadProcess process in this.WorkloadProcesses) { - this.WorkloadProcesses.Clear(); - this.WorkloadProcesses.AddRange(this.CreateWorkloadProcesses(this.ExecutablePath, commandLine, disksToTest, this.ProcessModel, telemetryContext)); - - foreach (DiskWorkloadProcess process in this.WorkloadProcesses) - { - fioProcessTasks.Add(this.ExecuteWorkloadAsync(process, testName, variationContext, cancellationToken, metricsMetadata)); - } - - if (!cancellationToken.IsCancellationRequested) - { - await Task.WhenAll(fioProcessTasks); - } + fioProcessTasks.Add(this.ExecuteWorkloadAsync(process, testName, variationContext, cancellationToken, metricsMetadata)); } - }); + if (!cancellationToken.IsCancellationRequested) + { + await Task.WhenAll(fioProcessTasks); + } + } }); - await this.CleanUpWorkloadTestFilesAsync(); - } - catch (VirtualClientException exc) - { - exceptions.Add(exc); - } - finally - { - await this.CleanUpWorkloadTestFilesAsync(); - } + }); + + await this.CleanUpWorkloadTestFilesAsync(); + } + catch (VirtualClientException exc) + { + exceptions.Add(exc); + } + finally + { + await this.CleanUpWorkloadTestFilesAsync(); } } } From 1b46588f837ca16f5cf5b98e07dc0fbda1e1b366 Mon Sep 17 00:00:00 2001 From: saibulusu Date: Mon, 11 Aug 2025 15:39:09 -0700 Subject: [PATCH 8/9] Converting DurationSec to Duration. --- .../FIO/FioDiscoveryExecutorTests.cs | 4 +- .../FIO/FioMultiThroughputExecutorTests.cs | 2 +- .../FIO/FioDiscoveryExecutor.cs | 15 +-- .../FIO/FioMultiThroughputExecutor.cs | 10 +- .../profiles/PERF-IO-FIO-DISCOVERY.json | 113 +++++++++--------- .../profiles/PERF-IO-FIO-MULTITHROUGHPUT.json | 5 +- 6 files changed, 69 insertions(+), 80 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioDiscoveryExecutorTests.cs b/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioDiscoveryExecutorTests.cs index 1db50e5d22..87d59425ed 100644 --- a/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioDiscoveryExecutorTests.cs +++ b/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioDiscoveryExecutorTests.cs @@ -37,11 +37,10 @@ public void SetupTest() this.Parameters = new Dictionary { { nameof(FioDiscoveryExecutor.Scenario), "AnyScenario_ReadOrWrite_AnyBlockSize" }, - { nameof(FioDiscoveryExecutor.CommandLine), "--ioengine=libaio --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=30 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json" }, + { nameof(FioDiscoveryExecutor.CommandLine), "--ioengine=libaio --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=30 --runtime=300 --time_based --overwrite=1 --thread --group_reporting --output-format=json" }, { nameof(FioDiscoveryExecutor.BlockSize), "4K" }, { nameof(FioDiscoveryExecutor.DiskFillSize), "140G" }, { nameof(FioDiscoveryExecutor.FileSize), "134G" }, - { nameof(FioDiscoveryExecutor.DurationSec), 300 }, { nameof(FioDiscoveryExecutor.QueueDepths), "1,4,16" }, { nameof(FioDiscoveryExecutor.MaxThreads), 8 }, { nameof(FioDiscoveryExecutor.IOType), "randwrite" }, @@ -165,7 +164,6 @@ public void FioDiscoveryExecutorDoesNotSupportRunningAgainstTheOperatingSystemDi } } - [Test] public async Task FioDiscoveryExecutorExecutesAsExpectedInSingleProcessModel() { diff --git a/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioMultiThroughputExecutorTests.cs b/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioMultiThroughputExecutorTests.cs index c9be599003..4797ae7fa9 100644 --- a/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioMultiThroughputExecutorTests.cs +++ b/src/VirtualClient/VirtualClient.Actions.UnitTests/FIO/FioMultiThroughputExecutorTests.cs @@ -43,7 +43,7 @@ public void SetupTest() { { nameof(FioMultiThroughputExecutor.TemplateJobFile), "oltp-c.fio.jobfile" }, { nameof(FioMultiThroughputExecutor.GroupReporting), 1 }, - { nameof(FioMultiThroughputExecutor.DurationSec), 1 }, + { nameof(FioMultiThroughputExecutor.Duration), 1 }, { nameof(FioMultiThroughputExecutor.DirectIO), 1 }, { nameof(FioMultiThroughputExecutor.TargetIOPS), "5000" }, { nameof(FioMultiThroughputExecutor.TargetPercents), 10 }, diff --git a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs index ed339dce7d..023efb1d07 100644 --- a/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/FIO/FioDiscoveryExecutor.cs @@ -99,17 +99,6 @@ public List QueueDepths } } - /// - /// Duration in Seconds. - /// - public int DurationSec - { - get - { - return this.Parameters.GetValue(nameof(this.DurationSec)); - } - } - /// /// Group Id. /// @@ -234,7 +223,7 @@ await this.Logger.LogMessageAsync($"{this.TypeName}.ExecuteVariation", variation commandLine = this.ApplyParameter(commandLine, nameof(this.IOType), this.IOType); commandLine = this.ApplyParameter(commandLine, nameof(this.BlockSize), this.BlockSize); - commandLine = this.ApplyParameter(commandLine, nameof(this.DurationSec), this.DurationSec.ToString()); + // commandLine = this.ApplyParameter(commandLine, nameof(this.Duration), this.Duration); int direct = this.DirectIO; commandLine = this.ApplyParameter(commandLine, nameof(this.DirectIO), direct); @@ -245,7 +234,7 @@ await this.Logger.LogMessageAsync($"{this.TypeName}.ExecuteVariation", variation Dictionary metricsMetadata = new Dictionary { [nameof(this.GroupId).CamelCased()] = this.GroupId, - [nameof(this.DurationSec).CamelCased()] = this.DurationSec, + // [nameof(this.Duration).CamelCased()] = this.Duration, [nameof(this.ProfileIteration).CamelCased()] = this.ProfileIteration, [nameof(this.ProfileIterationStartTime).CamelCased()] = this.ProfileIterationStartTime, [nameof(this.IOType).CamelCased()] = this.IOType, diff --git a/src/VirtualClient/VirtualClient.Actions/FIO/FioMultiThroughputExecutor.cs b/src/VirtualClient/VirtualClient.Actions/FIO/FioMultiThroughputExecutor.cs index e4a31d9066..31db66eec6 100644 --- a/src/VirtualClient/VirtualClient.Actions/FIO/FioMultiThroughputExecutor.cs +++ b/src/VirtualClient/VirtualClient.Actions/FIO/FioMultiThroughputExecutor.cs @@ -177,11 +177,11 @@ public int RandomWriteQueueDepth /// /// Run Time for running the FIO in Seconds. /// - public int DurationSec + public string Duration { get { - return this.Parameters.GetValue(nameof(this.DurationSec)); + return TimeSpan.Parse(this.Parameters.GetValue(nameof(this.Duration))).TotalSeconds.ToString(); } } @@ -595,7 +595,7 @@ private void CreateOrUpdateJobFile(string sourcePath, string destinationPath) if (this.DiskFill) { text = text.Replace("${ioengine}", this.Engine); - text = text.Replace($"${{{nameof(this.DurationSec).ToLower()}}}", this.DurationSec.ToString()); + text = text.Replace($"${{{nameof(this.Duration).ToLower()}}}", this.Duration.ToString()); text = text.Replace($"${{{nameof(this.GroupReporting).ToLower()}}}", this.GroupReporting.ToString()); text = text.Replace($"${{{nameof(this.DirectIO).ToLower()}}}", direct.ToString()); text = text.Replace($"${{{nameof(this.RandomIOFileSize).ToLower()}}}", this.RandomIOFileSize.ToString()); @@ -612,7 +612,7 @@ private void CreateOrUpdateJobFile(string sourcePath, string destinationPath) text = text.Replace("${ioengine}", this.Engine); text = text.Replace($"${{{nameof(this.DirectIO).ToLower()}}}", direct.ToString()); - text = text.Replace($"${{{nameof(this.DurationSec).ToLower()}}}", this.DurationSec.ToString()); + text = text.Replace($"${{{nameof(this.Duration).ToLower()}}}", this.Duration.ToString()); text = text.Replace($"${{{nameof(this.GroupReporting).ToLower()}}}", this.GroupReporting.ToString()); text = text.Replace($"${{{nameof(this.RandomIOFileSize).ToLower()}}}", this.RandomIOFileSize.ToString()); @@ -755,7 +755,7 @@ private IDictionary GetMetricsMetadata(string ioType) } metadata[nameof(this.TargetIOPS).CamelCased()] = this.TargetIOPS; - metadata[nameof(this.DurationSec).CamelCased()] = this.DurationSec; + metadata[nameof(this.Duration).CamelCased()] = this.Duration; metadata[nameof(this.DirectIO).CamelCased()] = this.DirectIO; metadata[nameof(this.GroupReporting).CamelCased()] = this.GroupReporting; metadata[nameof(ioType).CamelCased()] = ioType; diff --git a/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY.json b/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY.json index 909f249e06..bd159a855e 100644 --- a/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY.json +++ b/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY.json @@ -9,6 +9,7 @@ "DiskFillSize": "134G", "FileSize": "134G", "DiskFilter": "BiggestSize", + "Duration": "00:03:00", "ProcessModel": "SingleProcess", "MaxThreads": "8", "QueueDepths": "1,4,16,64,256,1024", @@ -35,10 +36,10 @@ "Parameters": { "Scenario": "RandomRead_1k_BlockSize", "BlockSize": "1k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randread", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -55,10 +56,10 @@ "Parameters": { "Scenario": "RandomRead_4k_BlockSize", "BlockSize": "4k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randread", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -75,10 +76,10 @@ "Parameters": { "Scenario": "RandomRead_8k_BlockSize", "BlockSize": "8k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randread", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -95,10 +96,10 @@ "Parameters": { "Scenario": "RandomRead_16k_BlockSize", "BlockSize": "16k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randread", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -115,10 +116,10 @@ "Parameters": { "Scenario": "RandomRead_64k_BlockSize", "BlockSize": "64k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randread", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -135,10 +136,10 @@ "Parameters": { "Scenario": "RandomRead_256k_BlockSize", "BlockSize": "256k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randread", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -155,10 +156,10 @@ "Parameters": { "Scenario": "RandomRead_1024k_BlockSize", "BlockSize": "1024k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randread", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -175,10 +176,10 @@ "Parameters": { "Scenario": "RandomWrite_1k_BlockSize", "BlockSize": "1k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randwrite", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -195,10 +196,10 @@ "Parameters": { "Scenario": "RandomWrite_4k_BlockSize", "BlockSize": "4k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randwrite", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -215,10 +216,10 @@ "Parameters": { "Scenario": "RandomWrite_8k_BlockSize", "BlockSize": "8k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randwrite", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -235,10 +236,10 @@ "Parameters": { "Scenario": "RandomWrite_16k_BlockSize", "BlockSize": "16k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randwrite", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -255,10 +256,10 @@ "Parameters": { "Scenario": "RandomWrite_64k_BlockSize", "BlockSize": "64k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randwrite", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -275,10 +276,10 @@ "Parameters": { "Scenario": "RandomWrite_256k_BlockSize", "BlockSize": "256k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randwrite", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -295,10 +296,10 @@ "Parameters": { "Scenario": "RandomWrite_1024k_BlockSize", "BlockSize": "1024k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "randwrite", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -315,10 +316,10 @@ "Parameters": { "Scenario": "SequentialRead_1k_BlockSize", "BlockSize": "1k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "read", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -335,10 +336,10 @@ "Parameters": { "Scenario": "SequentialRead_4k_BlockSize", "BlockSize": "4k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "read", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -355,10 +356,10 @@ "Parameters": { "Scenario": "SequentialRead_8k_BlockSize", "BlockSize": "8k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "read", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -376,10 +377,10 @@ "Parameters": { "Scenario": "SequentialRead_16k_BlockSize", "BlockSize": "16k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "read", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -396,10 +397,10 @@ "Parameters": { "Scenario": "SequentialRead_64k_BlockSize", "BlockSize": "64k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "read", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -416,10 +417,10 @@ "Parameters": { "Scenario": "SequentialRead_256k_BlockSize", "BlockSize": "256k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "read", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -436,10 +437,10 @@ "Parameters": { "Scenario": "SequentialRead_1024k_BlockSize", "BlockSize": "1024k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "read", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -456,10 +457,10 @@ "Parameters": { "Scenario": "SequentialWrite_1k_BlockSize", "BlockSize": "1k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "write", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -476,10 +477,10 @@ "Parameters": { "Scenario": "SequentialWrite_4k_BlockSize", "BlockSize": "4k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "write", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -496,10 +497,10 @@ "Parameters": { "Scenario": "SequentialWrite_8k_BlockSize", "BlockSize": "8k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "write", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -516,10 +517,10 @@ "Parameters": { "Scenario": "SequentialWrite_16k_BlockSize", "BlockSize": "16k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "write", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -536,10 +537,10 @@ "Parameters": { "Scenario": "SequentialWrite_64k_BlockSize", "BlockSize": "64k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "write", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -556,10 +557,10 @@ "Parameters": { "Scenario": "SequentialWrite_256k_BlockSize", "BlockSize": "256k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "write", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", @@ -576,10 +577,10 @@ "Parameters": { "Scenario": "SequentialWrite_1024k_BlockSize", "BlockSize": "1024k", - "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={DurationSec} --time_based --overwrite=1 --thread --group_reporting --output-format=json", + "CommandLine": "--ioengine={Engine} --size={FileSize} --rw={IOType} --bs={BlockSize} --direct={DirectIO} --ramp_time=15 --runtime={Duration.TotalSeconds} --time_based --overwrite=1 --thread --group_reporting --output-format=json", "Engine": "$.Parameters.Engine", "FileSize": "$.Parameters.FileSize", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "IOType": "write", "MaxThreads": "$.Parameters.MaxThreads", "PackageName": "fio", diff --git a/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-MULTITHROUGHPUT.json b/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-MULTITHROUGHPUT.json index b13357caa4..dc86616a1f 100644 --- a/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-MULTITHROUGHPUT.json +++ b/src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-MULTITHROUGHPUT.json @@ -9,6 +9,7 @@ "Parameters": { "DirectIO": true, "DiskFilter": "BiggestSize", + "Duration": "00:03:00", "RandomIOFileSize": "124G", "SequentialDiskCount": "1", "SequentialIOFileSize": "20G", @@ -29,7 +30,7 @@ "PackageName": "fio", "ProcessModel": "SingleProcessPerDisk", "RandomIOFileSize": "$.Parameters.RandomIOFileSize", - "DurationSec": "300", + "Duration": "00:10:00", "SequentialIOFileSize": "$.Parameters.SequentialIOFileSize", "SequentialDiskCount": "$.Parameters.SequentialDiskCount", "Tags": "IO,FIO,MultiThroughput,OLTP", @@ -43,7 +44,7 @@ "PackageName": "fio", "DirectIO": "$.Parameters.DirectIO", "DiskFilter": "$.Parameters.DiskFilter", - "DurationSec": "180", + "Duration": "$.Parameters.Duration", "Engine": "$.Parameters.Engine", "GroupReporting": "0", "RandomIOFileSize": "$.Parameters.RandomIOFileSize", From 96aaca0b779028a3fcccee3a698ade82669d536a Mon Sep 17 00:00:00 2001 From: saibulusu Date: Mon, 11 Aug 2025 17:01:34 -0700 Subject: [PATCH 9/9] Changing duation field in job files. --- .../VirtualClient.Actions/FIO/oltp-c.fio.jobfile | 8 ++++---- .../FIO/oltp-c2-operations.fio.jobfile | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/VirtualClient/VirtualClient.Actions/FIO/oltp-c.fio.jobfile b/src/VirtualClient/VirtualClient.Actions/FIO/oltp-c.fio.jobfile index 575808c309..f9a279e650 100644 --- a/src/VirtualClient/VirtualClient.Actions/FIO/oltp-c.fio.jobfile +++ b/src/VirtualClient/VirtualClient.Actions/FIO/oltp-c.fio.jobfile @@ -21,7 +21,7 @@ bs=${randomreadblocksize} iodepth=${randomreadiodepth} numjobs=${randomreadnumjobs} rate_iops=${randomreadiops} -runtime=${durationsec} +runtime=${duration} rw=randread # Represents writing of data in sql/OLTP database. @@ -31,7 +31,7 @@ bs=${randomwriteblocksize} iodepth=${randomwriteiodepth} numjobs=${randomwritenumjobs} rate_iops=${randomwriteiops} -runtime=${durationsec} +runtime=${duration} rw=randwrite # Represents log readers of sql/OLTP database. @@ -42,7 +42,7 @@ filename=${sequentialiofilepath} iodepth=${sequentialreadiodepth} numjobs=${sequentialreadnumjobs} rate_iops=${sequentialreadiops} -runtime=${durationsec} +runtime=${duration} rw=read size=${sequentialiofilesize} @@ -54,7 +54,7 @@ filename=${sequentialiofilepath} iodepth=${sequentialwriteiodepth} numjobs=${sequentialwritenumjobs} rate_iops=${sequentialwriteiops} -runtime=${durationsec} +runtime=${duration} rw=write size=${sequentialiofilesize} diff --git a/src/VirtualClient/VirtualClient.Actions/FIO/oltp-c2-operations.fio.jobfile b/src/VirtualClient/VirtualClient.Actions/FIO/oltp-c2-operations.fio.jobfile index 189f331288..e85733d7bd 100644 --- a/src/VirtualClient/VirtualClient.Actions/FIO/oltp-c2-operations.fio.jobfile +++ b/src/VirtualClient/VirtualClient.Actions/FIO/oltp-c2-operations.fio.jobfile @@ -18,7 +18,7 @@ bs=${randomreadblocksize} iodepth=${randomreadiodepth} numjobs=${randomreadnumjobs} rate_iops=2708 -runtime=${durationsec} +runtime=${duration} rw=randread size=${randomiofilesize} @@ -29,7 +29,7 @@ bs=${randomwriteblocksize} iodepth=${randomwriteiodepth} numjobs=${randomwritenumjobs} rate_iops=2128 -runtime=${durationsec} +runtime=${duration} rw=randwrite size=${randomiofilesize} @@ -40,7 +40,7 @@ bs=${sequentialreadblocksize} iodepth=${sequentialreadiodepth} numjobs=${sequentialreadnumjobs} rate_iops=0 -runtime=${durationsec} +runtime=${duration} rw=read size=${sequentialiofilesize} @@ -51,6 +51,6 @@ bs=${sequentialwriteblocksize} iodepth=${sequentialwriteiodepth} numjobs=${sequentialwritenumjobs} rate_iops=164 -runtime=${durationsec} +runtime=${duration} rw=write size=${sequentialiofilesize} \ No newline at end of file