CFQ IO Scheduler

A Presentation by Jens Axboe

IO performance is one of the most critical aspects of a wide variety
of systems. On the server side, IO bound workloads are plentiful, and on the
desktop, IO latencies are often one of the most important characteristics of
a responsive system.

The problem with IO scheduling (like most other scheduling), is that there
are no correct answers; or, at least, none that we can find in a bounded
time. Often the IO scheduler has to work without knowledge of what
the applications are doing and what their requirements are. To make
matters even worse, the IO scheduler has little idea on what the
underlying storage subsystem looks like.

This talk presents the CFQ (Complete Fair Queueing) IO scheduler as
designed and implemented for Linux and how it has evolved over time. It
details the latency and bandwidth design, and how that is coupled to the
fairness aspect. I'll discuss how CFQ attempts to adjust to workloads
and detect properties of the hardware, and compare that to the other
Linux IO schedulers. CFQ has a lot of advanced features not seen
elsewhere, like proper support for IO priorities, which will be
explained.

Direct link to video