Knowledge Base

|
Controlling LUN queue depth throttling in VMware ESX/ESXi
Symptoms
- If the ESX host detects a queue full condition, it may abort the SCSI commands
- Queue Full may show up as QFULL or Task Set Full state
- If QFULL conditions exist, the ESX VMkernel log may contain entries similar to:
status = 40/0 0x## 0x## 0x##" (ESX 3.x)
H:0x0 D:0x28 P:0x0 Valid sense data: 0x## 0x## 0x##" (ESX 4.0)
Note: The hexadecimal 28 or decimal 40 in the above error is the SCSI Status Code for the queue full state.
Resolution
VMware ESX 3.5 Update 4 and ESX 4.0 introduces an adaptive queue depth algorithm that adjusts the LUN queue depth in the VMkernel I/O stack. This algorithm is activated when the storage array indicates I/O congestion by returning a BUSY or QUEUE FULL status. These status codes may indicate congestion at the LUN level or at the port (or ports) on the array. When congestion is detected, VMkernel throttles the LUN queue depth. The VMkernel attempts to gradually restore the queue depth when congestion conditions subside.
This algorithm can be activated by changing the values of the QFullSampleSize and QFullThreshold parameters. When the number of QUEUE FULL or BUSY conditions reaches the QFullSampleSize value, the LUN queue depth reduces to half of the original value. When the number of good status conditions received reaches the QFullThreshold value, the LUN queue depth increases one at a time.
Note: The QFullSampleSize and QFullThreshold are system-wide configuration parameters. If the system has different vendor storage arrays connected, all the arrays experience the throttling effect if one LUN/port from any array returns the QUEUE FULL or BUSY errors.
To enable the algorithm:
- Using the VMware Infrastructure Client or vSphere Client, navigate to the Configuration tab of the VMware ESX host you want to modify.
- Click Advanced Settings under the Software section.
- Click Disk in the left side pane.
- Set QFullSampleSize to a value greater than zero. The usable range is 0 to 64.
Note: For a 3PAR, NetApp and IBM XIV storage arrays, set the QFullSampleSize value to 32.
Note: For other storage arrays, please contact your storage vendor.
- Set QFullThreshold to a value lesser than or equal to QFullSampleSize. The usable range is 1 to 16.
Note: For a 3PAR storage arrays, set the QFullThreshold value to 4.
Note: For a NetApp and IBM XIV storage arrays, set the QFullThreshold value to 8.
Note: For other storage arrays, please contact your storage vendor.
Tags
Request a Product Feature
- KB Article:
- Updated:
- Categories:
- Product Family:
- Products:
- Product Versions:

