Just noticed this while looking at a bug.

--

Avoid an expensive integer divide 3 times per CPU per tick.

Signed-off-by: Nick Piggin <[EMAIL PROTECTED]>

Index: linux-2.6/kernel/sched.c
===================================================================
--- linux-2.6.orig/kernel/sched.c
+++ linux-2.6/kernel/sched.c
@@ -2887,13 +2887,14 @@ static void active_load_balance(struct r
 static void update_load(struct rq *this_rq)
 {
        unsigned long this_load;
-       int i, scale;
+       int i;
 
        this_load = this_rq->raw_weighted_load;
 
        /* Update our load: */
-       for (i = 0, scale = 1; i < 3; i++, scale <<= 1) {
+       for (i = 0; i < 3; i++) {
                unsigned long old_load, new_load;
+               int scale;
 
                old_load = this_rq->cpu_load[i];
                new_load = this_load;
@@ -2902,9 +2903,11 @@ static void update_load(struct rq *this_
                 * prevents us from getting stuck on 9 if the load is 10, for
                 * example.
                 */
+               scale = 1 << i;
                if (new_load > old_load)
                        new_load += scale-1;
-               this_rq->cpu_load[i] = (old_load*(scale-1) + new_load) / scale;
+               this_rq->cpu_load[i] = (old_load*(scale-1) + new_load)
+                                       >> i; /* (divide by 'scale') */
        }
 }
 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to