Budget Fair Queueing (BFQ) Storage-I/O Scheduler

BFQ is a proportional-share storage-I/O scheduler that also supports hierarchical scheduling with a cgroups interface. Here are the main nice features of BFQ.

Low latency for interactive applications
According to our results, whatever the background load is, for interactive tasks the storage device is virtually as responsive as if it was idle. For example, even if one or more of the following background workloads are being served in parallel:
  • one or more large files are being read or written,
  • a tree of source files is being compiled,
  • one or more virtual machines are performing I/O,
  • a software update is in progress,
  • indexing daemons are scanning the filesystems and updating their databases,
starting a command/application or loading a file from within an application takes about the same time as if the storage device was idle. As a comparison, with CFQ, NOOP, DEADLINE or SIO, and under the same conditions, applications experience high latencies, or even become unresponsive until the background workload terminates (especially on SSDs).
Low latency for soft real-time applications
Also soft real-time applications, such as audio and video players or audio audio- and video-streaming applications, enjoy about the same latencies regardless of the device load. As a consequence, these applications do not suffer from almost any glitch due to the background workload.
High throughput
BFQ achieves up to 30% higher throughput than CFQ on hard disks with most parallel workloads, and about the same throughput with the rest of the workloads we have considered. BFQ achieves the same throughput as CFQ, NOOP, DEADLINE and SIO on SSDs.
Strong fairness guarantees
As for long-term guarantees, BFQ distributes the throughput as desired to I/O-bound applications (and not just the device time), with any workload and independently of the device parameters..

More details on the features of BFQ can be found here, and both a 7-minute demo with an SSD and an older 15-minute demo with an hard disk are available.

Systems adopting BFQ

BFQ is the default I/O scheduler in Manjaro, OpenMandriva, Sabayon and ROSA, as well as in the Zen Kernel, the pf-kernel and several kernels for smartphones. BFQ is instead optionally available in Arch, PCLinuxOS and Gentoo. We record a few tens of downloads per day from people using other distributions as well. The feedback we have received so far basically confirms the expected latency drop and throughput boost in everyday use.

Content of this site

In these pages you can find a brief description of the properties of BFQ and of how it works, together with the scheduler interface, the available tunables and the TODO list (plus links to various technical reports). A short history of BFQ is available as well. You can download the sources, and see some of the results we have obtained using an ad hoc benchmark suite. Finally, there is a comparison with other production and research schedulers, including a thorough performance evaluation, carried out using an old implementation of BFQ.

Note

Any proposal, information or suggestion on how to find resources to support this project is welcome (interested organizations, research projects, ...). You can also help by just donating through PayPal:

 
Last updated: October 19 2014.
Paolo Valente (paolo DOT valente AT unimore DOT it)