All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chen Yu <yu.c.chen@intel.com>
To: Reinette Chatre <reinette.chatre@intel.com>
Cc: <tony.luck@intel.com>, <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: Tue, 27 Oct 2026 16:54:22 +0800	[thread overview]
Message-ID: <auBmvjC2ARQ_CNcG@chenyu-dev> (raw)
In-Reply-To: <40ed95c5-a103-4139-a802-893c4bc8a497@intel.com>

Hi Reinette,

On Fri, Oct 23, 2026 at 04:54:04PM -0700, Reinette Chatre wrote:
> 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"
>

OK, will change it.

> > 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.
>

OK, I'll adjust above commit log accordingly.

> > 
> > 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?
>

OK, let me open-code it.

> >  	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?
>

Yes, let me drop CMT.

> 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.
>

OK dropped the last sentence.

> > +	 * 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?
>

Yes, let me move it at the beginning of enumerate_erdt_table().

> > +		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".
>

OK, this was not specific to CMT, so I dropped the "CMT" term and changed it as
you suggested.

> 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.
> 

OK, a new patch is introduced
"x86/resctrl: Detect Sub-NUMA Cluster mode before enumerating resources"
to initialize the snc_nodes_per_l3_cache earlier, and keep the
"snc_nodes_per_l3_cache > 1" check in current patch.

> > +__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().
> 

Yes, I moved the definition of snc_nodes_per_l3_cache to core.c and initialize
it there, but we cannot move all references to snc_nodes_per_l3_cache out of monitor.c
for now because several places in monitor.c use it. After all, IMHO snc_nodes_per_l3_cache
was mainly introduced to deal with MBM.

 grep -r -n "snc_nodes_per_l3_cache" arch/x86/kernel/cpu/resctrl/monitor.c
101: * "snc_nodes_per_l3_cache == 1") no translation of the RMID value is
129:    if (snc_nodes_per_l3_cache == 1)
132:    return lrmid + (cpu_to_node(cpu) % snc_nodes_per_l3_cache) * r->mon.num_rmid;
384:    if (snc_nodes_per_l3_cache > 1)
457:    hw_res->mon_scale = boot_cpu_data.x86_cache_occ_scale / snc_nodes_per_l3_cache;
458:    r->mon.num_rmid = (max_rmid + 1) / snc_nodes_per_l3_cache;

thanks,
Chenyu
> >  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-27  9:07 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
2026-10-27  8:54     ` Chen Yu [this message]
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=auBmvjC2ARQ_CNcG@chenyu-dev \
    --to=yu.c.chen@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=reinette.chatre@intel.com \
    --cc=tglx@kernel.org \
    --cc=tony.luck@intel.com \
    --cc=x86@kernel.org \
    /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.