There are several storage queues:
- Device driver queue
- Kernel queue
- Storage array queue
The device driver queue is used for low-level interaction with the storage device. This queue controls the number of active commands that can be on an LUN at the same time. This number is effectively the concurrency of the storage stack. If you set the device queue to 1
, then each storage command becomes sequential.
The kernel queue is an overflow queue for the device driver queues. This queue enables features that optimize storage (it doesn't include them; they are built using the queue). These features include multipathing for failover and load balancing, prioritization of storage activities, which is based on VM and cluster shares, and optimizations to improve the efficiency of long sequential operations.
Here's an example of this: batching several incoming read requests and doing 1, 4-7, and 14 hashes together because they're all on nearby parts...