Q: I created a 16-disk storage space in my Azure virtual machine, but I'm not seeing 8000 IOPS for an 8K workload; why?

A: Most likely, when you created the storage space you didn't change the number of columns parameter from the default of 8 to 16, which is required (otherwise, all 16 disks won't be used in parallel and therefore won't see the combined 8000 IOPS—i.e., 500 per disk).

For example:

$disks = Get-StoragePool –FriendlyName StoragePool1 -IsPrimordial $false | Get-PhysicalDisk
New-VirtualDisk –FriendlyName VirtualDisk1 -ResiliencySettingName Simple –NumberOfColumns $disks.Count –UseMaximumSize –Interleave 256KB
Get-VirtualDisk –FriendlyName VirtualDisk1 | Get-Disk | Initialize-Disk –Passthru | New-Partition –AssignDriveLetter –UseMaximumSize | Format-Volume –AllocationUnitSize 64K

Notice that the -NumberOfColumns parameter is set to the number of disks in the pool to fully utilize the underlying storage pool. The –Interleave parameter enables you to specify the number of bytes written in each underlying data disk in a virtual disk; 256KB works well for most workloads.