This change aggressively try to save energy by preventing the balance to choose an idle cpu which did not reach its target residency.
Signed-off-by: Daniel Lezcano daniel.lezcano@linaro.org --- kernel/sched/fair.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index bcb51eb..d996544 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4742,8 +4742,10 @@ find_idlest_cpu(struct sched_group *group, struct task_struct *p, int this_cpu) if (idle_cpu(i)) { struct rq *rq = cpu_rq(i); struct cpuidle_state *idle = idle_get_state(rq); + u64 now = ktime_to_us(ktime_get()); + + if (idle && ((idle->idle_stamp + now) > idle->target_residency)) {
- if (idle) { if (idle->exit_latency < min_exit_latency) { /* * We give priority to a CPU -- 1.9.1