Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5f01d519e60a6ca1a7d9be9f2d73c5f521383992
Commit:     5f01d519e60a6ca1a7d9be9f2d73c5f521383992
Parent:     b07d68b5ca4d55a16fab223d63d5fb36f89ff42f
Author:     Mike Galbraith <[EMAIL PROTECTED]>
AuthorDate: Tue Aug 28 12:53:24 2007 +0200
Committer:  Ingo Molnar <[EMAIL PROTECTED]>
CommitDate: Tue Aug 28 12:53:24 2007 +0200

    sched: fix sleeper bonus limit
    
    There is an Amarok song switch time increase (regression) under
    hefty load.
    
    What is happening is that sleeper_bonus is never consumed, and only
    rarely goes below runtime_limit, so for the most part, Amarok isn't
    getting any bonus at all.  We're keeping sleeper_bonus right at
    runtime_limit (sched_latency == sched_runtime_limit == 40ms) forever, ie
    we don't consume if we're lower that that, and don't add if we're above
    it.  One Amarok thread waking (or anybody else) will push us past the
    threshold, so the next thread waking gets nada, but will reap pain from
    the previous thread waking until we drop back to runtime_limit.  It
    looks to me like under load, some random task gets a bonus, and
    everybody else pays, whether deserving or not.
    
    This diff fixed the regression for me at any load rate.
    
    Signed-off-by: Mike Galbraith <[EMAIL PROTECTED]>
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
    Signed-off-by: Peter Zijlstra <[EMAIL PROTECTED]>
---
 kernel/sched_fair.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index ee37718..9f53d49 100644
--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -354,7 +354,7 @@ __update_curr(struct cfs_rq *cfs_rq, struct sched_entity 
*curr)
        delta_fair = calc_delta_fair(delta_exec, lw);
        delta_mine = calc_delta_mine(delta_exec, curr->load.weight, lw);
 
-       if (cfs_rq->sleeper_bonus > sysctl_sched_latency) {
+       if (cfs_rq->sleeper_bonus > sysctl_sched_min_granularity) {
                delta = min((u64)delta_mine, cfs_rq->sleeper_bonus);
                delta = min(delta, (unsigned long)(
                        (long)sysctl_sched_runtime_limit - curr->wait_runtime));
-
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