sched: Remove one division operation in find_busiest_queue()
Remove one division operation in find_busiest_queue() by using crosswise multiplication: wl_i / power_i > wl_j / power_j := wl_i * power_j > wl_j * power_i Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> [ Expanded the changelog. ] Signed-off-by: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/1375778203-31343-2-git-send-email-iamjoonsoo.kim@lge.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
a4f61cc03e
commit
95a79b805b
|
@ -4968,7 +4968,7 @@ static struct rq *find_busiest_queue(struct lb_env *env,
|
||||||
struct sched_group *group)
|
struct sched_group *group)
|
||||||
{
|
{
|
||||||
struct rq *busiest = NULL, *rq;
|
struct rq *busiest = NULL, *rq;
|
||||||
unsigned long max_load = 0;
|
unsigned long busiest_load = 0, busiest_power = 1;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for_each_cpu(i, sched_group_cpus(group)) {
|
for_each_cpu(i, sched_group_cpus(group)) {
|
||||||
|
@ -4998,11 +4998,15 @@ static struct rq *find_busiest_queue(struct lb_env *env,
|
||||||
* the weighted_cpuload() scaled with the cpu power, so that
|
* the weighted_cpuload() scaled with the cpu power, so that
|
||||||
* the load can be moved away from the cpu that is potentially
|
* the load can be moved away from the cpu that is potentially
|
||||||
* running at a lower capacity.
|
* running at a lower capacity.
|
||||||
|
*
|
||||||
|
* Thus we're looking for max(wl_i / power_i), crosswise
|
||||||
|
* multiplication to rid ourselves of the division works out
|
||||||
|
* to: wl_i * power_j > wl_j * power_i; where j is our
|
||||||
|
* previous maximum.
|
||||||
*/
|
*/
|
||||||
wl = (wl * SCHED_POWER_SCALE) / power;
|
if (wl * busiest_power > busiest_load * power) {
|
||||||
|
busiest_load = wl;
|
||||||
if (wl > max_load) {
|
busiest_power = power;
|
||||||
max_load = wl;
|
|
||||||
busiest = rq;
|
busiest = rq;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue