OSDN Git Service

sched/fair: kick nohz idle balance for misfit task
authorLeo Yan <leo.yan@linaro.org>
Mon, 27 Mar 2017 14:00:14 +0000 (15:00 +0100)
committerChris Redpath <chris.redpath@arm.com>
Tue, 25 Jul 2017 15:31:00 +0000 (16:31 +0100)
If there have misfit task on one CPU, current code does not handle this
situation for nohz idle balance. As result, we can see the misfit task
stays run on little core for long time.

So this patch check if the CPU has misfit task or not. If has misfit
task then kick nohz idle balance so finally can execute active balance.

Change-Id: I117d3b7404296f8de11cb960a87a6b9a54a9f348
Signed-off-by: Leo Yan <leo.yan at linaro.org>
[taken from https://lists.linaro.org/pipermail/eas-dev/2016-September/000551.html]
Signed-off-by: Chris Redpath <chris.redpath@arm.com>
Signed-off-by: Patrick Bellasi <patrick.bellasi@arm.com>
kernel/sched/fair.c

index dff742f..90b44c6 100644 (file)
@@ -9701,6 +9701,10 @@ static inline bool nohz_kick_needed(struct rq *rq)
            (!energy_aware() || cpu_overutilized(cpu)))
                return true;
 
+       /* Do idle load balance if there have misfit task */
+       if (energy_aware() && rq->misfit_task)
+               return true;
+
        rcu_read_lock();
        sd = rcu_dereference(per_cpu(sd_busy, cpu));
        if (sd && !energy_aware()) {