On Tue, Nov 17, 2020 at 06:19:42PM -0500, Joel Fernandes (Google) wrote: > + /* > + * Optimize for common case where this CPU has no cookies > + * and there are no cookied tasks running on siblings. > + */ > + if (!need_sync) { > + for_each_class(class) { > + next = class->pick_task(rq); > + if (next) > + break; > + } > + > + if (!next->core_cookie) { > + rq->core_pick = NULL; > + goto done; > + } > need_sync = true; > }
This isn't what I send you here: https://lkml.kernel.org/r/20201026093131.gf2...@hirez.programming.kicks-ass.net Specifically, you've lost the whole cfs-cgroup optimization. What was wrong/not working with the below? --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -5225,8 +5227,6 @@ pick_next_task(struct rq *rq, struct tas return next; } - put_prev_task_balance(rq, prev, rf); - smt_mask = cpu_smt_mask(cpu); need_sync = !!rq->core->core_cookie; @@ -5255,17 +5255,14 @@ pick_next_task(struct rq *rq, struct tas * and there are no cookied tasks running on siblings. */ if (!need_sync) { - for_each_class(class) { - next = class->pick_task(rq); - if (next) - break; - } - + next = __pick_next_task(rq, prev, rf); if (!next->core_cookie) { rq->core_pick = NULL; - goto done; + return next; } - need_sync = true; + put_prev_task(next); + } else { + put_prev_task_balance(rq, prev, rf); } for_each_cpu(i, smt_mask) {