[PATCH 13/20] sched/eevdf: Try to push short slice task on a better CPU
From: Vincent Guittot
Date: Fri Nov 06 2026 - 10:22:36 EST
When a task is put back in the runnable list, we check if we should try to
push it on a better CPU, i.e. when fair is preempted by a higher class or
the task is preempted by another fair task.
Signed-off-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx>
---
kernel/sched/fair.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 980eda9c935a..3923587b66e0 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -10112,6 +10112,23 @@ static bool __check_pushable_fair_task(struct rq *rq, struct task_struct *p)
return true;
}
+static bool check_pushable_short_task(struct rq *rq, struct task_struct *p)
+{
+ struct sched_entity *pse = &p->se;
+ struct cfs_rq *cfs_rq = &rq->cfs;
+
+ if (cfs_rq->h_nr_runnable <= 1)
+ return false;
+
+ if (!entity_eligible(cfs_rq, pse))
+ return false;
+
+ if (pse->slice < cfs_rq_max_slice(cfs_rq))
+ return true;
+
+ return false;
+}
+
static bool fair_check_pushable_task(struct rq *rq, struct task_struct *p, struct task_struct *next)
{
if (!__check_pushable_fair_task(rq, p))
@@ -10120,6 +10137,12 @@ static bool fair_check_pushable_task(struct rq *rq, struct task_struct *p, struc
if (next == p)
return false;
+ if (next && next->sched_class != p->sched_class)
+ return true;
+
+ if (check_pushable_short_task(rq, p))
+ return true;
+
return false;
}
--
2.53.0