All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] sched/topology: optimize topology_span_sane()
@ 2024-08-07 19:05 Yury Norov
  2024-08-07 19:05 ` [PATCH 1/2] sched/topology: pre-compute topology_span_sane() loop params Yury Norov
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Yury Norov @ 2024-08-07 19:05 UTC (permalink / raw)
  To: linux-kernel
  Cc: Yury Norov, Chen Yu, Christophe JAILLET, Leonardo Bras,
	Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot,
	Dietmar Eggemann, Steven Rostedt, Ben Segall, Mel Gorman,
	Valentin Schneider

The function may call cpumask_equal with tl->mask(cpu) == tl->mask(i),
even when cpu != i. In such case, cpumask_equal() would always return
true, and we can proceed to the next iteration immediately.

Valentin Schneider shares on it:

  PKG can potentially hit that condition, and so can any
  sched_domain_mask_f that relies on the node masks...
  
  I'm thinking ideally we should have checks in place to
  ensure all node_to_cpumask_map[] masks are disjoint,
  then we could entirely skip the levels that use these
  masks in topology_span_sane(), but there's unfortunately
  no nice way to flag them... Also there would be cases
  where there's no real difference between PKG and NODE
  other than NODE is still based on a per-cpu cpumask and
  PKG isn't, so I don't see a nicer way to go about this.

v1: https://lore.kernel.org/lkml/ZrJk00cmVaUIAr4G@yury-ThinkPad/T/
v2:
 - defer initialization of 'mc' in patch #1 @Chen Yu;
 - more comments from Valentin Schneider.


Yury Norov (2):
  sched/topology: pre-compute topology_span_sane() loop params
  sched/topology: optimize topology_span_sane()

 kernel/sched/topology.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 8+ messages in thread
* [PATCH v2 0/2] sched/topology: Optimize topology_span_sane()
@ 2024-04-10 21:33 Kyle Meyer
  0 siblings, 0 replies; 8+ messages in thread
From: Kyle Meyer @ 2024-04-10 21:33 UTC (permalink / raw)
  To: linux-kernel, yury.norov, andriy.shevchenko, linux, mingo, peterz,
	juri.lelli, vincent.guittot, dietmar.eggemann, rostedt, bsegall,
	mgorman, bristot, vschneid
  Cc: russ.anderson, dimitri.sivanich, steve.wahl, Kyle Meyer

A soft lockup is being detected in build_sched_domains() on 32 socket
Sapphire Rapids systems with 3840 processors.

topology_span_sane(), called by build_sched_domains(), checks that each
processor's non-NUMA scheduling domains are completely equal or
completely disjoint. If a non-NUMA scheduling domain partially overlaps
another, scheduling groups can break.

This series adds for_each_cpu_from() as a generic cpumask macro to
optimize topology_span_sane() by removing duplicate comparisons. The
total number of comparisons is reduced from N * (N - 1) to
N * (N - 1) / 2 on each non-NUMA scheduling domain level, decreasing
the boot time by approximately 20 seconds and preventing the soft lockup
on the mentioned systems.

Changes in v2:
  * 1/2: Change for_each_cpu()'s description.
  * 2/2: Add more information to the commit message.
  * https://lore.kernel.org/linux-kernel/20240409155250.3660517-1-kyle.meyer@hpe.com/T/

Kyle Meyer (2):
  cpumask: Add for_each_cpu_from()
  sched/topology: Optimize topology_span_sane()

 include/linux/cpumask.h | 10 ++++++++++
 kernel/sched/topology.c |  6 ++----
 2 files changed, 12 insertions(+), 4 deletions(-)

-- 
2.44.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-08-29 13:18 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-07 19:05 [PATCH v2 0/2] sched/topology: optimize topology_span_sane() Yury Norov
2024-08-07 19:05 ` [PATCH 1/2] sched/topology: pre-compute topology_span_sane() loop params Yury Norov
2024-08-07 19:05 ` [PATCH 2/2] sched/topology: optimize topology_span_sane() Yury Norov
2024-08-14 16:35 ` [PATCH v2 0/2] " Yury Norov
2024-08-28 14:09   ` Yury Norov
2024-08-29  6:11     ` Christophe JAILLET
2024-08-29 13:18       ` Yury Norov
  -- strict thread matches above, loose matches on Subject: below --
2024-04-10 21:33 [PATCH v2 0/2] sched/topology: Optimize topology_span_sane() Kyle Meyer

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.