Dell Compellent – ESXi HBA Queue Length

This is a quick post that is more for my reference than for anything else. When I had the Compellent installed, Dell passed on a copy of the “Dell Compellent Storage Center Best Practices with vSphere 5.x” document (Dell P/N 680-041-020). One of the interesting points I noted was around modifying the queue depth, and where that should be done. As with any best practice document, there are going to be factors that may influence the outcomes of these activities in a positive or negative fashion. In other words, YMMV, but I found it useful. As always, test it before launching into production.

Firstly, set the HBA queue depth to 255 via the HBA BIOS. The thinking here is that the VMkernel driver module ultimately controls the HBA’s queue depth. Now, set the queue depth on the driver module. I use QLogic HBAs in my environment.

To find the correct driver name for the loaded module, run the following command.

esxcli system module list |grep qla

The output should be something like qla2xxx

Now run the following command.

esxcli system module parameters set -m qla2xxx -p "ql2xmaxqdepth=255 ql2xloginretrycount=60 qlport_down_retry=60"

Note that you can also set it via Disk.SchedNumReqOutstanding (DNSRO), where the default value is 32. Keep in mind that this setting is only enforced when more than one VM is active on the datastore. This is a global setting too, so if you’ve set the DNSRO value to 64, for example and you have two datastores in place, one with 4 VMs and one with 6 VMs, each VM will get 64 as the queue depth value. VMware recommend that this value be set to the same as the VMkernel module driver value.

You can also modify the queue depth in the Windows guest OS my modifying the registry settings of the OS.

In any case, go check out the document. It’s one of the more useful white papers I’ve seen from a vendor in some time.