Messages in this thread | | | Date | Fri, 23 Oct 2020 15:54:00 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH v8 -tip 06/26] sched: Add core wide task selection and scheduling. |
| |
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.
| |