Re: [tip:sched/core] [sched/fair] 089d84203a: pts.schbench.32.usec,_99.9th_latency_percentile 52.4% regression

From: Peter Zijlstra

Date: Thu Dec 18 2025 - 05:40:17 EST


On Thu, Dec 18, 2025 at 03:41:55PM +0530, Shrikanth Hegde wrote:
> On 12/18/25 2:07 PM, Peter Zijlstra wrote:
> > On Thu, Dec 18, 2025 at 12:59:53PM +0800, kernel test robot wrote:
> > >
> > >
> > > Hello,
> > >
> > > kernel test robot noticed a 52.4% regression of pts.schbench.32.usec,_99.9th_latency_percentile on:
> > >
> > >
> > > commit: 089d84203ad42bc8fd6dbf41683e162ac6e848cd ("sched/fair: Fold the sched_avg update")
> > > https://git.kernel.org/cgit/linux/kernel/git/tip/tip.git sched/core
> >
> > Well, that obviously wasn't the intention. Let me pull that patch :/
>
> Is it possible because it missed scaling by se_weight(se) ??

> static inline void
> enqueue_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se)
> {
> - cfs_rq->avg.load_avg += se->avg.load_avg;
> - cfs_rq->avg.load_sum += se_weight(se) * se->avg.load_sum;
> + __update_sa(&cfs_rq->avg, load, se->avg.load_avg, se->avg.load_sum);
> }

Ah, indeed, something like so then? Can the robot (Oliver/Philip)
verify?

(I was going to shelf it and look at it after the holidays, but if this
is it, we can get it fixed before I dissapear).

---
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 76f5e4b78b30..7377f9117501 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -3775,13 +3775,15 @@ account_entity_dequeue(struct cfs_rq *cfs_rq, struct sched_entity *se)
static inline void
enqueue_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se)
{
- __update_sa(&cfs_rq->avg, load, se->avg.load_avg, se->avg.load_sum);
+ __update_sa(&cfs_rq->avg, load, se->avg.load_avg,
+ se_weight(se) * se->avg.load_sum);
}

static inline void
dequeue_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se)
{
- __update_sa(&cfs_rq->avg, load, -se->avg.load_avg, -se->avg.load_sum);
+ __update_sa(&cfs_rq->avg, load, -se->avg.load_avg,
+ se_weight(se) * -se->avg.load_sum);
}

static void place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags);