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 <pet...@infradead.org> > >>>> > >>>> 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.