Kernel BFS

The kernel-bfs project provides a bleeding-edge kernel with its main feature being Con Kolivas' BFS CPU scheduler. Kernel-bfs is derived from the kernel-power project and thus retains all features from it (e.g. overclocking, IPv6, USB Host mode, ..). This page only contains information exclusive to kernel-bfs, please refer to the kernel-power wiki page for shared information.

The BFS CPU scheduler
The CPU scheduler is responsible for assigning the CPU's timeslices to all processes which are being ran on the operating system. By default, Linux uses the Completely Fair Scheduler (CFS). However, this scheduler is designed to scale to "monster proportion hardware that the common man will never see". This can result in sub-optimal results on machines with lower specifications, like your typical desktop, laptop, and our phone.

From the BFS FAQ: What is it?

BFS is the Brain Fuck Scheduler. It was designed to be forward looking only, make the most of lower spec machines, and not scale to massive hardware. ie it is a desktop orientated scheduler, with extremely low latencies for excellent interactivity by design rather than "calculated", with rigid fairness, nice priority distribution and extreme scalability within normal load levels.

Extreme scalability within normal load levels? Isn't that a contradiction? For years we've been doing our workloads on linux to have more work than we had CPUs because we thought that the "jobservers" were limited in their ability to utilise the CPUs effectively (so we did make -j6 or more on a quad core machine for example). This scheduler proves that the jobservers weren't at fault at all, because make -j4 on a quad core machine with BFS is faster than *any* choice of job numbers on CFS. See reverse scalability graph courtesy of Serge Belyshev showing various job numbers on a kernel build on a quad core machine. The problem has always been that the mainline scheduler can't keep the CPUs busy enough; ie it doesn't make the most of your hardware in the most common situations on a desktop!

The BFS FAQ also provides information on other typical questions. Please refer to it for more information.

Bleeding-edge features
Besides the BFS CPU scheduler, kernel-bfs incorporates several bleeding-edge patches. At the moment of writing, the following additional patches over kernel-power are included:


 * A set of patches from the -ck kernel patchset. These patches are designed to lighten the VM load and improve the desktop (i.e. non-server) Linux experience, with an emphasis on responsiveness. For example, one patch enables the kernel to identify large files that are unlikely to be fully cached in RAM. These files will then be the first thing to evict next time RAM is needed.
 * The BFQ I/O scheduler (experimental)
 * Support for the Reiser4 filesystem. This is an advanced filesystem with featured like transparent lzo/gzip compression.
 * Backported UBIFS patches for the Linux 2.6.28 kernel (not yet in kernel-bfs' git tree)
 * A few minor fixes/enhancements