On Fri, Oct 23, 2020 at 03:51:29PM +0200, Peter Zijlstra wrote:
> On Mon, Oct 19, 2020 at 09:43:16PM -0400, Joel Fernandes (Google) wrote:
> > +                   /*
> > +                    * If this sibling doesn't yet have a suitable task to
> > +                    * run; ask for the most elegible task, given the
> > +                    * highest priority task already selected for this
> > +                    * core.
> > +                    */
> > +                   p = pick_task(rq_i, class, max);
> > +                   if (!p) {
> > +                           /*
> > +                            * If there weren't no cookies; we don't need to
> > +                            * bother with the other siblings.
> > +                            * If the rest of the core is not running a 
> > tagged
> > +                            * task, i.e.  need_sync == 0, and the current 
> > CPU
> > +                            * which called into the schedule() loop does 
> > not
> > +                            * have any tasks for this class, skip 
> > selecting for
> > +                            * other siblings since there's no point. We 
> > don't skip
> > +                            * for RT/DL because that could make CFS 
> > force-idle RT.
> > +                            */
> > +                           if (i == cpu && !need_sync && class == 
> > &fair_sched_class)
> > +                                   goto next_class;
> > +
> > +                           continue;
> > +                   }
> 
> I'm failing to understand the class == &fair_sched_class bit.
> 
> IIRC the condition is such that the core doesn't have a cookie (we don't
> need to sync the threads) so we'll only do a pick for our local CPU.
> 
> That should be invariant of class.

That is; it should be the exact counterpart of this bit:

> +                     /*
> +                      * Optimize the 'normal' case where there aren't any
> +                      * cookies and we don't need to sync up.
> +                      */
> +                     if (i == cpu && !need_sync && !p->core_cookie) {
> +                             next = p;
> +                             goto done;
> +                     }

If there is no task found in this class, try the next class, if there
is, we done.

Reply via email to