Messages in this thread | | | Date | Fri, 26 Mar 2021 19:30:24 +0100 | From | Peter Zijlstra <> | Subject | Re: [PATCH 9/9] sched,fair: Alternative sched_slice() |
| |
On Fri, Mar 26, 2021 at 04:37:03PM +0100, Vincent Guittot wrote: > On Fri, 26 Mar 2021 at 11:43, Peter Zijlstra <peterz@infradead.org> wrote: > > > > The current sched_slice() seems to have issues; there's two possible > > things that could be improved: > > > > - the 'nr_running' used for __sched_period() is daft when cgroups are > > considered. Using the RQ wide h_nr_running seems like a much more > > consistent number. > > > > - (esp) cgroups can slice it real fine, which makes for easy > > over-scheduling, ensure min_gran is what the name says. > > > > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> > > --- > > kernel/sched/fair.c | 15 ++++++++++++++- > > kernel/sched/features.h | 3 +++ > > 2 files changed, 17 insertions(+), 1 deletion(-) > > > > --- a/kernel/sched/fair.c > > +++ b/kernel/sched/fair.c > > @@ -680,7 +680,16 @@ static u64 __sched_period(unsigned long > > */ > > static u64 sched_slice(struct cfs_rq *cfs_rq, struct sched_entity *se) > > { > > - u64 slice = __sched_period(cfs_rq->nr_running + !se->on_rq); > > + unsigned int nr_running = cfs_rq->nr_running; > > + u64 slice; > > + > > + if (sched_feat(ALT_PERIOD)) > > + nr_running = rq_of(cfs_rq)->cfs.h_nr_running; > > + > > + slice = __sched_period(nr_running + !se->on_rq); > > + > > + if (sched_feat(BASE_SLICE)) > > + slice -= sysctl_sched_min_granularity; > > > > for_each_sched_entity(se) { > > struct load_weight *load; > > @@ -697,6 +706,10 @@ static u64 sched_slice(struct cfs_rq *cf > > } > > slice = __calc_delta(slice, se->load.weight, load); > > } > > + > > + if (sched_feat(BASE_SLICE)) > > + slice += sysctl_sched_min_granularity; > > Why not only doing a max of slice and sysctl_sched_min_granularity > instead of scaling only the part above sysctl_sched_min_granularity ? > > With your change, cases where the slices would have been in a good > range already, will be modified as well
Can do I suppose. Not sure how I ended up with this.
| |