sched: bias task wakeups to preferred semi-idle packages
authorVaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Thu, 18 Dec 2008 17:56:29 +0000 (23:26 +0530)
committerIngo Molnar <mingo@elte.hu>
Fri, 19 Dec 2008 08:21:52 +0000 (09:21 +0100)
commit7eb52dfa70dbf5232b5b83ec4357e6bebaa8fde8
treedfff4d1dcf62e992717f0934961f4557896d4945
parent7a09b1a27b1e5a4957e4af9951420fea02c44fba
sched: bias task wakeups to preferred semi-idle packages

Impact: tweak task wakeup to save power more agressively

Preferred wakeup cpu (from a semi idle package) has been
nominated in find_busiest_group() in the previous patch.  Use
this information in sched_mc_preferred_wakeup_cpu in function
wake_idle() to bias task wakeups if the following conditions
are satisfied:

        - The present cpu that is trying to wakeup the process is
          idle and waking the target process on this cpu will
          potentially wakeup a completely idle package
        - The previous cpu on which the target process ran is
          also idle and hence selecting the previous cpu may
          wakeup a semi idle cpu package
        - The task being woken up is allowed to run in the
          nominated cpu (cpu affinity and restrictions)

Basically if both the current cpu and the previous cpu on
which the task ran is idle, select the nominated cpu from semi
idle cpu package for running the new task that is waking up.

Cache hotness is considered since the actual biasing happens
in wake_idle() only if the application is cache cold.

This technique will effectively move short running bursty jobs in
a mostly idle system.

Wakeup biasing for power savings gets automatically disabled if
system utilisation increases due to the fact that the probability
of finding both this_cpu and prev_cpu idle decreases.

Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Acked-by: Balbir Singh <balbir@linux.vnet.ibm.com>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/sched_fair.c