[PATCH 18/18 v2] sched/fair: Take into account slice in EAS

From: Vincent Guittot

Date: Fri Oct 02 2026 - 11:51:08 EST


When the cost is the same, take into account the slice of a task to try to
select a CPU where is will run first.

Signed-off-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx>
---
kernel/sched/fair.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 94554f165f42..d60bb6db4ce9 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -9598,8 +9598,17 @@ static int check_cpu_with_task(struct task_struct *p, int cpu)
*/
static bool update_best_cpu(struct energy_cpu_stat *target,
struct energy_cpu_stat *min,
- int prev, struct sched_domain *sd)
+ int prev, struct sched_domain *sd,
+ struct task_struct *p)
{
+ unsigned long task_slice = p->se.slice;
+
+ /* Select the one where you can run first */
+ if (task_slice < get_rq_min_slice(cpu_rq(target->cpu)) &&
+ task_slice >= get_rq_min_slice(cpu_rq(min->cpu)))
+ return true;
+
+ /* Favor previous CPU */
if (target->cpu == prev)
return true;
if (min->cpu == prev)
@@ -9762,7 +9771,7 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu)
*/
if (target_perf < min_stat.min_perf)
find_pd_cost(pd->em_pd, target_perf, &target_stat);
- else if (!update_best_cpu(&target_stat, &min_stat, prev_cpu, sd))
+ else if (!update_best_cpu(&target_stat, &min_stat, prev_cpu, sd, p))
continue;

/* Save the new most efficient CPU of the PD */
--
2.53.0