Messages in this thread | | | From | Vincent Guittot <> | Date | Thu, 1 Oct 2020 09:17:43 +0200 | Subject | Re: [PATCH] sched/fair: tweak pick_next_entity |
| |
On Wed, 30 Sep 2020 at 19:35, Peter Oskolkov <posk@google.com> wrote: > > Currently, pick_next_entity(...) has the following structure > (simplified): > > [...] > if (last_buddy_ok()) > result = last_buddy; > if (next_buddy_ok()) > result = next_buddy; > [...] > > The intended behavior is to prefer next buddy over last buddy; > the current code somewhat obfuscates this, and also wastes > cycles checking the last buddy when eventually the next buddy is > picked up. > > So this patch refactors two 'ifs' above into > > [...] > if (next_buddy_ok()) > result = next_buddy; > else if (last_buddy_ok()) > result = last_buddy; > [...] > > Signed-off-by: Peter Oskolkov <posk@google.com>
Reviewed-by: Vincent Guittot <vincent.guitttot@linaro.org>
> --- > kernel/sched/fair.c | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index fc3410b8b990..cec6cf9b2bb3 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -4465,17 +4465,17 @@ pick_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *curr) > se = second; > } > > - /* > - * Prefer last buddy, try to return the CPU to a preempted task. > - */ > - if (cfs_rq->last && wakeup_preempt_entity(cfs_rq->last, left) < 1) > - se = cfs_rq->last; > - > - /* > - * Someone really wants this to run. If it's not unfair, run it. > - */ > - if (cfs_rq->next && wakeup_preempt_entity(cfs_rq->next, left) < 1) > + if (cfs_rq->next && wakeup_preempt_entity(cfs_rq->next, left) < 1) { > + /* > + * Someone really wants this to run. If it's not unfair, run it. > + */ > se = cfs_rq->next; > + } else if (cfs_rq->last && wakeup_preempt_entity(cfs_rq->last, left) < 1) { > + /* > + * Prefer last buddy, try to return the CPU to a preempted task. > + */ > + se = cfs_rq->last; > + } > > clear_buddies(cfs_rq, se); > > -- > 2.28.0.709.gb0816b6eb0-goog >
| |