[patch] CFS scheduler, -v5

Ingo Molnar
2007-04-23T01:13:42Z

i'm pleased to announce release -v5 of the CFS scheduler patchset. The
patch against v2.6.21-rc7 and v2.6.20.7 can be downloaded from:

http://redhat.com/~mingo/cfs-scheduler/

this CFS release mainly fixes regressions and improves interactivity:

13 files changed, 211 insertions(+), 199 deletions(-)

the biggest user-visible change in -v5 are various interactivity
improvements (especially under higher load) to fix reported regressions,
and an improved way of handling nice levels. There's also a new
sys_sched_yield_to() syscall implementation for i686 and x86_64.

All known regressions have been fixed. (knock on wood)

[ Note: while CFS's default preemption granularity is currently set to 5
msecs, this value does not directly transform into timeslices: for
example two CPU-intense tasks will have effective timeslices of 10
msecs with this setting. ]

Changes since -v4:

- interactivity bugfix: fix xterm latencies and general desktop delays
and child task startup delays under load. (reported by Willy Tarreau
and Caglar Onur)

- bugfix: the in_atomic_preempt_off() call on !PREEMPT_BKL was buggy
and spammed the console with bogus warnings.

- implementation fix: make the nice levels implementation
starvation-free and smpnice-friendly. Remove the nice_offset hack.

- feature: add initial sys_sched_yield_to() implementation. Not hooked
into the futex code yet, but testers are encouraged to give the
syscalls a try, on i686 the new syscall is __NR_yield_to==320, on
x86_64 it's __NR_yield_to==280. The prototype is
sys_sched_yield_to(pid_t), as suggested by Ulrich Drepper.

- usability feature: add CONFIG_RENICE_X: those who dont want the
kernel to renice X should disable this option. (the boot option and
the sysctl is still available too)

- removed my home-made "Con was right about scheduling fairness"
attribution to Con's scheduler interactivity work - some have
suggested that Con might want to see another text there. Con,
please feel free to fill it in!

- feature: make the CPU usage of nice levels logarithmic instead of
linear. This is more usable and more intuitive. (Going four nice
levels forward/backwards give half/twice the CPU power) [ This was
requested a number of times in the past few years and is
straightforward under CFS because there nice levels are not tied to
any timeslice distribution mechanism. ]

- cleanup: removed the stupid "Ingo was here" banner printk from
sched_init(), the -cfs EXTRAVERSION serves the purpose (of
identifying a booted up kernel as a CFS one) equally well.

- various other code cleanups

As usual, any sort of feedback, bugreport, fix and suggestion is more
than welcome,

Ingo