This is to announce an updated stable version of the Brain Fuck Scheduler, 
version 0.502 for the current stable linux kernel.

All patches available here:

Code blog:

I was reluctant to announce previous versions as the cpu frequency load 
signalling changes mandated by mainline were initially poorly handled and then 
buggy in BFS until recently.

In 2011 I played with skip lists to replace the simple linked list that is 
used in BFS and after a brief period of testing did not find it advantageous 
though very little effort was putting into optimising the skip list 
implementation. Additionally I was unable to maintain the scheduling decisions 
entirely with the existing BFS implementation.
Recently I found renewed interest in improving the most obvious flaws in the 
design and trying again and found I could maintain the behaviour and 
performance at low load with improved performance at (very) high loads so I've 
incorporated them into the current version. No doubt there are other 
improvements that can be made to the skip list implementation but the low 
hanging fruit has been attended to and there seems to be little need given the 
target audience for BFS.

Patch introduction follows:


The Brain Fuck Scheduler v0.502 by Con Kolivas.

A single shared runqueue strict fairness earliest deadline first design.
Runqueue insertion is O(log(n)), lookup is O(1), removal is O(k) where k <= 16

Excellent throughput and latency for 1 to many CPUs on desktop and server
commodity hardware.
Not recommended for 4096 cpus.

Scalability is optimal when your workload is equal to the number of CPUs on
bfs. ie you should ONLY do make -j4 on quad core, -j2 on dual core and so on.

Interactive mode is enabled by default but can be disabled for improved

echo 0 > /proc/sys/kernel/interactive

Features SCHED_IDLEPRIO and SCHED_ISO scheduling policies as well.
You do NOT need to use these policies for good performance, they are purely
optional for even better performance in extreme conditions.

To run something idleprio, use schedtool like so:

schedtool -D -e make -j4

To run something isoprio, use schedtool like so:

schedtool -I -e amarok

Includes configurable SMT-nice support for better nice level and scheduling
policy support across SMT (aka hyperthread) sibling CPUs.

Includes accurate sub-tick accounting of tasks so userspace reported
cpu usage may be very different if you have very short lived tasks.


Reply via email to