答复: [Resend][PATCH] sched/fair: micro-optimize pick_next_entity()

From: Li,Rongqing
Date: Fri Sep 03 2021 - 00:00:47 EST




> -----邮件原件-----
> 发件人: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> 发送时间: 2021年8月31日 22:10
> 收件人: Li,Rongqing <lirongqing@xxxxxxxxx>
> 抄送: mingo@xxxxxxxxxx; juri.lelli@xxxxxxxxxx; vincent.guittot@xxxxxxxxxx;
> dietmar.eggemann@xxxxxxx; rostedt@xxxxxxxxxxx; bsegall@xxxxxxxxxx;
> mgorman@xxxxxxx; bristot@xxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> 主题: Re: [Resend][PATCH] sched/fair: micro-optimize pick_next_entity()
>
> On Wed, Aug 25, 2021 at 02:27:49PM +0800, Li RongQing wrote:
> > Only check the skip buddy when next buddy and last buddy are not
> > picked up, this can save the cycles of checking the skip buddy and
> > computation of the second buddy, when next and last buddy will be
> > picked up for example, yield_to_task_fair() set both next and skip
> > buddy
>
> Is that actually measurable?
>
> But looking at it, should we not, instead, move the whole ->skip thing to the
> bottom, so we unconditionally check it vs the result of
> ->next/->last ?
>
> Imagine ->next == ->skip, then we want to avoid running it and not have
> ->next win.

skip means this task is running on cpu, next is the blocked task and will be running.

I donot know how they can be same.

-Li