From: "Siddha, Suresh B" When a logical cpu 'x' already has more than one process running, then most likely the siblings of that cpu 'x' must be busy. Otherwise the idle siblings would have likely(in most of the scenarios) picked up the extra load making the load on 'x' atmost one. Use this logic to eliminate the siblings status check and minimize the cache misses encountered on a heavily loaded system. Signed-off-by: Suresh Siddha Cc: Nick Piggin Cc: Ingo Molnar Signed-off-by: Andrew Morton --- kernel/sched.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff -puN kernel/sched.c~sched-optimize-siblings-status-check-logic-in-wake_idle kernel/sched.c --- a/kernel/sched.c~sched-optimize-siblings-status-check-logic-in-wake_idle +++ a/kernel/sched.c @@ -1407,7 +1407,16 @@ static int wake_idle(int cpu, struct tas struct sched_domain *sd; int i; - if (idle_cpu(cpu)) + /* + * If it is idle, then it is the best cpu to run this task. + * + * This cpu is also the best, if it has more than one task already. + * Siblings must be also busy(in most cases) as they didn't already + * pickup the extra load from this cpu and hence we need not check + * sibling runqueue info. This will avoid the checks and cache miss + * penalities associated with that. + */ + if (idle_cpu(cpu) || cpu_rq(cpu)->nr_running > 1) return cpu; for_each_domain(cpu, sd) { _