VSAN 6.2 has a new quality of service mechanism which we are referring to as “IOPS limit for object”. Through a policy setting, a customer can set an IOPS limit on a per object basis (typically VMDK) which will guarantee that the object will not be able to exceed this amount of IOPS. This is very useful if you have a virtual machine that might be consuming more than its fair share of resources. This policy setting will ensure that there are “guard rails” placed on this virtual machine so it doesn’t impact other VMs, or impact the overall performance of the VSAN datastore.
The screenshot below shows what the new “IOPS limit for object” capability looks like in the VM Storage Policy. Simply select “IOPS limit for object” for your policy, and then select an integer value for the IOPS limit. Any object (VMDK) that has this policy assigned will not be able to generate more than that number of IOPS.
The IO size for IOPS Limit is normalized to 32KB. This means that if you set the IOPS Limit to 10,000 and the typical I/O size from the VM was 64KB, then you could do only 5,000 IOPS. If your block size is 4KB/8KB/16KB or 32KB, you would be able to achieve the 10,000 IOPS limit. My understanding is that there is no way to change this normalized I/O size in this release. Note that this is a hard limit on the number of IOPS so even if there are plenty of resources available on the system to do more, this will prevent the VM/VMDK from doing so.
One thing to consider is that not only is read and write I/O counted towards the limit, but also any snapshot I/O that occurs against the VM/VMDK is added to the IOPS limit.
If the I/O against a particular VM/VMDK rises about the IOPS Limit threshold, i.e. it is set to 10,000 IOPS and we receive the 10,001st I/O, then that I/O is delayed/throttled.