| Date | Tue, 24 Nov 2020 13:04:38 +0100 | From | Peter Zijlstra <> | Subject | Re: [PATCH -tip 12/32] sched: Simplify the core pick loop for optimized case |
| |
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.GF2628@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) {
|