In current code after meets two conditions to set sgs->group_misfit_task:
- Condition 1: the CPU is overutilized; - Condition 2: rq->misfit is set;
But if we think about there have corner case that CPU level signal has not been increased over tipping point but it has one big task is migrated onto this CPU so rq->misfit flag has been set. For this case, we will miss to set sgs->group_misfit_task due condition 1 should take very long time to become true.
This patch is to directly check if rq->misfit flag has been set and then directly to set sgs->group_misfit_task. So give more chance for misfit task migration.
Signed-off-by: Leo Yan leo.yan@linaro.org --- kernel/sched/fair.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 6ebf7c7..ed9fbed 100755 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -7184,11 +7184,11 @@ static inline void update_sg_lb_stats(struct lb_env *env, if (!nr_running && idle_cpu(i)) sgs->idle_cpus++;
- if (cpu_overutilized(i)) { + if (cpu_overutilized(i)) *overutilized = true; - if (!sgs->group_misfit_task && rq->misfit_task) - sgs->group_misfit_task = capacity_of(i); - } + + if (!sgs->group_misfit_task && rq->misfit_task) + sgs->group_misfit_task = capacity_of(i); }
/* Adjust by relative CPU capacity of the group */ -- 2.7.4