Messages in this thread | | | Date | Thu, 15 May 2008 17:31:52 +0200 | From | "Dmitry Adamushko" <> | Subject | Re: [PATCH] sched: Improve readability in update_cpu_load() code |
| |
2008/5/15 Dmitry Adamushko <dmitry.adamushko@gmail.com>: > 2008/5/15 Srivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>: >> On Thu, May 15, 2008 at 06:34:59PM +0530, Gautham R Shenoy wrote: >>> Author: Gautham R Shenoy <ego@in.ibm.com> >>> Date: Thu May 15 17:55:49 2008 +0530 >>> >>> sched: Improve readability in update_cpu_load() code >>> >>> Currently the cpu_load[i] is calculated as: >>> this_rq->cpu_load[i] = (old_load*(scale-1) + new_load) >> i; >>> >>> However, since scale = 2^i, this can be simplified as: >>> this_rq->cpu_load[i] = old_load + ((new_load - old_load) >> i); >>> >>> Makes it easier to read. >>> Signed-off-by: Gautham R Shenoy <ego@in.ibm.com> >>> >>> diff --git a/kernel/sched.c b/kernel/sched.c >>> index 2d7d8f1..e1a6985 100644 >>> --- a/kernel/sched.c >>> +++ b/kernel/sched.c >>> @@ -2921,7 +2921,7 @@ static void update_cpu_load(struct rq *this_rq) >>> */ >>> if (new_load > old_load) >>> new_load += scale-1; >>> - this_rq->cpu_load[i] = (old_load*(scale-1) + new_load) >> i; >>> + this_rq->cpu_load[i] = old_load + ((new_load - old_load) >> i); >> >> This wont work when new_load < old_load .. >> >> For ex: I tried this prog: >> >> #include <stdio.h> >> >> main() >> { >> unsigned long old_load = 100, new_load = 90, this_load, this_load1; >> int i = 1, scale = 2 << i; >> >> this_load = (old_load*(scale-1) + new_load) >> i; >> this_load1 = old_load + ((new_load - old_load) >> i); > > it should be > > this_load2 = 2 * old_load + (new_load >> i) - (old_load >> i); > > scale == 2 << i == 1 << (i + 1), so scale >> i = 2.
argh.. sorry, it's (scale = 2 << i) in your test-program which is wrong. 2^i == (1 << i), so the (2 *) part is redundant, of course.
this_load2 = old_load + (new_load >> i) - (old_load >> i);
-- Best regards, Dmitry Adamushko
| |