Messages in this thread Patch in this message | | | From | Qais Yousef <> | Subject | [PATCH 4/4] sched/rt: Better distribute tasks that wakeup simultaneously | Date | Tue, 14 Apr 2020 16:05:56 +0100 |
| |
If multiple RT tasks of the same priority wakeup simultaneously, select_task_rt_rt() will always return the same CPU for all tasks because find_lowest_rq() always returns the first cpu in the lowest_mask.
Use cpumask_any_and() to randomize the selection, hence better distribute the tasks.
This helps alleviate the thundering herd issue described here when multiple tasks of the same priority wake up simultaneously:
https://lore.kernel.org/lkml/20200219140243.wfljmupcrwm2jelo@e107158-lin/
Signed-off-by: Qais Yousef <qais.yousef@arm.com> CC: Juri Lelli <juri.lelli@redhat.com> CC: Vincent Guittot <vincent.guittot@linaro.org> CC: Dietmar Eggemann <dietmar.eggemann@arm.com> CC: Steven Rostedt <rostedt@goodmis.org> CC: Ben Segall <bsegall@google.com> CC: Mel Gorman <mgorman@suse.de> CC: Andrew Morton <akpm@linux-foundation.org> CC: Thomas Gleixner <tglx@linutronix.de> CC: Yury Norov <yury.norov@gmail.com> CC: Paul Turner <pjt@google.com> CC: Alexey Dobriyan <adobriyan@gmail.com> CC: Josh Don <joshdon@google.com> CC: Pavan Kondeti <pkondeti@codeaurora.org> CC: linux-kernel@vger.kernel.org --- kernel/sched/rt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index df11d88c9895..16c7eede370a 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -1750,8 +1750,8 @@ static int find_lowest_rq(struct task_struct *task) return this_cpu; } - best_cpu = cpumask_first_and(lowest_mask, - sched_domain_span(sd)); + best_cpu = cpumask_any_and(lowest_mask, + sched_domain_span(sd)); if (best_cpu < nr_cpu_ids) { rcu_read_unlock(); return best_cpu; -- 2.17.1
| |