]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commit
sched: backward looking buddy
authorPeter Zijlstra <a.p.zijlstra@chello.nl>
Tue, 4 Nov 2008 20:25:09 +0000 (21:25 +0100)
committerIngo Molnar <mingo@elte.hu>
Wed, 5 Nov 2008 09:30:14 +0000 (10:30 +0100)
commit4793241be408b3926ee00c704d7da3b3faf3a05f
treed74144510d5258e5e941a8499538c3a0cdc868a7
parentd95f98d0691d3aba5e35850011946a08c9b36428
sched: backward looking buddy

Impact: improve/change/fix wakeup-buddy scheduling

Currently we only have a forward looking buddy, that is, we prefer to
schedule to the task we last woke up, under the presumption that its
going to consume the data we just produced, and therefore will have
cache hot benefits.

This allows co-waking producer/consumer task pairs to run ahead of the
pack for a little while, keeping their cache warm. Without this, we
would interleave all pairs, utterly trashing the cache.

This patch introduces a backward looking buddy, that is, suppose that
in the above scenario, the consumer preempts the producer before it
can go to sleep, we will therefore miss the wakeup from consumer to
producer (its already running, after all), breaking the cycle and
reverting to the cache-trashing interleaved schedule pattern.

The backward buddy will try to schedule back to the task that woke us
up in case the forward buddy is not available, under the assumption
that the last task will be the one with the most cache hot task around
barring current.

This will basically allow a task to continue after it got preempted.

In order to avoid starvation, we allow either buddy to get wakeup_gran
ahead of the pack.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Acked-by: Mike Galbraith <efault@gmx.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/sched.c
kernel/sched_fair.c
kernel/sched_features.h