Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ce6c131131df442f0d49d064129ecc52d9fe8ca9
Commit:     ce6c131131df442f0d49d064129ecc52d9fe8ca9
Parent:     e62dd02ed0af35631c6ca473e50758c9594773cf
Author:     Peter Zijlstra <[EMAIL PROTECTED]>
AuthorDate: Mon Oct 15 17:00:14 2007 +0200
Committer:  Ingo Molnar <[EMAIL PROTECTED]>
CommitDate: Mon Oct 15 17:00:14 2007 +0200

    sched: disable forced preemption by default
    
    Implement feature bit to disable forced preemption. This way
    it can be checked whether a workload is overscheduling or not.
    
    Signed-off-by: Peter Zijlstra <[EMAIL PROTECTED]>
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
---
 kernel/sched.c      |    4 +++-
 kernel/sched_fair.c |   24 +++++++++++++-----------
 2 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/kernel/sched.c b/kernel/sched.c
index b7dff36..0bd8f2c 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -444,13 +444,15 @@ enum {
        SCHED_FEAT_START_DEBIT          = 2,
        SCHED_FEAT_TREE_AVG             = 4,
        SCHED_FEAT_APPROX_AVG           = 8,
+       SCHED_FEAT_WAKEUP_PREEMPT       = 16,
 };
 
 const_debug unsigned int sysctl_sched_features =
                SCHED_FEAT_NEW_FAIR_SLEEPERS    *1 |
                SCHED_FEAT_START_DEBIT          *1 |
                SCHED_FEAT_TREE_AVG             *0 |
-               SCHED_FEAT_APPROX_AVG           *0;
+               SCHED_FEAT_APPROX_AVG           *0 |
+               SCHED_FEAT_WAKEUP_PREEMPT       *1;
 
 #define sched_feat(x) (sysctl_sched_features & SCHED_FEAT_##x)
 
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index 3ac096e..3843ec7 100644
--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -626,7 +626,7 @@ static void entity_tick(struct cfs_rq *cfs_rq, struct 
sched_entity *curr)
         */
        update_curr(cfs_rq);
 
-       if (cfs_rq->nr_running > 1)
+       if (cfs_rq->nr_running > 1 || !sched_feat(WAKEUP_PREEMPT))
                check_preempt_tick(cfs_rq, curr);
 }
 
@@ -828,18 +828,20 @@ static void check_preempt_wakeup(struct rq *rq, struct 
task_struct *p)
                return;
        }
 
-       while (!is_same_group(se, pse)) {
-               se = parent_entity(se);
-               pse = parent_entity(pse);
-       }
+       if (sched_feat(WAKEUP_PREEMPT)) {
+               while (!is_same_group(se, pse)) {
+                       se = parent_entity(se);
+                       pse = parent_entity(pse);
+               }
 
-       delta = se->vruntime - pse->vruntime;
-       gran = sysctl_sched_wakeup_granularity;
-       if (unlikely(se->load.weight != NICE_0_LOAD))
-               gran = calc_delta_fair(gran, &se->load);
+               delta = se->vruntime - pse->vruntime;
+               gran = sysctl_sched_wakeup_granularity;
+               if (unlikely(se->load.weight != NICE_0_LOAD))
+                       gran = calc_delta_fair(gran, &se->load);
 
-       if (delta > gran)
-               resched_task(curr);
+               if (delta > gran)
+                       resched_task(curr);
+       }
 }
 
 static struct task_struct *pick_next_task_fair(struct rq *rq)
-
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