Re: [PATCH] sched:pelt: fix pelt clock sync when entering idle
From: Vincent Guittot
Date: Wed Mar 04 2026 - 03:16:52 EST
Hi Samuel,
On Tue, 3 Mar 2026 at 20:47, Samuel Wu <wusamuel@xxxxxxxxxx> wrote:
>
> On Wed, Jan 21, 2026 at 8:33 AM Vincent Guittot
> <vincent.guittot@xxxxxxxxxx> wrote:
> >
> > Samuel and Alex reported regressions of the util_avg of RT rq with
> > commit 17e3e88ed0b6 ("sched/fair: Fix pelt lost idle time detection").
> > It happens that fair is updating and syncing the pelt clock with task one
> > when pick_next_task_fair() fails to pick a task but before the prev
> > scheduling class got a chance to update its pelt signals.
> >
> > Move update_idle_rq_clock_pelt() in set_next_task_idle() which is called
> > after prev class has been called.
> >
> > Fixes: 17e3e88ed0b6 ("sched/fair: Fix pelt lost idle time detection")
> > Reported-by: Samuel Wu <wusamuel@xxxxxxxxxx>
> > Closes: https://lore.kernel.org/all/CAG2KctpO6VKS6GN4QWDji0t92_gNBJ7HjjXrE+6H+RwRXt=iLg@xxxxxxxxxxxxxx/
> > Tested-by: Samuel Wu <wusamuel@xxxxxxxxxx>
> > Reported-by: Alex Hoh <Alex.Hoh@xxxxxxxxxxxx>
> > Closes: https://lore.kernel.org/all/8cf19bf0e0054dcfed70e9935029201694f1bb5a.camel@xxxxxxxxxxxx/
> > Tested-by: Alex Hoh <Alex.Hoh@xxxxxxxxxxxx>
> > Signed-off-by: Vincent Guittot <vincent.guittot@xxxxxxxxxx>
> > ---
> > kernel/sched/fair.c | 6 ------
> > kernel/sched/idle.c | 6 ++++++
> > 2 files changed, 6 insertions(+), 6 deletions(-)
> >
> > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> > index 108213e94158..bea71564d3da 100644
> > --- a/kernel/sched/fair.c
> > +++ b/kernel/sched/fair.c
> > @@ -8989,12 +8989,6 @@ pick_next_task_fair(struct rq *rq, struct task_struct *prev, struct rq_flags *rf
> > goto again;
> > }
> >
> > - /*
> > - * rq is about to be idle, check if we need to update the
> > - * lost_idle_time of clock_pelt
> > - */
> > - update_idle_rq_clock_pelt(rq);
> > -
> > return NULL;
> > }
> >
> > diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
> > index 65eb8f8c1a5d..a7c5676b9abe 100644
> > --- a/kernel/sched/idle.c
> > +++ b/kernel/sched/idle.c
> > @@ -468,6 +468,12 @@ static void set_next_task_idle(struct rq *rq, struct task_struct *next, bool fir
> > scx_update_idle(rq, true, true);
> > schedstat_inc(rq->sched_goidle);
> > next->se.exec_start = rq_clock_task(rq);
> > +
> > + /*
> > + * rq is about to be idle, check if we need to update the
> > + * lost_idle_time of clock_pelt
> > + */
> > + update_idle_rq_clock_pelt(rq);
> > }
> >
> > struct task_struct *pick_task_idle(struct rq *rq, struct rq_flags *rf)
> > --
> > 2.43.0
> >
>
> Hi Vincent,
>
> Any concern with backporting this to LTS branches such as 6.1 and 6.6?
I don't see any problem with backporting it to 6.1 or 6.6. The fix is
not related to EEVDF
Thanks
Vincent
> I am not sure if there is a dependency with EEVDF, but the fixes
> patch, 17e3e88ed0b6 ("sched/fair: Fix pelt lost idle time detection"),
> was backported to those aforementioned branches.
>
> Thanks,
> Sam