sched/fair: prevent meaningless active migration
At present need_active_balance() determines whether active upmigration
is needed by using capacity_of(). CPU's capacity can be reduced by RT
tasks load therefore distinguishing cluster difference with
capacity_of() is wrong and leads suboptimal active migration within
same cluster. Use capacity_orig_of() to distinguish different
clusters.
Change-Id: I3e1435246a8edc3ad618ef98a34866cfbd8c16a5
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 6fb615e..3363e22 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -8876,12 +8876,12 @@
return 1;
}
- if (energy_aware() && (capacity_of(env->src_cpu) < capacity_of(env->dst_cpu)) &&
- env->src_rq->cfs.h_nr_running == 1 &&
- cpu_overutilized(env->src_cpu) &&
- !cpu_overutilized(env->dst_cpu)) {
- return 1;
- }
+ if (energy_aware() &&
+ capacity_of(env->src_cpu) < capacity_of(env->dst_cpu) &&
+ capacity_orig_of(env->src_cpu) < capacity_orig_of(env->dst_cpu) &&
+ env->src_rq->cfs.h_nr_running == 1 &&
+ cpu_overutilized(env->src_cpu) && !cpu_overutilized(env->dst_cpu))
+ return 1;
return unlikely(sd->nr_balance_failed >
sd->cache_nice_tries + NEED_ACTIVE_BALANCE_THRESHOLD);