All of lore.kernel.org
 help / color / mirror / Atom feed
From: Reinette Chatre <reinette.chatre@intel.com>
To: Chen Yu <yu.c.chen@intel.com>, <tony.luck@intel.com>
Cc: <tglx@kernel.org>, <bp@alien8.de>, <mingo@redhat.com>,
	<dave.hansen@linux.intel.com>, <hpa@zytor.com>,
	<fenghuay@nvidia.com>, <babu.moger@amd.com>,
	<hongyu.ning@intel.com>, <chen.yu@linux.dev>, <x86@kernel.org>,
	<linux-kernel@vger.kernel.org>,
	Hongyu Ning <hongyu.ning@linux.intel.com>
Subject: Re: [PATCH v9 04/12] x86/resctrl: Do not enable ERDT when Sub-NUMA Cluster is enabled
Date: Fri, 23 Oct 2026 16:54:04 -0700	[thread overview]
Message-ID: <40ed95c5-a103-4139-a802-893c4bc8a497@intel.com> (raw)
In-Reply-To: <eefa12618e3be5b5e19a88a343d192ab8d9049ae.1791933001.git.yu.c.chen@intel.com>

Hi Chenyu,

On 10/13/26 7:58 PM, Chen Yu wrote:
> ERDT cannot coexist with SNC(Sub-NUMA-Clustering). The definition of SNC

"Sub-NUMA-Clustering" -> "Sub-NUMA-Cluster mode"

> is to 'divide' an L3 into smaller L3 slices by mapping addresses to
> different L3 slices. The current platform with ERDT enabled has several
> L3 per socket, and it will not be divided into smaller slices.
> Furthermore, ERDT has only L3 scope for the CPU agent, and there are no
> node-scope domains.
> 
> snc_nodes_per_l3_cache is calculated in rdt_get_l3_mon_config(), which
> runs after erdt_init() has parsed the ACPI ERDT table. Introduce
> resctrl_arch_update_snc() to do that calculation and call it from
> get_rdt_resources() before erdt_init(). Leave ERDT disabled if SNC is
> detected and keep using the legacy MSR based CMT interface. Do this check
> while parsing the ERDT table so that platforms that do not provide an
> ERDT table at all stay silent.

Please do not just narrate the code in changelog but instead describe
at high level in regular language what the change does.

> 
> Suggested-by: Tony Luck <tony.luck@intel.com>
> Suggested-by: Reinette Chatre <reinette.chatre@intel.com>
> Signed-off-by: Chen Yu <yu.c.chen@intel.com>
> Tested-by: Hongyu Ning <hongyu.ning@linux.intel.com>
> ---


> diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
> index 7fadfebb5312..0ea888807bd0 100644
> --- a/arch/x86/kernel/cpu/resctrl/core.c
> +++ b/arch/x86/kernel/cpu/resctrl/core.c
> @@ -1018,6 +1018,7 @@ static __init bool get_rdt_resources(void)
>  {
>  	bool ret;
>  
> +	resctrl_arch_update_snc();

"resctrl_arch_..." is the common prefix for helpers found in include/linux/resctrl.h that all
architectures are required to implement.
Is a helper really needed here? It is just one line, could it just be open coded?

>  	erdt_init();
>  	rdt_alloc_capable = get_rdt_alloc_resources();
>  	rdt_mon_capable = get_rdt_mon_resources();
> diff --git a/arch/x86/kernel/cpu/resctrl/erdt.c b/arch/x86/kernel/cpu/resctrl/erdt.c
> index eb5e262e243a..d94c54617fa1 100644
> --- a/arch/x86/kernel/cpu/resctrl/erdt.c
> +++ b/arch/x86/kernel/cpu/resctrl/erdt.c
> @@ -229,6 +229,18 @@ static __init int enumerate_erdt_table(struct acpi_table_header *table_hdr)
>  		return -EINVAL;
>  	}
>  
> +	/*
> +	 * ERDT describes monitoring resources per L3 cache domain, while SNC
> +	 * splits an L3 cache into NUMA node scoped monitoring domains. The two
> +	 * cannot be matched up, so leave ERDT disabled and fall back to the
> +	 * MSR based CMT interface. snc_nodes_per_l3_cache has been computed by

"MSR CMT interface" - this restriction is not specific to CMT, is it? Could "CMT"
just be dropped?

Last sentence of comment can be dropped. It surely will be a bug if snc_nodes_per_l3_cache
is not initialized before it is used here and one can just go find where that happens.

> +	 * resctrl_arch_update_snc() before erdt_init() is called.
> +	 */
> +	if (snc_nodes_per_l3_cache > 1) {

Looks like this check occurs *after* parsing of ERDT table already started. Could this
be moved to be the first check to avoid that unnecessary work?

> +		pr_info("Not supported with Sub-NUMA Cluster enabled, using legacy CMT\n");

"using legacy CMT" ERDT is not limited to CMT so this can just be dropped?
I understand that the pr_info() adds an "ERDT:" prefix but I think it will be useful
to include in this message that ERDT in its entirety is not supported:
 "ERDT not supported with Sub-NUMA Cluster enabled".

I think this work could be integrated better by switching the order between
this patch and "x86/resctrl: Parse ACPI ERDT table and save CACD cpumask per RMD",
separating the change to where snc_nodes_per_l3_cache is initialized and the new
dependency by moving just this hunk to "x86/resctrl: Parse ACPI ERDT table and save
CACD cpumask per RMD" with a note in the changelog that ERDT and SNC are not compatible.

> +		return -EINVAL;
> +	}
> +
>  	for (subtbl = (void *)erdt + sizeof(*erdt);
>  	     subtbl_valid((void *)erdt + erdt->header.length, subtbl);
>  	     subtbl = next_subtbl(subtbl)) {
> diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h
> index e2f3b884847c..34d29f719076 100644
> --- a/arch/x86/kernel/cpu/resctrl/internal.h
> +++ b/arch/x86/kernel/cpu/resctrl/internal.h
> @@ -177,6 +177,8 @@ static inline struct rdt_hw_resource *resctrl_to_arch_res(struct rdt_resource *r
>  
>  extern struct rdt_hw_resource rdt_resources_all[];
>  
> +extern int snc_nodes_per_l3_cache;
> +
>  void arch_mon_domain_online(struct rdt_resource *r, struct rdt_l3_mon_domain *d);
>  
>  /* CPUID.(EAX=10H, ECX=ResID=1).EAX */
> @@ -251,6 +253,7 @@ union l3_qos_abmc_cfg {
>  void rdt_ctrl_update(void *arg);
>  
>  int rdt_get_l3_mon_config(struct rdt_resource *r);
> +__init void resctrl_arch_update_snc(void);
>  
>  bool rdt_cpu_has(int flag);
>  
> diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c
> index 3838e0a13d36..6e46f10d8640 100644
> --- a/arch/x86/kernel/cpu/resctrl/monitor.c
> +++ b/arch/x86/kernel/cpu/resctrl/monitor.c
> @@ -34,7 +34,7 @@ bool rdt_mon_capable;
>  
>  #define CF(cf)	((unsigned long)(1048576 * (cf) + 0.5))
>  
> -static int snc_nodes_per_l3_cache = 1;
> +int snc_nodes_per_l3_cache = 1;
>  
>  /*
>   * The correction factor table is documented in Documentation/filesystems/resctrl.rst.
> @@ -416,6 +416,11 @@ static __init int snc_get_config(void)
>  	return ret;
>  }
>  
> +__init void resctrl_arch_update_snc(void)
> +{
> +	snc_nodes_per_l3_cache = snc_get_config();
> +}
> +

This looks unnecessary. Could all these references to snc_nodes_per_l3_cache be dropped
from monitor.c?
Definition of snc_nodes_per_l3_cache could be moved to core.c where it is
initialized now and its initialization could just be open coded in get_rdt_resources().

>  int __init rdt_get_l3_mon_config(struct rdt_resource *r)
>  {
>  	unsigned int mbm_offset = boot_cpu_data.x86_cache_mbm_width_offset;
> @@ -423,8 +428,6 @@ int __init rdt_get_l3_mon_config(struct rdt_resource *r)
>  	unsigned int threshold;
>  	u32 eax, ebx, ecx, edx;
>  
> -	snc_nodes_per_l3_cache = snc_get_config();
> -
>  	resctrl_rmid_realloc_limit = boot_cpu_data.x86_cache_size * 1024;
>  	hw_res->mon_scale = boot_cpu_data.x86_cache_occ_scale / snc_nodes_per_l3_cache;
>  	r->mon.num_rmid = (boot_cpu_data.x86_cache_max_rmid + 1) / snc_nodes_per_l3_cache;

Reinette

  reply	other threads:[~2026-10-23 23:55 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-14  2:56 [PATCH v9 00/12] Introduce MMIO-based CMT access for Enhanced RDT Chen Yu
2026-10-14  2:57 ` [PATCH v9 01/12] x86/topology: Export topo_lookup_cpuid() for resctrl use Chen Yu
2026-10-14  2:58 ` [PATCH v9 02/12] x86/resctrl: Require 64-bit x86 for resctrl support Chen Yu
2026-10-23 23:46   ` Reinette Chatre
2026-10-27  7:54     ` Chen Yu
2026-10-14  2:58 ` [PATCH v9 03/12] x86/resctrl: Parse ACPI ERDT table and save CACD cpumask per RMD Chen Yu
2026-10-23 23:50   ` Reinette Chatre
2026-10-27  8:14     ` Chen Yu
2026-10-14  2:58 ` [PATCH v9 04/12] x86/resctrl: Do not enable ERDT when Sub-NUMA Cluster is enabled Chen Yu
2026-10-23 23:54   ` Reinette Chatre [this message]
2026-10-27  8:54     ` Chen Yu
2026-10-27 16:16       ` Reinette Chatre
2026-10-28  2:44         ` Chen Yu
2026-10-14  2:58 ` [PATCH v9 05/12] x86/resctrl: Attach ACPI ERDT information to L3 mon domain on CPU online Chen Yu
2026-10-23 23:57   ` Reinette Chatre
2026-10-24  0:37     ` Reinette Chatre
2026-10-27 10:36     ` Chen Yu
2026-10-27 16:17       ` Reinette Chatre
2026-10-28  2:57         ` Chen Yu
2026-10-14  2:59 ` [PATCH v9 06/12] x86,fs/resctrl: Move resctrl_arch_round_mon_val() out of line Chen Yu
2026-10-23 23:59   ` Reinette Chatre
2026-10-27 10:39     ` Chen Yu
2026-11-03 20:38   ` Ben Horgan
2026-11-04  3:00     ` Chen Yu
2026-10-14  2:59 ` [PATCH v9 07/12] x86/resctrl: Add a global ERDT monitor scale Chen Yu
2026-10-24  0:02   ` Reinette Chatre
2026-10-27 10:53     ` Chen Yu
2026-10-14  2:59 ` [PATCH v9 08/12] x86/resctrl: Parse ACPI CMRC table Chen Yu
2026-10-14  3:00 ` [PATCH v9 09/12] x86/resctrl: Refactor the monitor read function Chen Yu
2026-10-14  3:00 ` [PATCH v9 10/12] fs/resctrl: Do not invoke smp_processor_id() in preemptible context Chen Yu
2026-10-14  3:00 ` [PATCH v9 11/12] x86/resctrl: Introduce erdt_cpu_has() and erdt_support() Chen Yu
2026-10-14  3:01 ` [PATCH v9 12/12] x86/resctrl: Add MMIO-based LLC occupancy monitoring support Chen Yu
2026-10-24  0:08   ` Reinette Chatre
2026-10-27 11:22     ` Chen Yu
2026-10-27 16:21       ` Reinette Chatre
2026-10-28  2:59         ` Chen Yu
2026-10-19 12:45 ` [PATCH v9 00/12] Introduce MMIO-based CMT access for Enhanced RDT Chen Yu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=40ed95c5-a103-4139-a802-893c4bc8a497@intel.com \
    --to=reinette.chatre@intel.com \
    --cc=babu.moger@amd.com \
    --cc=bp@alien8.de \
    --cc=chen.yu@linux.dev \
    --cc=dave.hansen@linux.intel.com \
    --cc=fenghuay@nvidia.com \
    --cc=hongyu.ning@intel.com \
    --cc=hongyu.ning@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=tglx@kernel.org \
    --cc=tony.luck@intel.com \
    --cc=x86@kernel.org \
    --cc=yu.c.chen@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.