Budget Fair Queueing (BFQ) I/O Scheduler

BFQ is a proportional-share storage-I/O scheduler that also supports cgroups. Available in Linux since 4.12, BFQ features the following performance (benchmark results here), on any type of storage medium (embedded flash storage, HDDs, SATA or NVMe SSDs, ...) and on systems ranging from minimal embedded systems to high-end servers:

Low latency for interactive tasks
Under load, BFQ loads applications up to 20X times as fast as any other I/O scheduler. In absolute terms, the system is virtually as responsive as if it was idle, regardless of the background I/O workload. As a concrete example, with writes as background workload on a Samsung SSD 970 PRO, gnome-terminal starts in 1.8 seconds with BFQ, and in at least 28.7 seconds with the other I/O schedulers.
Low latency for soft real-time applications
Soft real-time applications, such as audio and video players or audio audio- and video-streaming applications, enjoy smooth playback or streaming, regardless of the background I/O workload.
High throughput
BFQ reaches an I/O throughput equal to or higher than (up to 2X on slower devices) that reached by the other I/O schedulers.
Strong bandwidth and latency guarantees
In multi-client applications---i.e., when multiple clients, groups, containers, virtual machines or any other kind of entities compete for a shared medium---BFQ provides each entity with strong bandwidth and latency guarantees.
From 5x to 10X throughput boost in multi-client applications
In addition to providing the above strong guarantees, BFQ reaches from 5X to 10X higher throughput than any other solution for guaranteeing bandwidth to each entity competing for storage.
Higher speed for code-development tasks
If some additional workload happens to be executed in parallel, then BFQ executes the I/O-related components of typical code-development tasks (compilation, checkout, merge, ...) much more quickly than the other I/O schedulers.

Many demos show BFQ in action, compared with existing I/O schedulers and policies, and on systems ranging from mainstream Linux distributions to Android and Chromium OS. More details on BFQ can be found here.

This project is supported by Linaro.

Systems adopting BFQ

BFQ is available in Linux from 4.12.0. In addition, several systems have adopted BFQ as default I/O scheduler. Some recent examples follow. Chromium OS made this choice recently, while Android is supposed to make this choice as it moves to more recent Linux-kernel versions. OpenSUSE/SUSE and Fedora are evaluating a transition to BFQ. Given current BFQ's momentum, the information in this paragraph may be outdated when you read this page.

Several distributions and kernel variants switched to BFQ years ago: in Manjaro, Mageia, OpenMandriva, Sabayon, Arch Linux ARM (for Marvell Kirkwood), ROSA, Zen Kernel, and many kernels for smartphones.

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 (now a little outdated), including a thorough performance evaluation, carried out using an old implementation of BFQ.