What is queue depth?
Queue depth, in storage, is the number of pending input/output (I/O) requests that a storage resource can handle at any one time. Performance-demanding applications can generate enough storage I/Os to create queue depths in the hundreds.
If the number of I/O requests exceeds the supported queue depth, the storage device will return a failure message to the connecting host. The host operating system (OS) then must resend the I/O.
The host OS is responsible for scheduling and optimizing I/O requests and for handling the failure messages. Although most OSes can process these queue failures, issues sometimes arise, especially when multiple hosts are connecting to a storage device simultaneously. Too many queue failures can impact application performance and lead to system errors.
How does queue depth work?
The maximum queue depth that a drive can support depends on the storage interface standard it uses to connect to the host systems. The queue depth settings of the three storage interface are:
- Serial ATA, or SATA, devices can support one command queue with a queue depth of up to 32 commands.
- Serial-attached SCSI, or SAS, devices can support one command queue with a queue depth of up to 256 commands.
- Nonvolatile memory express, or NVMe, devices can support a maximum number of 65,535 command queues with a queue depth of up to 65,536 commands per queue.
The greater the queue depth value, the more likely it is to avoid I/O request failures that lead to bottlenecks. This is one reason why NVMe drives can outperform SATA and SAS drives. When a number of hosts connect to a SATA or SAS drive, the queue can quickly fill up, reducing throughput and increasing latency.
High-performance applications have workloads that can generate storage I/O demands that create queue depths in the hundreds. Solid-state drives (SSDs), based on NVMe technology, with its larger queue depth, have faster response times. They can respond almost instantly to these types of I/O requests.
Other ways queue depth is used
Queue depth serves other roles, as well. A RAID controller typically supports its own queue depth, which can be larger than the combined queue depth of the individual disks. This is because the controller uses caching and other mechanisms to manage I/O across the RAID array. For example, Dell Technologies PowerEdge RAID Controller 11 offers a queue depth of up to 5,120 commands.
Queue depth is also a factor when managing a storage area network (SAN). In a SAN, the maximum queue depth must be configured on the host bus adapters (HBAs) to avoid sending more concurrent I/O requests than a storage device can support per logical unit number (LUN). Vendors will often recommend how to configure the HBA queue depth when connecting to storage resources in the data center. If the HBA queue depth is not carefully managed, application performance can suffer.
Learn more about various aspects of storage management in this comprehensive guide.