mirror of https://lore.kernel.org/lkml/
 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 v8 9/9] x86/resctrl: Add MMIO-based LLC occupancy monitoring support
Date: Fri, 9 Oct 2026 14:01:50 +0800	[thread overview]
Message-ID: <asiDTn1SAR5WTvCH@chenyu-dev> (raw)
In-Reply-To: <b25e24fd-33ea-46b4-a526-d4121aaa3c26@intel.com>

Hi Reinette,

On Thu, Oct 08, 2026 at 08:52:26AM -0700, Reinette Chatre wrote:
> Hi Chenyu,
> 
>  
> >>> diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
> >>> index ca7e67f976d5..135f2eb2a5a5 100644
> >>> --- a/arch/x86/kernel/cpu/resctrl/core.c
> >>> +++ b/arch/x86/kernel/cpu/resctrl/core.c
> >>> @@ -1007,7 +1007,10 @@ static __init bool get_rdt_mon_resources(void)
> >>>  	struct rdt_resource *r = &rdt_resources_all[RDT_RESOURCE_L3].r_resctrl;
> >>>  	bool ret = false;
> >>>  
> >>> -	if (rdt_cpu_has(X86_FEATURE_CQM_OCCUP_LLC)) {
> >>> +	if (erdt_cpu_has(X86_FEATURE_CQM_OCCUP_LLC)) {
> >>> +		resctrl_enable_mon_event(QOS_L3_OCCUP_EVENT_ID, true, 0, NULL);
> >>> +		ret = true;
> >>> +	} else if (rdt_cpu_has(X86_FEATURE_CQM_OCCUP_LLC)) {
> >>>  		resctrl_enable_mon_event(QOS_L3_OCCUP_EVENT_ID, false, 0, NULL);
> >>>  		ret = true;
> >>>  	}
> >>
> >> Would https://lore.kernel.org/lkml/20260916231320.14502-3-tony.luck@intel.com/
> >> break this?
> >>
> > 
> > It would not break this - because the ERDT exists independently of the CPUID
> > query result, but the CPUID result should be the fundamental check before ERDT
> 
> Does this mean this implementation, that parses ERDT _before_ CPUID, needs to be
> flipped? Is this required? This series parses the table before checking CPUID, leaving
> the decision whether to use it or not based on CPUID data checked afterwards. This
> seems ok and looks to support a simpler implementation?
>

Yes, currently the ERDT parsing is done before this CPUID check. We can leave the
ERDT parsing as it is, and then when it comes to the actual CPUID check, only when
CPUID is supported will we further check if the ERDT is supported. If yes, enable
the MMIO interface, something like:

if (rdt_cpu_has(X86_FEATURE_CQM_OCCUP_LLC)) {
	resctrl_enable_mon_event(QOS_L3_OCCUP_EVENT_ID, erdt_cpu_has(X86_FEATURE_CQM_OCCUP_LLC), 0, NULL);
	ret = true;
}

> > parsing - the ERDT can decide whether to use the MMIO or legacy MSR interface,
> > but the existence of CMT support should be the first thing to check. I
> > got the following feedback from the RDT arch:
> > "Architecturally, CPUID remains the mechanism that enumerates RDT monitoring
> > capability and the specific monitoring features exposed to software. The ERDT 
> > CMRC table provides topology/resource description associated with those monitoring
> > capabilities, but it is not itself a capability enumeration mechanism.
> 
> If I interpret this correctly a system with a CMRC table still has to indicate
> LLC occupancy support via CPUID.0FH.01H:EDX?

Yes, this is my understanding.

> For the implementation that would mean
> MMIO interface is only used when rdt_cpu_has(X86_FEATURE_CQM_OCCUP_LLC) *and* 
> erdt_cpu_has(X86_FEATURE_CQM_OCCUP_LLC) are true?
>

Yes, I think so.

> Apart from that it sounds like Tony's patch will support this work to make the
> enumeration dependency clear.
>

Yes, Tony's patch helps filter the platforms without CPUID support, even if the ERDT
table is present (unlikely).

> > From that perspective, a CMRC table existing without the associated CPUID monitoring
> > enumeration would create an architectural inconsistency, as software would have topology
> > information for a monitoring capability that has not been exposed through the
> > architectural discovery mechanism."
> >>> +	/*
> >>> +	 * In legacy mode, scale is divided by snc_nodes_per_l3_cache to
> >>> +	 * prevent over-calculation of aggregated monitor data, do it
> >>> +	 * the same for MMIO based access.
> >>> +	 * This scaling factor might need to be revisited/tuned for future
> >>> +	 * platforms that support both SNC and MMIO-based monitoring
> >>> +	 * simultaneously.
> >>> +	 */
> >>> +	*val = l3_cmt_count * cmrc->up_scale / snc_nodes_per_l3_cache;
> >>
> >> Please consider all sashiko's comments about SNC systems - from what I can tell
> >> the comments are accurate and the SNC support needs a second look.
> >>
> > 
> > Yes, I saw Sashiko's comments about SNC, but it looks like it's not a practical
> > issue for now - at least for the current platform, I'm not sure how ERDT and SNC
> > can co-exist:
> > 
> > The definition of SNC (Sub-NUMA Clustering) is to 'divide' an L3 into smaller L3
> > slices by mapping addresses to different L3 slices. But the current platform with
> > ERDT enabled has 4 L3 per socket, and it is unlikely this L3 is further divided.
> > So my understanding is that, unless the real platform will do the SNC division,
> > and with ERDT enhanced to support SNC node (currently ERDT is only L3 scope for
> > the CPU agent, no node-scope domains), we can consider SNC. For now I do not see
> > the need to consider SNC on an ERDT-enabled platform. Maybe we can print a warning
> > if snc_nodes_per_l3_cache > 1 that the ERDT parsing should be stopped and should
> > fall back to the legacy MSR interfaces?
> Yes, if SNC need not be supported then please do make that clear. The current implementation,
> for example in the line above, makes it seem as though SNC is supported but for correctness
> then subtly requires it not to.
>

OK, let me revise the code/comment to explicitly say that "SNC and ERDT cannot co-exist".

thanks,
Chenyu

      reply	other threads:[~2026-10-09  6:15 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-18  4:46 [PATCH v8 0/9] Introduce MMIO-based CMT access for Enhanced RDT Chen Yu
2026-09-18  4:48 ` [PATCH v8 1/9] x86/topology: Export topo_lookup_cpuid() for resctrl use Chen Yu
2026-09-18  4:48 ` [PATCH v8 2/9] x86/resctrl: Require 64-bit x86 for resctrl support Chen Yu
2026-09-28 21:21   ` Reinette Chatre
2026-09-29 15:03     ` Chen Yu
2026-09-18  4:49 ` [PATCH v8 3/9] x86/resctrl: Parse ACPI ERDT table and save CACD cpumask for RMDD domains Chen Yu
2026-09-28 21:37   ` Reinette Chatre
2026-09-29 10:32     ` Chen Yu
2026-09-29 15:40       ` Reinette Chatre
2026-09-18  4:50 ` [PATCH v8 4/9] x86/resctrl: Attach ACPI ERDT information to L3 mon domain on CPU online Chen Yu
2026-09-28 21:44   ` Reinette Chatre
2026-09-29 14:52     ` Chen Yu
2026-09-18  4:50 ` [PATCH v8 5/9] x86/resctrl: Parse ACPI CMRC table Chen Yu
2026-09-28 21:46   ` Reinette Chatre
2026-10-04  4:34     ` Chen Yu
2026-09-18  4:50 ` [PATCH v8 6/9] x86/resctrl: Refactor the monitor read function Chen Yu
2026-09-18  4:50 ` [PATCH v8 7/9] fs/resctrl: Do not invoke smp_processor_id() in preemptible context Chen Yu
2026-09-28 21:48   ` Reinette Chatre
2026-10-04  5:54     ` Chen Yu
2026-09-18  4:51 ` [PATCH v8 8/9] x86/resctrl: Introduce erdt_cpu_has() and erdt_support() Chen Yu
2026-09-28 21:49   ` Reinette Chatre
2026-10-06  8:28     ` Chen Yu
2026-09-18  4:51 ` [PATCH v8 9/9] x86/resctrl: Add MMIO-based LLC occupancy monitoring support Chen Yu
2026-09-28 21:54   ` Reinette Chatre
2026-10-08  7:00     ` Chen Yu
2026-10-08 15:52       ` Reinette Chatre
2026-10-09  6:01         ` Chen Yu [this message]

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=asiDTn1SAR5WTvCH@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®