From: Andre Noll
At this time of writing (2018-11) there exist two different sets -of schedulers: the traditional single-queue schedulers and the -modern multi-queue schedulers, which are expected to replace the -single-queue schedulers soon. The three single-queue schedulers, -noop, deadline and cfq (complete fair queueing), were designed for -rotating disks. They reorder requests with the aim to minimize seek -time. The newer multi-queue schedulers, mq-deadline, kyber, and bfq -(budget fair queueing), aim to max out even the fastest devices. As -implied by the name "multi-queue", they implement several request -queues, the number of which depends on the hardware in use. This -has become necessary because modern storage hardware allows multiple -requests to be submitted in parallel from different CPUs. Moreover, -with many CPUs the locking overhead required to put a request into -a queue increases. Per-CPU queues allow for per-CPU locks, which -decreases queue lock contention.
+Traditionally, the schedulers were designed for rotating disks. +They implemented a single request queue and reordered the queued +I/O requests with the aim to minimize disk seek times. The newer +multi-queue schedulers mq-deadline, kyber, and bfq (budget fair +queueing) aim to max out even the fastest devices. As implied by +the name "multi-queue", they implement several request queues, +the number of which depends on the hardware in use. This has become +necessary because modern storage hardware allows multiple requests +to be submitted in parallel from different CPUs. Moreover, with many +CPUs the locking overhead required to put a request into a queue +increases. Per-CPU queues allow for per-CPU locks, which decreases +queue lock contention.
We will take a look at some aspects of the Linux block layer and on the various I/O schedulers. An exercise on loop devices enables the