Queue Depth
Queue depth (also called I/O depth) is the number of I/O requests a host has submitted to a storage device that have not yet been completed. Higher queue depth allows storage devices to parallelize and reorder operations, maximizing throughput. NVMe supports up to 64,000 queues with 64,000 commands each — orders of magnitude more than legacy protocols.
Why Queue Depth Matters
NVMe SSDs contain thousands of NAND die that can service operations in parallel. To achieve peak IOPS, the host must keep the device's internal queues full — otherwise NAND dies sit idle waiting for the next command. This is why fio benchmarks use --iodepth=128 or higher.
Queue Depth Comparison
| Protocol | Max Queues | Commands/Queue | Total Commands |
|---|---|---|---|
| AHCI (SATA) | 1 | 32 | 32 |
| SAS / iSCSI (SCSI) | 1 | 128 | 128 |
| Fibre Channel | 2,048 | ~256 | ~500K |
| NVMe / NVMe-oF | 65,535 | 65,535 | ~4 billion |
Queue Depth in Applications
Most applications don't explicitly configure queue depth — the OS and storage driver manage it. However, databases like PostgreSQL and MySQL can be tuned to issue more concurrent I/O (via random_page_cost, connection pooling, and async I/O settings), effectively increasing the queue depth seen by the NVMe device and improving IOPS utilization.