Re: [PATCH -tip 13/32] sched: Trivial forced-newidle balancer

From: Balbir Singh
Date: Wed Nov 25 2020 - 16:28:50 EST


On Tue, Nov 24, 2020 at 08:32:01AM +0800, Li, Aubrey wrote:
> On 2020/11/24 7:35, Balbir Singh wrote:
> > On Mon, Nov 23, 2020 at 11:07:27PM +0800, Li, Aubrey wrote:
> >> On 2020/11/23 12:38, Balbir Singh wrote:
> >>> On Tue, Nov 17, 2020 at 06:19:43PM -0500, Joel Fernandes (Google) wrote:
> >>>> From: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> >>>>
> >>>> When a sibling is forced-idle to match the core-cookie; search for
> >>>> matching tasks to fill the core.
> >>>>
> >>>> rcu_read_unlock() can incur an infrequent deadlock in
> >>>> sched_core_balance(). Fix this by using the RCU-sched flavor instead.
> >>>>
> >>> ...
> >>>> +
> >>>> + if (p->core_occupation > dst->idle->core_occupation)
> >>>> + goto next;
> >>>> +
> >>>
> >>> I am unable to understand this check, a comment or clarification in the
> >>> changelog will help. I presume we are looking at either one or two cpus
> >>> to define the core_occupation and we expect to match it against the
> >>> destination CPU.
> >>
> >> IIUC, this check prevents a task from keeping jumping among the cores forever.
> >>
> >> For example, on a SMT2 platform:
> >> - core0 runs taskA and taskB, core_occupation is 2
> >> - core1 runs taskC, core_occupation is 1
> >>
> >> Without this check, taskB could ping-pong between core0 and core1 by core load
> >> balance.
> >
> > But the comparison is p->core_occuption (as in tasks core occuptation,
> > not sure what that means, can a task have a core_occupation of > 1?)
> >
>
> p->core_occupation is assigned to the core occupation in the last pick_next_task.
> (so yes, it can have a > 1 core_occupation).
>

Hmm.. I find that hard to interpret that. But I am happy to re-read the
code again.

Balbir Singh.