Changing an existing Input/Output Operations Per Second (IOPS) limit might cause a significant drop in I/O throughput of a virtual machine.
search cancel

Changing an existing Input/Output Operations Per Second (IOPS) limit might cause a significant drop in I/O throughput of a virtual machine.

book

Article ID: 313242

calendar_today

Updated On:

Products

VMware vSphere ESXi

Issue/Introduction

Symptoms:
Changing an Input/Output Operations Per Second (IOPS) limit might cause a significant drop in I/O throughput of virtual machines When IOPS limit is changed based on the Storage I/O Control (SIOC) by using a Storage Policy Based Management (SPBM) policy, the VM performance might be significantly slower. Normally, when the SPBM policy is set, IOPS limits are handled by an I/O filter, while mClock, the default I/O scheduler, handles reservations and shares. Due to a logic fault, when existing IOPS limit is changed, I/Os might throttle at the mClock scheduler instead at the I/O filter. As a result, no I/Os get to the I/O filter which causes a significant drop in the I/O throughput of virtual machines.

Environment

VMware vSphere ESXi 7.0

Cause

When an existing SIOC policy is edited via SPBM, there could sometimes be an error which will result in incorrect application of policy. This could lead to a drop in VM IOPs performance.
 

Resolution

The issue has been resolved in the vCenter/ESXi 8.0 Update 1 release.

  • Storage Policy with VC/IOPS capability, is configured in vCenter with SPBM Storage IO Control Settings like IOPS limit, IOPS reservation, IOPS shares.
  • VM disks using such storage policy show IOPS limit as per the IOPS settings on the Storage Policy in vCenter.
  • With vCenter 8.0.1.0, StorageIOAllocationInfo MOB in vCenter will report the IOPS limit as unlimited (-1). But the intended IOPS limits(from storage policy) are applied on the disks correctly.
  • When the storage policy is being applied via SPBM the associated profiles for a particular VM can be queried using the following:

- To query the profiles: PbmQueryProfile(queryProfile).

- In case it is required to retrieve the contents of the profile, use PbmRetrieveContent(retrieveContent)