The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Reinette Chatre <reinette.chatre@intel.com>
To: "Chen, Yu C" <yu.c.chen@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>,
	<chen.yu@linux.dev>, <x86@kernel.org>,
	<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v6 9/9] x86/resctrl: Add MMIO-based LLC occupancy monitoring support
Date: Tue, 25 Aug 2026 10:10:57 -0700	[thread overview]
Message-ID: <fac4af12-7004-4912-871f-98ae7163c297@intel.com> (raw)
In-Reply-To: <7cb2f870-1358-467e-9406-80ec41d8a8c0@intel.com>

Hi Chenyu,

On 8/25/26 9:11 AM, Chen, Yu C wrote:
> On 8/20/2026 7:10 AM, Reinette Chatre wrote:
>> On 7/25/26 2:23 AM, Chen Yu wrote:
>>> Add erdt_mon_read() to read LLC occupancy via MMIO and use it when
>>> the platform supports ERDT. Register the L3 occupancy event with
>>> ERDT enabled when available, falling back to the MSR-based path
>>> otherwise.
>>>
>>> Use the CMRC (Cache Monitoring Registers for CPU Agents Description)
>>> ACPI sub-table to read LLC occupancy counters for each RMID via MMIO
>>> when ERDT is enabled. This CMRC information is stored in the
>>> rdt_hw_l3_mon_domain, which could be accessed directly.
>>
>> Please write in imperative tone.
>>
> 
> OK, let me try to rewrite it(I suppose you were refereeing to:
> This CMRC information is stored -> Store the CMRC information)

I was, yes.

> 
>>>
>>> Currently, the per-domain limbo handler is still in use. There is no need
>>> to switch to a global limbo handler, because even after such a switch, the
>>> worker thread would still have to iterate through all domains one by one.
>>> The per-domain handler already accomplishes this using a worker thread rather
>>> than costly IPIs, so there is no clear benefit to switching to a global handler.
>>
>> Could you please elaborate how a global limbo handler would require IPIs?
>>
> 
> The global limbo handler does not require IPIs. Previously, I wondered what the
> benefit would be of switching from a per-domain limbo handler to a global one.
> 
> per-domain handler:
> N workers, each worker calculates the current occupancy of that domain
> for a rmid. If the occupancy of all the domains drops below the threshold,
> recycle that rmid. No IPI involved.
> 
> global handler:
> One worker iterates over every domain. If the occupancy of all domains drops
> below the threshold, it recycles the RMID - with no IPI involved.
> 
> For both the per-domain and the global handler, no IPI is involved, and
> we still have to iterate over every domain. So it seems that there is not much
> benefit in switching to the global handler, IIUC.

There is still 1 vs N threads to consider but to me it is also not clear
whether it justifies the complication of supporting two thread models.

> 
>>> diff --git a/arch/x86/include/asm/resctrl.h b/arch/x86/include/asm/resctrl.h
>>> index 5491853113dd..0948f64856ef 100644
>>> --- a/arch/x86/include/asm/resctrl.h
>>> +++ b/arch/x86/include/asm/resctrl.h
>>> @@ -132,7 +132,13 @@ static inline void __resctrl_sched_in(struct task_struct *tsk)
>>>     static inline unsigned int resctrl_arch_round_mon_val(unsigned int val)
>>>   {
>>> -    unsigned int scale = boot_cpu_data.x86_cache_occ_scale;
>>> +    unsigned int scale = boot_cpu_data.x86_cache_occ_scale, escale;
>>
>> related to earlier topic, "scale" being unsigned int is ok since
>> x86_cache_occ_scale is initialized from 32bits. As I understand it the
>> ERDT scale value is initialized from 64 bits instead so the existing
>> types do not seem to accommodate?
>>
> 
> As you mentioned in another thread, there seems to be an inconsistency
> in the spec, I'll check with the team.
> 
>>>   @@ -39,6 +43,9 @@ static int erdt_scale;
>>>     bool erdt_support(int flag)
>>>   {
>>> +    if (flag == X86_FEATURE_CQM_OCCUP_LLC)
>>> +        return valid_subtbl_mask & BIT(ACPI_ERDT_TYPE_CMRC);
>>> +
>>
>> Is the plan to keep adding more if() statements as new flags need to be tested?
>>
>>
> 
> Yes. For example, to also support MBM:
> 
>      if (flag == X86_FEATURE_CQM_OCCUP_LLC)
>          return valid_subtbl_mask & BIT(ACPI_ERDT_TYPE_CMRC);
> 
>     if (flag == X86_FEATURE_CQM_MBM_TOTAL)
>         return valid_subtbl_mask & BIT(ACPI_ERDT_TYPE_MMRC);
> 

Your example makes it clear that the possible values of @flag are mutually exclusive.
The sequential evaluation as above is not optimal. Every if() needs to be evaluated
until the match is found. I would suggest that this uses switch() instead.

Reinette

  reply	other threads:[~2026-08-25 17:12 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-25  9:20 [PATCH v6 0/9] Introduce MMIO-based CMT access for Enhanced RDT Chen Yu
2026-07-25  9:22 ` [PATCH v6 1/9] x86/topology: Export topo_lookup_cpuid() for resctrl use Chen Yu
2026-08-19 22:55   ` Reinette Chatre
2026-08-22  4:16     ` Chen Yu
2026-07-25  9:22 ` [PATCH v6 2/9] x86/resctrl: Require 64-bit x86 for resctrl support Chen Yu
2026-08-19 22:55   ` Reinette Chatre
2026-08-20 15:20     ` Luck, Tony
2026-08-20 15:54       ` Reinette Chatre
2026-08-20 17:01         ` Luck, Tony
2026-08-20 17:12           ` Dave Hansen
2026-08-20 17:48             ` Reinette Chatre
2026-08-21  2:37               ` Borislav Petkov
2026-08-21 15:47                 ` Reinette Chatre
2026-08-21 15:54                   ` Borislav Petkov
2026-08-25 13:12                   ` Chen Yu
2026-08-24 14:18                     ` Dave Hansen
2026-08-24 15:15                       ` Chen, Yu C
2026-08-25  2:40                       ` Borislav Petkov
2026-08-21 11:28             ` Peter Zijlstra
2026-08-21 15:52               ` Borislav Petkov
2026-08-21 16:58                 ` Luck, Tony
2026-08-22  0:04                   ` Borislav Petkov
2026-07-25  9:22 ` [PATCH v6 3/9] x86/resctrl: Parse ACPI ERDT table and save CACD cpumask for RMDD domains Chen Yu
2026-08-19 23:01   ` Reinette Chatre
2026-08-25  8:06     ` Chen Yu
2026-08-24 15:54       ` Reinette Chatre
2026-08-25 16:18         ` Chen, Yu C
2026-07-25  9:23 ` [PATCH v6 4/9] x86/resctrl: Attach ACPI ERDT information to L3 mon domain on CPU online Chen Yu
2026-08-19 23:04   ` Reinette Chatre
2026-08-25  5:54     ` Chen, Yu C
2026-07-25  9:23 ` [PATCH v6 5/9] x86/resctrl: Parse ACPI CMRC table Chen Yu
2026-08-19 23:06   ` Reinette Chatre
2026-08-25  9:19     ` Chen, Yu C
2026-08-25 15:39       ` Reinette Chatre
2026-08-25 16:11         ` Chen, Yu C
2026-08-25 16:38           ` Luck, Tony
2026-07-25  9:23 ` [PATCH v6 6/9] x86/resctrl: Refactor the monitor read function Chen Yu
2026-08-19 23:07   ` Reinette Chatre
2026-08-25 10:03     ` Chen, Yu C
2026-07-25  9:23 ` [PATCH v6 7/9] fs/resctrl: Do not invoke smp_processor_id() in preemptible context Chen Yu
2026-08-19 23:08   ` Reinette Chatre
2026-08-25 11:17     ` Chen, Yu C
2026-07-25  9:23 ` [PATCH v6 8/9] x86/resctrl: Introduce erdt_cpu_has() and erdt_support() Chen Yu
2026-08-19 23:08   ` Reinette Chatre
2026-08-25 11:55     ` Chen, Yu C
2026-07-25  9:23 ` [PATCH v6 9/9] x86/resctrl: Add MMIO-based LLC occupancy monitoring support Chen Yu
2026-08-19 23:10   ` Reinette Chatre
2026-08-25 16:11     ` Chen, Yu C
2026-08-25 17:10       ` Reinette Chatre [this message]
2026-08-13  6:43 ` [PATCH v6 0/9] 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=fac4af12-7004-4912-871f-98ae7163c297@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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox