mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [patch] sched: optimize siblings status check logic in wake_idle()
@ 2007-03-03  4:23 Siddha, Suresh B
  2007-03-05  2:35 ` Nick Piggin
  0 siblings, 1 reply; 5+ messages in thread
From: Siddha, Suresh B @ 2007-03-03  4:23 UTC (permalink / raw)
  To: akpm; +Cc: mingo, linux-kernel, npiggin

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 <suresh.b.siddha@intel.com>
---

diff --git a/kernel/sched.c b/kernel/sched.c
index 0dc7572..d1ecc56 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -1368,7 +1368,16 @@ static int wake_idle(int cpu, struct task_struct *p)
 	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) {

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2007-03-05  5:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-03-03  4:23 [patch] sched: optimize siblings status check logic in wake_idle() Siddha, Suresh B
2007-03-05  2:35 ` Nick Piggin
2007-03-05  4:13   ` Siddha, Suresh B
2007-03-05  4:58     ` Nick Piggin
2007-03-05  4:24       ` Siddha, Suresh B

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®