Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4953198b6ce07b008b0f1c2edd41c9d027a118b4
Commit:     4953198b6ce07b008b0f1c2edd41c9d027a118b4
Parent:     5517d86bea237c1d7078840182d9ebc0fe4c1afc
Author:     Siddha, Suresh B <[EMAIL PROTECTED]>
AuthorDate: Tue May 8 00:33:01 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue May 8 11:15:17 2007 -0700

    sched: optimize siblings status check logic in wake_idle()
    
    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 <[EMAIL PROTECTED]>
    Cc: Nick Piggin <[EMAIL PROTECTED]>
    Acked-by: Ingo Molnar <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 kernel/sched.c |   11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/kernel/sched.c b/kernel/sched.c
index e4a5888..e60786e 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -1406,7 +1406,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) {
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to