Control which I/O request completions will fire interrupts, improving support for mixed latency- and throughput-sensitive workloads
The software stack of NVMe SSDs uses polling to deliver low latency I/O, and it employs interrupt coalescing to bound the overhead of interrupts. We contend that polling is at odds with throughput-sensitive workload. We further contend that using standard NVMe interrupt coalescing is suboptimal for mixed workload consisting of latency-sensitive I/O requests together with requests that can be processed in large batches. We therefore propose to develop a new I/O model in which software has full, fine-grained control over the interrupts emitted by NVMe devices by introducing a new type of I/O command: request for interrupt. The goal of our model is (i) to support fast completion of latency-sensitive requests (ii) without wasting valuable CPU cycles on polling (iii) while providing better-preforming processing of requests that can be batched, (iv) even in the face of mixed latency/throughput-sensitive workloads.