Skip to content

Commit 0bb1648

Browse files
committed
Update disk I/O workload profiles to remove the 'DiskFilter' parameter from the FormatDisk components.
1 parent 3c141d7 commit 0bb1648

File tree

12 files changed

+229
-32
lines changed

12 files changed

+229
-32
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.1.5
1+
2.1.6

src/VirtualClient/VirtualClient.Contracts.UnitTests/DiskFiltersTests.cs

Lines changed: 198 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,7 @@ namespace VirtualClient.Contracts
88
using System.IO;
99
using System.Linq;
1010
using System.Text;
11-
using System.Threading.Tasks;
12-
using AutoFixture;
13-
using VirtualClient.Common;
14-
using Microsoft.Extensions.Azure;
1511
using NUnit.Framework;
16-
using VirtualClient.Contracts.Parser;
1712

1813
[TestFixture]
1914
[Category("Unit")]
@@ -111,6 +106,22 @@ public void DiskFiltersCanFilterOnBiggestDisksOnLinux()
111106
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(2), result.ElementAt(1)));
112107
}
113108

109+
[Test]
110+
public void DiskFiltersCanFilterOnBiggestDisksOnLinuxForDisksWithoutVolumePartititions()
111+
{
112+
this.disks = this.mockFixture.CreateDisks(PlatformID.Unix, false);
113+
this.disks.ElementAt(0).Properties["size"] = 3 * 1024 * 1024;
114+
this.disks.ElementAt(1).Properties["size"] = 1 * 1024 * 1024;
115+
this.disks.ElementAt(2).Properties["size"] = 3 * 1024 * 1024;
116+
this.disks.ElementAt(3).Properties["size"] = 2 * 1024 * 1024;
117+
118+
string filterString = "biggestsize";
119+
IEnumerable<Disk> result = DiskFilters.FilterDisks(this.disks, filterString, PlatformID.Unix);
120+
Assert.AreEqual(2, result.Count());
121+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(0), result.ElementAt(0)));
122+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(2), result.ElementAt(1)));
123+
}
124+
114125
[Test]
115126
public void DiskFiltersCanFilterOnBiggestDisksOnWindows()
116127
{
@@ -126,6 +137,23 @@ public void DiskFiltersCanFilterOnBiggestDisksOnWindows()
126137
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(2), result.ElementAt(0)));
127138
}
128139

140+
[Test]
141+
[Ignore("We can support this in the future if we add a 'Size' property to the Disk object for Windows (e.g. DiskPart -> list disks).")]
142+
public void DiskFiltersCanFilterOnBiggestDisksOnWindowsForDisksWithoutVolumePartititions()
143+
{
144+
this.disks = this.mockFixture.CreateDisks(PlatformID.Win32NT, false);
145+
this.disks.ElementAt(0).Properties["Size"] = 3 * 1024 * 1024;
146+
this.disks.ElementAt(1).Properties["Size"] = 1 * 1024 * 1024;
147+
this.disks.ElementAt(2).Properties["Size"] = 3 * 1024 * 1024;
148+
this.disks.ElementAt(3).Properties["Size"] = 2 * 1024 * 1024;
149+
150+
string filterString = "biggestsize";
151+
IEnumerable<Disk> result = DiskFilters.FilterDisks(this.disks, filterString, PlatformID.Unix);
152+
Assert.AreEqual(2, result.Count());
153+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(0), result.ElementAt(0)));
154+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(2), result.ElementAt(1)));
155+
}
156+
129157
[Test]
130158
public void DiskFiltersCanFilterOnSmallestDisksOnLinux()
131159
{
@@ -142,6 +170,22 @@ public void DiskFiltersCanFilterOnSmallestDisksOnLinux()
142170
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(3), result.ElementAt(1)));
143171
}
144172

173+
[Test]
174+
public void DiskFiltersCanFilterOnSmallestDisksOnLinuxForDisksWithoutVolumePartitions()
175+
{
176+
this.disks = this.mockFixture.CreateDisks(PlatformID.Unix, false);
177+
this.disks.ElementAt(0).Properties["size"] = 3 * 1024 * 1024;
178+
this.disks.ElementAt(1).Properties["size"] = 1 * 1024 * 1024;
179+
this.disks.ElementAt(2).Properties["size"] = 3 * 1024 * 1024;
180+
this.disks.ElementAt(3).Properties["size"] = 1 * 1024 * 1024;
181+
182+
string filterString = "smallestSize";
183+
IEnumerable<Disk> result = DiskFilters.FilterDisks(this.disks, filterString, PlatformID.Unix);
184+
Assert.AreEqual(2, result.Count());
185+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(1), result.ElementAt(0)));
186+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(3), result.ElementAt(1)));
187+
}
188+
145189
[Test]
146190
public void DiskFiltersCanFilterOnSmallestDisksOnWindows()
147191
{
@@ -158,7 +202,23 @@ public void DiskFiltersCanFilterOnSmallestDisksOnWindows()
158202
}
159203

160204
[Test]
161-
public void DiskFiltersCanFilterOnOsDisk()
205+
[Ignore("We can support this in the future if we add a 'Size' property to the Disk object for Windows (e.g. DiskPart -> list disks).")]
206+
public void DiskFiltersCanFilterOnSmallestDisksOnWindowsForDisksWithoutVolumePartitions()
207+
{
208+
this.disks = this.mockFixture.CreateDisks(PlatformID.Win32NT, false);
209+
this.disks.ElementAt(0).Properties["Size"] = "6 GB";
210+
this.disks.ElementAt(1).Properties["Size"] = "4 TB";
211+
this.disks.ElementAt(2).Properties["Size"] = "5TB";
212+
this.disks.ElementAt(3).Properties["Size"] = "7 mb";
213+
214+
string filterString = "smallestSize";
215+
IEnumerable<Disk> result = DiskFilters.FilterDisks(this.disks, filterString, PlatformID.Win32NT);
216+
Assert.AreEqual(1, result.Count());
217+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(3), result.ElementAt(0)));
218+
}
219+
220+
[Test]
221+
public void DiskFiltersCanFilterOnOsDiskOnLinux()
162222
{
163223
this.disks = this.mockFixture.CreateDisks(PlatformID.Unix, true);
164224

@@ -180,6 +240,75 @@ public void DiskFiltersCanFilterOnOsDisk()
180240
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(3), result3.ElementAt(2)));
181241
}
182242

243+
[Test]
244+
public void DiskFiltersCanFilterOnOsDiskOnLinuxForDisksWithoutVolumePartitions()
245+
{
246+
this.disks = this.mockFixture.CreateDisks(PlatformID.Unix, false);
247+
248+
string filterString = "osdisk";
249+
IEnumerable<Disk> result = DiskFilters.FilterDisks(this.disks, filterString, PlatformID.Unix);
250+
Assert.AreEqual(1, result.Count());
251+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(0), result.ElementAt(0)));
252+
253+
string filterString2 = "osdisk:true";
254+
IEnumerable<Disk> result2 = DiskFilters.FilterDisks(this.disks, filterString2, PlatformID.Unix);
255+
Assert.AreEqual(1, result2.Count());
256+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(0), result2.ElementAt(0)));
257+
258+
string filterString3 = "osdisk:false";
259+
IEnumerable<Disk> result3 = DiskFilters.FilterDisks(this.disks, filterString3, PlatformID.Unix);
260+
Assert.AreEqual(3, result3.Count());
261+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(1), result3.ElementAt(0)));
262+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(2), result3.ElementAt(1)));
263+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(3), result3.ElementAt(2)));
264+
}
265+
266+
[Test]
267+
public void DiskFiltersCanFilterOnOsDiskOnWindows()
268+
{
269+
this.disks = this.mockFixture.CreateDisks(PlatformID.Win32NT, true);
270+
271+
string filterString = "osdisk";
272+
IEnumerable<Disk> result = DiskFilters.FilterDisks(this.disks, filterString, PlatformID.Win32NT);
273+
Assert.AreEqual(1, result.Count());
274+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(0), result.ElementAt(0)));
275+
276+
string filterString2 = "osdisk:true";
277+
IEnumerable<Disk> result2 = DiskFilters.FilterDisks(this.disks, filterString2, PlatformID.Win32NT);
278+
Assert.AreEqual(1, result2.Count());
279+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(0), result2.ElementAt(0)));
280+
281+
string filterString3 = "osdisk:false";
282+
IEnumerable<Disk> result3 = DiskFilters.FilterDisks(this.disks, filterString3, PlatformID.Win32NT);
283+
Assert.AreEqual(3, result3.Count());
284+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(1), result3.ElementAt(0)));
285+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(2), result3.ElementAt(1)));
286+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(3), result3.ElementAt(2)));
287+
}
288+
289+
[Test]
290+
public void DiskFiltersCanFilterOnOsDiskOnWindowsForDisksWithoutVolumePartitions()
291+
{
292+
this.disks = this.mockFixture.CreateDisks(PlatformID.Win32NT, false);
293+
294+
string filterString = "osdisk";
295+
IEnumerable<Disk> result = DiskFilters.FilterDisks(this.disks, filterString, PlatformID.Win32NT);
296+
Assert.AreEqual(1, result.Count());
297+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(0), result.ElementAt(0)));
298+
299+
string filterString2 = "osdisk:true";
300+
IEnumerable<Disk> result2 = DiskFilters.FilterDisks(this.disks, filterString2, PlatformID.Win32NT);
301+
Assert.AreEqual(1, result2.Count());
302+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(0), result2.ElementAt(0)));
303+
304+
string filterString3 = "osdisk:false";
305+
IEnumerable<Disk> result3 = DiskFilters.FilterDisks(this.disks, filterString3, PlatformID.Win32NT);
306+
Assert.AreEqual(3, result3.Count());
307+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(1), result3.ElementAt(0)));
308+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(2), result3.ElementAt(1)));
309+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(3), result3.ElementAt(2)));
310+
}
311+
183312
[Test]
184313
public void DiskFiltersCanFilterOnBiggestNonOsDisk()
185314
{
@@ -197,7 +326,7 @@ public void DiskFiltersCanFilterOnBiggestNonOsDisk()
197326
}
198327

199328
[Test]
200-
public void DiskFiltersCanFilterOnSizeBiggerThan()
329+
public void DiskFiltersCanFilterOnSizeBiggerThanOnLinux()
201330
{
202331
this.disks = this.mockFixture.CreateDisks(PlatformID.Unix, true);
203332
this.disks.ElementAt(0).Properties["size"] = (long)5 * 1024 * 1024 * 1024;
@@ -213,7 +342,24 @@ public void DiskFiltersCanFilterOnSizeBiggerThan()
213342
}
214343

215344
[Test]
216-
public void DiskFiltersCanFilterOnSizeLessThan()
345+
[Ignore("We can support this in the future if we add a 'Size' property to the Disk object for Windows (e.g. DiskPart -> list disks) and consider that in the filtering.")]
346+
public void DiskFiltersCanFilterOnSizeBiggerThanOnWindows()
347+
{
348+
this.disks = this.mockFixture.CreateDisks(PlatformID.Win32NT, true);
349+
this.disks.ElementAt(0).Properties["Size"] = (long)5 * 1024 * 1024 * 1024;
350+
this.disks.ElementAt(1).Properties["Size"] = (long)2 * 1024 * 1024 * 1024;
351+
this.disks.ElementAt(2).Properties["Size"] = (long)3 * 1024 * 1024 * 1024;
352+
this.disks.ElementAt(3).Properties["Size"] = (long)7 * 1024 * 1024 * 1024;
353+
354+
string filterString = "SizeGreaterThan:4gb";
355+
IEnumerable<Disk> result = DiskFilters.FilterDisks(this.disks, filterString, PlatformID.Win32NT);
356+
Assert.AreEqual(2, result.Count());
357+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(0), result.ElementAt(0)));
358+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(3), result.ElementAt(1)));
359+
}
360+
361+
[Test]
362+
public void DiskFiltersCanFilterOnSizeLessThanOnLinux()
217363
{
218364
this.disks = this.mockFixture.CreateDisks(PlatformID.Unix, true);
219365
this.disks.ElementAt(0).Properties["size"] = (long)5 * 1024 * 1024 * 1024;
@@ -228,6 +374,23 @@ public void DiskFiltersCanFilterOnSizeLessThan()
228374
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(2), result.ElementAt(1)));
229375
}
230376

377+
[Test]
378+
[Ignore("We can support this in the future if we add a 'Size' property to the Disk object for Windows (e.g. DiskPart -> list disks) and consider that in the filtering.")]
379+
public void DiskFiltersCanFilterOnSizeLessThanOnWindows()
380+
{
381+
this.disks = this.mockFixture.CreateDisks(PlatformID.Unix, true);
382+
this.disks.ElementAt(0).Properties["Size"] = (long)5 * 1024 * 1024 * 1024;
383+
this.disks.ElementAt(1).Properties["Size"] = (long)3 * 1024 * 1024 * 1024;
384+
this.disks.ElementAt(2).Properties["Size"] = (long)2 * 1024 * 1024 * 1024;
385+
this.disks.ElementAt(3).Properties["Size"] = (long)7 * 1024 * 1024 * 1024;
386+
387+
string filterString = "SizeLessThan:4000 Mb";
388+
IEnumerable<Disk> result = DiskFilters.FilterDisks(this.disks, filterString, PlatformID.Unix);
389+
Assert.AreEqual(2, result.Count());
390+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(1), result.ElementAt(0)));
391+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(2), result.ElementAt(1)));
392+
}
393+
231394
[Test]
232395
public void DiskFiltersCanFilterOnSizeLessThanAndNonOs()
233396
{
@@ -271,6 +434,19 @@ public void DiskFiltersCanFilterOnDiskPathInLinux()
271434
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(3), result.ElementAt(1)));
272435
}
273436

437+
[Test]
438+
public void DiskFiltersCanFilterOnDiskPathInLinuxWhenDisksHaveNoVolumePartitions()
439+
{
440+
this.disks = this.mockFixture.CreateDisks(PlatformID.Unix, false);
441+
442+
// The disks are sdc, sdd, sde, sdf
443+
string filterString = "DiskPath:/dev/sdc,/dev/sde";
444+
IEnumerable<Disk> result = DiskFilters.FilterDisks(this.disks, filterString, PlatformID.Unix);
445+
Assert.AreEqual(2, result.Count());
446+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(1), result.ElementAt(0)));
447+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(3), result.ElementAt(1)));
448+
}
449+
274450
[Test]
275451
public void DiskFiltersCanFilterOnDiskPathInWindows()
276452
{
@@ -285,6 +461,20 @@ public void DiskFiltersCanFilterOnDiskPathInWindows()
285461
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(2), result.ElementAt(1)));
286462
}
287463

464+
[Test]
465+
public void DiskFiltersCanFilterOnDiskPathInWindowsWhenDisksHaveNoVolumePartitions()
466+
{
467+
this.mockFixture.Setup(PlatformID.Win32NT);
468+
this.disks = this.mockFixture.CreateDisks(PlatformID.Win32NT, false);
469+
470+
// The disks \\.\PHYSICALDISK0,\\.\PHYSICALDISK2
471+
string filterString = @"DiskPath:\\.\PHYSICALDISK0,\\.\PHYSICALDISK2";
472+
IEnumerable<Disk> result = DiskFilters.FilterDisks(this.disks, filterString, PlatformID.Win32NT);
473+
Assert.AreEqual(2, result.Count());
474+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(0), result.ElementAt(0)));
475+
Assert.IsTrue(object.ReferenceEquals(this.disks.ElementAt(2), result.ElementAt(1)));
476+
}
477+
288478
[Test]
289479
public void DiskFiltersHandlesAnomaliesEncounters_1()
290480
{

src/VirtualClient/VirtualClient.Contracts/DiskExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ public static string GetPreferredAccessPath(this Disk disk, PlatformID platform)
7777
public static string GetDefaultMountPointName(this DiskVolume volume, string prefix = null)
7878
{
7979
// Example:
80-
// mnt_dev_sda
81-
// mnt_dev_sdb
80+
// mnt_dev_sda1
81+
// mnt_dev_sdb1
8282
//
8383
// mnt_c
8484
// mnt_d

src/VirtualClient/VirtualClient.Main/profiles/PERF-GPU-MLPERF-NVIDIA.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,7 @@
6161
{
6262
"Type": "FormatDisks",
6363
"Parameters": {
64-
"Scenario": "InitializeDisks",
65-
"DiskFilter": "$.Parameters.DiskFilter"
64+
"Scenario": "InitializeDisks"
6665
}
6766
},
6867
{

src/VirtualClient/VirtualClient.Main/profiles/PERF-GPU-MLPERF-TRAINING-NVIDIA.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@
3636
{
3737
"Type": "FormatDisks",
3838
"Parameters": {
39-
"Scenario": "InitializeDisks",
40-
"DiskFilter": "$.Parameters.DiskFilter"
39+
"Scenario": "InitializeDisks"
4140
}
4241
},
4342
{

src/VirtualClient/VirtualClient.Main/profiles/PERF-GPU-MLPERF.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@
4040
{
4141
"Type": "FormatDisks",
4242
"Parameters": {
43-
"Scenario": "InitializeDisks",
44-
"DiskFilter": "$.Parameters.DiskFilter"
43+
"Scenario": "InitializeDisks"
4544
}
4645
},
4746
{

src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-DISKSPD.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,8 +374,7 @@
374374
{
375375
"Type": "FormatDisks",
376376
"Parameters": {
377-
"Scenario": "InitializeDisks",
378-
"DiskFilter": "$.Parameters.DiskFilter"
377+
"Scenario": "InitializeDisks"
379378
}
380379
},
381380
{

src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-DISCOVERY.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -517,8 +517,7 @@
517517
{
518518
"Type": "FormatDisks",
519519
"Parameters": {
520-
"Scenario": "InitializeDisks",
521-
"DiskFilter": "$.Parameters.DiskFilter"
520+
"Scenario": "InitializeDisks"
522521
}
523522
},
524523
{

src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-MULTITHROUGHPUT.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,13 @@
7777
{
7878
"Type": "FormatDisks",
7979
"Parameters": {
80-
"Scenario": "InitializeDisks",
80+
"Scenario": "InitializeDisks"
81+
}
82+
},
83+
{
84+
"Type": "MountDisks",
85+
"Parameters": {
86+
"Scenario": "CreateMountPoints",
8187
"DiskFilter": "$.Parameters.DiskFilter"
8288
}
8389
},

src/VirtualClient/VirtualClient.Main/profiles/PERF-IO-FIO-OLTP.json

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,19 @@
188188
}
189189
],
190190
"Dependencies": [
191+
{
192+
"Type": "FormatDisks",
193+
"Parameters": {
194+
"Scenario": "InitializeDisks"
195+
}
196+
},
197+
{
198+
"Type": "MountDisks",
199+
"Parameters": {
200+
"Scenario": "CreateMountPoints",
201+
"DiskFilter": "$.Parameters.DiskFilter"
202+
}
203+
},
191204
{
192205
"Type": "LinuxPackageInstallation",
193206
"Parameters": {
@@ -198,12 +211,6 @@
198211
"Packages-Zypper": "fio,libaio-dev"
199212
}
200213
},
201-
{
202-
"Type": "FormatDisks",
203-
"Parameters": {
204-
"Scenario": "InitializeDisks"
205-
}
206-
},
207214
{
208215
"Type": "DependencyPackageInstallation",
209216
"Parameters": {

0 commit comments

Comments
 (0)