Messages in this thread Patch in this message | | | Date | Fri, 19 Apr 2024 10:45:20 +0200 | From | Peter Zijlstra <> | Subject | Re: [RFC PATCH] sched/eevdf: Return leftmost entity in pick_eevdf() if no eligible entity is found |
| |
On Fri, Apr 19, 2024 at 10:24:40AM +0200, Peter Zijlstra wrote: > On Thu, Apr 18, 2024 at 09:03:36PM +0800, Chen Yu wrote: > > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > > index 31bca05c3612..9f203012e8f5 100644 > > --- a/kernel/sched/fair.c > > +++ b/kernel/sched/fair.c > > @@ -696,15 +696,23 @@ u64 avg_vruntime(struct cfs_rq *cfs_rq) > > * > > * XXX could add max_slice to the augmented data to track this. > > */ > > + > > +static s64 limit_entity_lag(struct sched_entity *se, s64 lag) > > +{ > > + s64 limit; > > + > > + limit = calc_delta_fair(max_t(u64, 2*se->slice, TICK_NSEC), se); > > + return clamp(lag, -limit, limit); > > +} > > Right, helper makes sense.
A possible other helper might be the below. But that depends if we want to clip after scaling too. No super strong preference.
Please post your patch with a proper changelog and we'll get it sorted.
--- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -696,15 +696,19 @@ u64 avg_vruntime(struct cfs_rq *cfs_rq) * * XXX could add max_slice to the augmented data to track this. */ -static void update_entity_lag(struct cfs_rq *cfs_rq, struct sched_entity *se) +static s64 entity_lag(u64 avruntime, struct sched_entity *se) { - s64 lag, limit; - - SCHED_WARN_ON(!se->on_rq); - lag = avg_vruntime(cfs_rq) - se->vruntime; + s64 vlag, limit; + vlag = avruntime - se->vruntime; limit = calc_delta_fair(max_t(u64, 2*se->slice, TICK_NSEC), se); - se->vlag = clamp(lag, -limit, limit); + return clamp(vlag, -limit, limit); +} + +static void update_entity_lag(struct cfs_rq *cfs_rq, struct sched_entity *se) +{ + SCHED_WARN_ON(!se->on_rq); + se->vlag = entity_lag(avg_vruntime(cfs_rq), se); } /* @@ -3760,7 +3764,7 @@ static void reweight_eevdf(struct sched_ * = V - vl' */ if (avruntime != se->vruntime) { - vlag = (s64)(avruntime - se->vruntime); + vlag = entity_lag(avruntime, se); vlag = div_s64(vlag * old_weight, weight); se->vruntime = avruntime - vlag; }
| |