* [PATCH RESEND] x86/smpboot: avoid SMT domain attach/destroy if SMT is not enabled
@ 2025-04-22 8:47 Li Chen
2025-06-20 2:27 ` Li Chen
2025-06-20 13:54 ` Thomas Gleixner
0 siblings, 2 replies; 5+ messages in thread
From: Li Chen @ 2025-04-22 8:47 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
linux-kernel
From: Li Chen <chenl311@chinatelecom.cn>
Currently, the SMT domain is added into sched_domain_topology
by default if CONFIG_SCHED_SMT is enabled.
If cpu_attach_domain finds that the CPU SMT domain’s cpumask_weight
is just 1, it will destroy_sched_domain it.
On a large machine, such as one with 512 cores, this results in
512 redundant domain attach/destroy operations.
We can avoid these unnecessary operations by simply checking
cpu_smt_num_threads and not inserting SMT domain into x86_topology if SMT
is not enabled.
Signed-off-by: Li Chen <chenl311@chinatelecom.cn>
---
[RESEND] because I forgot to add any mailing list previously.
arch/x86/kernel/smpboot.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index d6cf1e23c2a3..da6192e1af12 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -485,9 +485,11 @@ static void __init build_sched_topology(void)
int i = 0;
#ifdef CONFIG_SCHED_SMT
- x86_topology[i++] = (struct sched_domain_topology_level){
- cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT)
- };
+ if (cpu_smt_num_threads > 1) {
+ x86_topology[i++] = (struct sched_domain_topology_level){
+ cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT)
+ };
+ }
#endif
#ifdef CONFIG_SCHED_CLUSTER
x86_topology[i++] = (struct sched_domain_topology_level){
--
2.48.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH RESEND] x86/smpboot: avoid SMT domain attach/destroy if SMT is not enabled
2025-04-22 8:47 [PATCH RESEND] x86/smpboot: avoid SMT domain attach/destroy if SMT is not enabled Li Chen
@ 2025-06-20 2:27 ` Li Chen
2025-06-20 13:54 ` Thomas Gleixner
1 sibling, 0 replies; 5+ messages in thread
From: Li Chen @ 2025-06-20 2:27 UTC (permalink / raw)
To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
linux-kernel
Gentle ping.
---- On Tue, 22 Apr 2025 16:47:18 +0800 Li Chen <me@linux.beauty> wrote ---
> From: Li Chen <chenl311@chinatelecom.cn>
>
> Currently, the SMT domain is added into sched_domain_topology
> by default if CONFIG_SCHED_SMT is enabled.
>
> If cpu_attach_domain finds that the CPU SMT domain’s cpumask_weight
> is just 1, it will destroy_sched_domain it.
>
> On a large machine, such as one with 512 cores, this results in
> 512 redundant domain attach/destroy operations.
>
> We can avoid these unnecessary operations by simply checking
> cpu_smt_num_threads and not inserting SMT domain into x86_topology if SMT
> is not enabled.
>
> Signed-off-by: Li Chen <chenl311@chinatelecom.cn>
> ---
>
> [RESEND] because I forgot to add any mailing list previously.
>
> arch/x86/kernel/smpboot.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
> index d6cf1e23c2a3..da6192e1af12 100644
> --- a/arch/x86/kernel/smpboot.c
> +++ b/arch/x86/kernel/smpboot.c
> @@ -485,9 +485,11 @@ static void __init build_sched_topology(void)
> int i = 0;
>
> #ifdef CONFIG_SCHED_SMT
> - x86_topology[i++] = (struct sched_domain_topology_level){
> - cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT)
> - };
> + if (cpu_smt_num_threads > 1) {
> + x86_topology[i++] = (struct sched_domain_topology_level){
> + cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT)
> + };
> + }
> #endif
> #ifdef CONFIG_SCHED_CLUSTER
> x86_topology[i++] = (struct sched_domain_topology_level){
> --
> 2.48.1
>
>
Regards,
Li
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH RESEND] x86/smpboot: avoid SMT domain attach/destroy if SMT is not enabled
2025-04-22 8:47 [PATCH RESEND] x86/smpboot: avoid SMT domain attach/destroy if SMT is not enabled Li Chen
2025-06-20 2:27 ` Li Chen
@ 2025-06-20 13:54 ` Thomas Gleixner
2025-06-20 15:47 ` [PATCH] x86/smpboot: Decrapify build_sched_topology() Thomas Gleixner
2025-06-24 9:00 ` [PATCH RESEND] x86/smpboot: avoid SMT domain attach/destroy if SMT is not enabled Li Chen
1 sibling, 2 replies; 5+ messages in thread
From: Thomas Gleixner @ 2025-06-20 13:54 UTC (permalink / raw)
To: Li Chen, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
linux-kernel
On Tue, Apr 22 2025 at 16:47, Li Chen wrote:
> Currently, the SMT domain is added into sched_domain_topology
> by default if CONFIG_SCHED_SMT is enabled.
>
> If cpu_attach_domain finds that the CPU SMT domain’s cpumask_weight
> is just 1, it will destroy_sched_domain it.
If cpu_attach_domain() ..., it will destroy it.
> On a large machine, such as one with 512 cores, this results in
> 512 redundant domain attach/destroy operations.
>
> We can avoid these unnecessary operations by simply checking
s/We can avoid/Avoid/
> cpu_smt_num_threads and not inserting SMT domain into x86_topology if SMT
the SMT domain
> is not enabled.
>
> #ifdef CONFIG_SCHED_SMT
> - x86_topology[i++] = (struct sched_domain_topology_level){
> - cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT)
> - };
> + if (cpu_smt_num_threads > 1) {
> + x86_topology[i++] = (struct sched_domain_topology_level){
> + cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT)
> + };
> + }
Looks about right, though I really detest this coding style. I'm not
blaming you, as you just followed the already existing bad taste...
Thanks,
tglx
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] x86/smpboot: Decrapify build_sched_topology()
2025-06-20 13:54 ` Thomas Gleixner
@ 2025-06-20 15:47 ` Thomas Gleixner
2025-06-24 9:00 ` [PATCH RESEND] x86/smpboot: avoid SMT domain attach/destroy if SMT is not enabled Li Chen
1 sibling, 0 replies; 5+ messages in thread
From: Thomas Gleixner @ 2025-06-20 15:47 UTC (permalink / raw)
To: Li Chen; +Cc: Ingo Molnar, Borislav Petkov, Dave Hansen, x86, linux-kernel
The #ifdeffery and the initializers in build_sched_topology() are just
disgusting. The SCHED_SMT #ifdef is also pointless because SCHED_SMT is
unconditionally enabled when SMP is enabled.
Statically initialize the domain levels in the topology array and let
build_sched_topology() invalidate the package domain level when NUMA in
package is available.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
Note: This allows to remove the SMT level with a simple memmove()
---
arch/x86/kernel/smpboot.c | 45 +++++++++++++++++----------------------------
1 file changed, 17 insertions(+), 28 deletions(-)
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -478,43 +478,32 @@ static int x86_cluster_flags(void)
*/
static bool x86_has_numa_in_package;
-static struct sched_domain_topology_level x86_topology[6];
+#define DOMAIN(maskfn, flagsfn, dname) { .mask = maskfn, .sd_flags = flagsfn, .name = #dname }
-static void __init build_sched_topology(void)
-{
- int i = 0;
-
-#ifdef CONFIG_SCHED_SMT
- x86_topology[i++] = (struct sched_domain_topology_level){
- cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT)
- };
-#endif
+static struct sched_domain_topology_level x86_topology[] = {
+ DOMAIN(cpu_smt_mask, cpu_smt_flags, SMT),
#ifdef CONFIG_SCHED_CLUSTER
- x86_topology[i++] = (struct sched_domain_topology_level){
- cpu_clustergroup_mask, x86_cluster_flags, SD_INIT_NAME(CLS)
- };
+ DOMAIN(cpu_clustergroup_mask, x86_cluster_flags, CLS),
#endif
#ifdef CONFIG_SCHED_MC
- x86_topology[i++] = (struct sched_domain_topology_level){
- cpu_coregroup_mask, x86_core_flags, SD_INIT_NAME(MC)
- };
+ DOMAIN(cpu_coregroup_mask, x86_core_flags, MC),
#endif
- /*
- * When there is NUMA topology inside the package skip the PKG domain
- * since the NUMA domains will auto-magically create the right spanning
- * domains based on the SLIT.
- */
- if (!x86_has_numa_in_package) {
- x86_topology[i++] = (struct sched_domain_topology_level){
- cpu_cpu_mask, x86_sched_itmt_flags, SD_INIT_NAME(PKG)
- };
- }
+ DOMAIN(cpu_cpu_mask, x86_sched_itmt_flags, PKG),
+ { NULL },
+};
+static void __init build_sched_topology(void)
+{
/*
- * There must be one trailing NULL entry left.
+ * When there is NUMA topology inside the package invalidate the
+ * PKG domain since the NUMA domains will auto-magically create the
+ * right spanning domains based on the SLIT.
*/
- BUG_ON(i >= ARRAY_SIZE(x86_topology)-1);
+ if (x86_has_numa_in_package) {
+ unsigned int pkgdom = ARRAY_SIZE(x86_topology) - 2;
+ memset(&x86_topology[pkgdom], 0, sizeof(x86_topology[pkgdom]));
+ }
set_sched_topology(x86_topology);
}
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH RESEND] x86/smpboot: avoid SMT domain attach/destroy if SMT is not enabled
2025-06-20 13:54 ` Thomas Gleixner
2025-06-20 15:47 ` [PATCH] x86/smpboot: Decrapify build_sched_topology() Thomas Gleixner
@ 2025-06-24 9:00 ` Li Chen
1 sibling, 0 replies; 5+ messages in thread
From: Li Chen @ 2025-06-24 9:00 UTC (permalink / raw)
To: Thomas Gleixner
Cc: Ingo Molnar, Borislav Petkov, Dave Hansen, x86, linux-kernel
Hi Thomas,
---- On Fri, 20 Jun 2025 21:54:27 +0800 Thomas Gleixner <tglx@linutronix.de> wrote ---
> On Tue, Apr 22 2025 at 16:47, Li Chen wrote:
> > Currently, the SMT domain is added into sched_domain_topology
> > by default if CONFIG_SCHED_SMT is enabled.
> >
> > If cpu_attach_domain finds that the CPU SMT domain’s cpumask_weight
> > is just 1, it will destroy_sched_domain it.
>
> If cpu_attach_domain() ..., it will destroy it.
>
> > On a large machine, such as one with 512 cores, this results in
> > 512 redundant domain attach/destroy operations.
> >
> > We can avoid these unnecessary operations by simply checking
>
> s/We can avoid/Avoid/
>
> > cpu_smt_num_threads and not inserting SMT domain into x86_topology if SMT
>
> the SMT domain
>
> > is not enabled.
> >
> > #ifdef CONFIG_SCHED_SMT
> > - x86_topology[i++] = (struct sched_domain_topology_level){
> > - cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT)
> > - };
> > + if (cpu_smt_num_threads > 1) {
> > + x86_topology[i++] = (struct sched_domain_topology_level){
> > + cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT)
> > + };
> > + }
>
> Looks about right, though I really detest this coding style. I'm not
> blaming you, as you just followed the already existing bad taste...
>
> Thanks,
>
> tglx
>
Thanks for your review, I have fixed the wording issues here: https://lore.kernel.org/all/20250624085559.69436-1-me@linux.beauty/T/#t
Regards,
Li
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-06-24 9:00 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-22 8:47 [PATCH RESEND] x86/smpboot: avoid SMT domain attach/destroy if SMT is not enabled Li Chen
2025-06-20 2:27 ` Li Chen
2025-06-20 13:54 ` Thomas Gleixner
2025-06-20 15:47 ` [PATCH] x86/smpboot: Decrapify build_sched_topology() Thomas Gleixner
2025-06-24 9:00 ` [PATCH RESEND] x86/smpboot: avoid SMT domain attach/destroy if SMT is not enabled Li Chen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).