BFQ is a proportional-share disk scheduling algorithm 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 disk is virtually as responsive as if it was idle. For example, even if one or more large files are being read or written, or a tree of source files is being compiled, or else one or more virtual machines are performing I/O, starting a command/application or loading a file from within an application takes about the same time as if the disk 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 disk 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 disk throughput as desired to disk-bound applications (and not just the disk time), with any workload and independently of the disk parameters..
Systems adopting BFQ
BFQ is the default disk scheduler in Sabayon and CyanogenMod, as well as in the Zen Kernel, the pf-kernel and several kernels for smartphones. BFQ is instead optionally available in Arch Linux and Gentoo Linux. I record a few tens of downloads per day from people using other distributions as well. So far, the users that gave us feedback confirmed 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). 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.
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: