From: Reinette Chatre <reinette.chatre@intel.com>
To: <babu.moger@amd.com>, Peter Newman <peternewman@google.com>
Cc: <corbet@lwn.net>, <tglx@linutronix.de>, <mingo@redhat.com>,
<bp@alien8.de>, <dave.hansen@linux.intel.com>,
<fenghua.yu@intel.com>, <x86@kernel.org>, <hpa@zytor.com>,
<thuth@redhat.com>, <paulmck@kernel.org>, <rostedt@goodmis.org>,
<akpm@linux-foundation.org>, <xiongwei.song@windriver.com>,
<pawan.kumar.gupta@linux.intel.com>,
<daniel.sneddon@linux.intel.com>, <perry.yuan@amd.com>,
<sandipan.das@amd.com>, <kai.huang@intel.com>,
<xiaoyao.li@intel.com>, <seanjc@google.com>,
<jithu.joseph@intel.com>, <brijesh.singh@amd.com>,
<xin3.li@intel.com>, <ebiggers@google.com>,
<andrew.cooper3@citrix.com>, <mario.limonciello@amd.com>,
<james.morse@arm.com>, <tan.shaopeng@fujitsu.com>,
<tony.luck@intel.com>, <linux-doc@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <maciej.wieczor-retman@intel.com>,
<eranian@google.com>, <jpoimboe@kernel.org>,
<thomas.lendacky@amd.com>
Subject: Re: [PATCH v9 14/26] x86/resctrl: Introduce interface to display number of free counters
Date: Mon, 2 Dec 2024 12:15:31 -0800 [thread overview]
Message-ID: <c9b0115e-d994-4239-b2b2-12359878ec7a@intel.com> (raw)
In-Reply-To: <5a8eaf67-baaa-4278-abe5-cf68f795d4bf@amd.com>
Hi Babu,
On 12/2/24 11:48 AM, Moger, Babu wrote:
> On 12/2/24 12:33, Reinette Chatre wrote:
>> On 11/29/24 9:06 AM, Moger, Babu wrote:
>>> On 11/29/2024 3:59 AM, Peter Newman wrote:
>>>> On Thu, Nov 28, 2024 at 8:35 PM Moger, Babu <bmoger@amd.com> wrote:
>>>>> On 11/28/2024 5:10 AM, Peter Newman wrote:
>>>>>> On Wed, Nov 27, 2024 at 8:05 PM Reinette Chatre
>>>>>> <reinette.chatre@intel.com> wrote:
>>>>>>>
>>>>>>> Hi Babu,
>>>>>>>
>>>>>>> On 11/27/24 6:57 AM, Moger, Babu wrote:
>>>>
>>>>>>>> 1. Each group needs to remember counter ids in each domain for each event.
>>>>>>>> For example:
>>>>>>>> Resctrl group mon1
>>>>>>>> Total event
>>>>>>>> dom 0 cntr_id 1,
>>>>>>>> dom 1 cntr_id 10
>>>>>>>> dom 2 cntr_id 11
>>>>>>>>
>>>>>>>> Local event
>>>>>>>> dom 0 cntr_id 2,
>>>>>>>> dom 1 cntr_id 15
>>>>>>>> dom 2 cntr_id 10
>>>>>>>
>>>>>>> Indeed. The challenge here is that domains may come and go so it cannot be a simple
>>>>>>> static array. As an alternative it can be an xarray indexed by the domain ID with
>>>>>>> pointers to a struct like below to contain the counters associated with the monitor
>>>>>>> group:
>>>>>>> struct cntr_id {
>>>>>>> u32 mbm_total;
>>>>>>> u32 mbm_local;
>>>>>>> }
>>>>>>>
>>>>>>>
>>>>>>> Thinking more about how this array needs to be managed made me wonder how the
>>>>>>> current implementation deals with domains that come and go. I do not think
>>>>>>> this is currently handled. For example, if a new domain comes online and
>>>>>>> monitoring groups had counters dynamically assigned, then these counters are
>>>>>>> not configured to the newly online domain.
>>>>>
>>>>> I am trying to understand the details of your approach here.
>>>>>>
>>>>>> In my prototype, I allocated a counter id-indexed array to each
>>>>>> monitoring domain structure for tracking the counter allocations,
>>>>>> because the hardware counters are all domain-scoped. That way the
>>>>>> tracking data goes away when the hardware does.
>>>>>>
>>>>>> I was focused on allowing all pending counter updates to a domain
>>>>>> resulting from a single mbm_assign_control write to be batched and
>>>>>> processed in a single IPI, so I structured the counter tracker
>>>>>> something like this:
>>>>>
>>>>> Not sure what you meant here. How are you batching two IPIs for two domains?
>>>>>
>>>>> #echo "//0=t;1=t" > /sys/fs/resctrl/info/L3_MON/mbm_assign_control
>>>>>
>>>>> This is still a single write. Two IPIs are sent separately, one for each
>>>>> domain.
>>>>>
>>>>> Are you doing something different?
>>>>
>>>> I said "all pending counter updates to a domain", whereby I meant
>>>> targeting a single domain.
>>>>
>>>> Depending on the CPU of the caller, your example write requires 1 or 2 IPIs.
>>>>
>>>> What is important is that the following write also requires 1 or 2 IPIs:
>>>>
>>>> (assuming /sys/fs/resctrl/mon_groups/[g1-g31] exist, line breaks added
>>>> for readability)
>>>>
>>>> echo $'//0=t;1=t\n
>>>> /g1/0=t;1=t\n
>>>> /g2/0=t;1=t\n
>>>> /g3/0=t;1=t\n
>>>> /g4/0=t;1=t\n
>>>> /g5/0=t;1=t\n
>>>> /g6/0=t;1=t\n
>>>> /g7/0=t;1=t\n
>>>> /g8/0=t;1=t\n
>>>> /g9/0=t;1=t\n
>>>> /g10/0=t;1=t\n
>>>> /g11/0=t;1=t\n
>>>> /g12/0=t;1=t\n
>>>> /g13/0=t;1=t\n
>>>> /g14/0=t;1=t\n
>>>> /g15/0=t;1=t\n
>>>> /g16/0=t;1=t\n
>>>> /g17/0=t;1=t\n
>>>> /g18/0=t;1=t\n
>>>> /g19/0=t;1=t\n
>>>> /g20/0=t;1=t\n
>>>> /g21/0=t;1=t\n
>>>> /g22/0=t;1=t\n
>>>> /g23/0=t;1=t\n
>>>> /g24/0=t;1=t\n
>>>> /g25/0=t;1=t\n
>>>> /g26/0=t;1=t\n
>>>> /g27/0=t;1=t\n
>>>> /g28/0=t;1=t\n
>>>> /g29/0=t;1=t\n
>>>> /g30/0=t;1=t\n
>>>> /g31/0=t;1=t\n'
>>>>
>>>> My ultimate goal is for a thread bound to a particular domain to be
>>>> able to unassign and reassign the local domain's 32 counters in a
>>>> single write() with no IPIs at all. And when IPIs are required, then
>>>> no more than one per domain, regardless of the number of groups
>>>> updated.
>>>>
>>>
>>> Yes. I think I got the idea. Thanks.
>>>
>>>>
>>>>>
>>>>>>
>>>>>> struct resctrl_monitor_cfg {
>>>>>> int closid;
>>>>>> int rmid;
>>>>>> int evtid;
>>>>>> bool dirty;
>>>>>> };
>>>>>>
>>>>>> This mirrors the info needed in whatever register configures the
>>>>>> counter, plus a dirty flag to skip over the ones that don't need to be
>>>>>> updated.
>>>>>
>>>>> This is what my understanding of your implementation.
>>>>>
>>>>> diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
>>>>> index d94abba1c716..9cebf065cc97 100644
>>>>> --- a/include/linux/resctrl.h
>>>>> +++ b/include/linux/resctrl.h
>>>>> @@ -94,6 +94,13 @@ struct rdt_ctrl_domain {
>>>>> u32 *mbps_val;
>>>>> };
>>>>>
>>>>> +struct resctrl_monitor_cfg {
>>>>> + int closid;
>>>>> + int rmid;
>>>>> + int evtid;
>>>>> + bool dirty;
>>>>> +};
>>>>> +
>>>>> /**
>>>>> * struct rdt_mon_domain - group of CPUs sharing a resctrl monitor
>>>>> resource
>>>>> * @hdr: common header for different domain types
>>>>> @@ -116,6 +123,7 @@ struct rdt_mon_domain {
>>>>> struct delayed_work cqm_limbo;
>>>>> int mbm_work_cpu;
>>>>> int cqm_work_cpu;
>>>>> + /* Allocate num_mbm_cntrs entries in each domain */
>>>>> + struct resctrl_monitor_cfg *mon_cfg;
>>>>> };
>>>>>
>>>>>
>>>>> When a user requests an assignment for total event to the default group
>>>>> for domain 0, you go search in rdt_mon_domain(dom 0) for empty mon_cfg
>>>>> entry.
>>>>>
>>>>> If there is an empty entry, then use that entry for assignment and
>>>>> update closid, rmid, evtid and dirty = 1. We can get all these
>>>>> information from default group here.
>>>>>
>>>>> Does this make sense?
>>>>
>>>> Yes, sounds correct.
>>>
>>> I will probably add cntr_id in resctrl_monitor_cfg structure and
>>> initialize during the allocation. And rename the field 'dirty' to
>>> 'active'(or something similar) to hold the assign state for that
>>> entry. That way we have all the information required for assignment
>>> at one place. We don't need to update the rdtgroup structure.
>>>
>>> Reinette, What do you think about this approach?
>>
>> I think this approach is in the right direction. Thanks to Peter for
>> the guidance here.
>> I do not think that it is necessary to add cntr_id to resctrl_monitor_cfg
>> though, I think the cntr_id would be the index to the array instead?
>
> Yes. I think We can use the index as cntn_id. Will let you know otherwise.
>
>
>>
>> It may also be worthwhile to consider using a pointer to the resource
>> group instead of storing closid and rmid directly. If used to indicate
>> initialization then an initialized pointer is easier to distinguish than
>> the closid/rmid that may have zero as valid values.
>
> Sure. Sounds good.
>
>>
>> I expect evtid will be enum resctrl_event_id and that raises the question
>> of whether "0" can indeed be used as an "uninitialized" value since doing
>> so would change the meaning of the enum. It may indeed keep things
>> separated by maintaining evtid as an enum resctrl_event_id and note the
>> initialization differently ... either via a pointer to a resource group
>> or entirely separately as Babu indicates later.
>
> Sure. Will add evtid as enum resctrl_event_id and use the "state" to
> indicate assign/unassign/dirty status.
Is "assign/unassign" state needed? If resctrl_monitor_cfg contains a pointer
to the resource group to which the counter has been assigned then I expect NULL
means unassigned and a value means assigned?
Reinette
next prev parent reply other threads:[~2024-12-02 20:15 UTC|newest]
Thread overview: 115+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-29 23:21 [PATCH v9 00/26] x86/resctrl : Support AMD Assignable Bandwidth Monitoring Counters (ABMC) Babu Moger
2024-10-29 23:21 ` [PATCH v9 01/26] x86/resctrl: Add __init attribute for the functions called in resctrl_late_init Babu Moger
2024-11-15 23:21 ` Reinette Chatre
2024-11-18 17:44 ` Moger, Babu
2024-11-18 22:07 ` Reinette Chatre
2024-11-20 20:02 ` Moger, Babu
2024-10-29 23:21 ` [PATCH v9 02/26] x86/cpufeatures: Add support for Assignable Bandwidth Monitoring Counters (ABMC) Babu Moger
2024-10-29 23:21 ` [PATCH v9 03/26] x86/resctrl: Add ABMC feature in the command line options Babu Moger
2024-10-29 23:21 ` [PATCH v9 04/26] x86/resctrl: Consolidate monitoring related data from rdt_resource Babu Moger
2024-10-29 23:21 ` [PATCH v9 05/26] x86/resctrl: Detect Assignable Bandwidth Monitoring feature details Babu Moger
2024-10-29 23:21 ` [PATCH v9 06/26] x86/resctrl: Introduce resctrl_file_fflags_init() to initialize fflags Babu Moger
2024-10-29 23:21 ` [PATCH v9 07/26] x86/resctrl: Add support to enable/disable AMD ABMC feature Babu Moger
2024-10-29 23:21 ` [PATCH v9 08/26] x86/resctrl: Introduce the interface to display monitor mode Babu Moger
2024-11-16 0:00 ` Reinette Chatre
2024-11-18 19:04 ` Moger, Babu
2024-11-18 22:07 ` Reinette Chatre
2024-11-22 18:25 ` Moger, Babu
2024-11-22 21:37 ` Reinette Chatre
2024-11-23 0:02 ` Moger, Babu
2024-11-25 18:17 ` Reinette Chatre
2024-11-26 17:09 ` Moger, Babu
2024-11-26 19:01 ` Reinette Chatre
2024-11-26 21:57 ` Moger, Babu
2024-10-29 23:21 ` [PATCH v9 09/26] x86/resctrl: Introduce interface to display number of monitoring counters Babu Moger
2024-11-16 0:06 ` Reinette Chatre
2024-11-18 21:31 ` Moger, Babu
2025-02-03 13:26 ` Peter Newman
2024-10-29 23:21 ` [PATCH v9 10/26] x86/resctrl: Introduce bitmap mbm_cntr_free_map to track assignable counters Babu Moger
2024-11-16 0:11 ` Reinette Chatre
2024-10-29 23:21 ` [PATCH v9 11/26] x86/resctrl: Introduce mbm_total_cfg and mbm_local_cfg in struct rdt_hw_mon_domain Babu Moger
2024-10-29 23:21 ` [PATCH v9 12/26] x86/resctrl: Remove MSR reading of event configuration value Babu Moger
2024-11-16 0:24 ` Reinette Chatre
2024-11-19 16:50 ` Moger, Babu
2024-10-29 23:21 ` [PATCH v9 13/26] x86/resctrl: Introduce mbm_cntr_map to track assignable counters at domain Babu Moger
2024-10-29 23:21 ` [PATCH v9 14/26] x86/resctrl: Introduce interface to display number of free counters Babu Moger
2024-10-29 23:57 ` Luck, Tony
2024-10-30 14:15 ` Moger, Babu
2024-11-04 14:14 ` Peter Newman
2024-11-04 17:31 ` Moger, Babu
2024-11-16 0:31 ` Reinette Chatre
2024-11-19 19:20 ` Moger, Babu
2024-11-21 21:12 ` Reinette Chatre
2024-11-22 23:36 ` Moger, Babu
2024-11-25 19:00 ` Reinette Chatre
2024-11-26 23:31 ` Moger, Babu
2024-11-26 23:56 ` Reinette Chatre
2024-11-27 14:57 ` Moger, Babu
2024-11-27 19:05 ` Reinette Chatre
2024-11-28 11:10 ` Peter Newman
2024-11-28 19:35 ` Moger, Babu
2024-11-29 9:59 ` Peter Newman
2024-11-29 17:06 ` Moger, Babu
2024-12-02 10:43 ` Peter Newman
2024-12-02 15:02 ` Moger, Babu
2024-12-02 18:33 ` Reinette Chatre
2024-12-02 19:48 ` Moger, Babu
2024-12-02 20:15 ` Reinette Chatre [this message]
2024-12-02 20:42 ` Moger, Babu
2024-12-02 21:09 ` Reinette Chatre
2024-12-02 21:28 ` Moger, Babu
2024-12-02 21:47 ` Reinette Chatre
2024-12-02 22:06 ` Moger, Babu
2024-10-29 23:21 ` [PATCH v9 15/26] x86/resctrl: Add data structures and definitions for ABMC assignment Babu Moger
2024-11-16 0:35 ` Reinette Chatre
2024-10-29 23:21 ` [PATCH v9 16/26] x86/resctrl: Introduce cntr_id in mongroup for assignments Babu Moger
2024-11-16 0:38 ` Reinette Chatre
2024-11-19 20:02 ` Moger, Babu
2024-10-29 23:21 ` [PATCH v9 17/26] x86/resctrl: Implement resctrl_arch_config_cntr() to assign a counter with ABMC Babu Moger
2024-10-29 23:54 ` Luck, Tony
2024-10-30 14:14 ` Moger, Babu
2024-11-16 0:44 ` Reinette Chatre
2024-11-19 20:12 ` Moger, Babu
2024-11-21 20:18 ` Reinette Chatre
2024-11-22 18:54 ` Moger, Babu
2024-11-22 21:52 ` Reinette Chatre
2024-11-23 0:15 ` Moger, Babu
2024-10-29 23:21 ` [PATCH v9 18/26] x86/resctrl: Add the interface to assign/update counter assignment Babu Moger
2024-11-16 0:57 ` Reinette Chatre
2024-11-20 18:05 ` Moger, Babu
2024-11-21 20:50 ` Reinette Chatre
2024-11-22 21:04 ` Moger, Babu
2024-11-22 22:07 ` Reinette Chatre
2024-11-23 0:09 ` Moger, Babu
2024-12-04 4:16 ` Fenghua Yu
2024-10-29 23:21 ` [PATCH v9 19/26] x86/resctrl: Add the interface to unassign a MBM counter Babu Moger
2024-11-04 14:16 ` Peter Newman
2024-11-04 18:21 ` Moger, Babu
2024-11-05 10:35 ` Peter Newman
2024-11-05 19:58 ` Moger, Babu
2024-10-29 23:21 ` [PATCH v9 20/26] x86/resctrl: Auto assign/unassign counters when mbm_cntr_assign is enabled Babu Moger
2024-11-18 17:18 ` Reinette Chatre
2024-11-22 0:22 ` Moger, Babu
2024-11-22 0:26 ` Moger, Babu
2024-11-22 18:12 ` Reinette Chatre
2024-11-22 21:34 ` Moger, Babu
2024-12-04 4:16 ` Fenghua Yu
2024-12-04 17:03 ` Reinette Chatre
2024-12-04 17:14 ` Moger, Babu
2024-12-04 17:19 ` Moger, Babu
2024-10-29 23:21 ` [PATCH v9 21/26] x86/resctrl: Report "Unassigned" for MBM events in mbm_cntr_assign mode Babu Moger
2024-11-18 17:39 ` Reinette Chatre
2024-11-20 19:14 ` Moger, Babu
2024-10-29 23:21 ` [PATCH v9 22/26] x86/resctrl: Introduce the interface to switch between monitor modes Babu Moger
2024-10-29 23:21 ` [PATCH v9 23/26] x86/resctrl: Configure mbm_cntr_assign mode if supported Babu Moger
2024-11-18 19:23 ` Reinette Chatre
2024-11-20 18:59 ` Moger, Babu
2024-10-29 23:21 ` [PATCH v9 24/26] x86/resctrl: Update assignments on event configuration changes Babu Moger
2024-11-18 19:43 ` Reinette Chatre
2024-11-21 2:14 ` Moger, Babu
2024-11-21 20:58 ` Reinette Chatre
2024-11-22 20:12 ` Moger, Babu
2024-10-29 23:21 ` [PATCH v9 25/26] x86/resctrl: Introduce interface to list assignment states of all the groups Babu Moger
2024-10-29 23:21 ` [PATCH v9 26/26] x86/resctrl: Introduce interface to modify assignment states of " Babu Moger
2024-11-18 21:51 ` Reinette Chatre
2024-11-21 20:29 ` Moger, Babu
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=c9b0115e-d994-4239-b2b2-12359878ec7a@intel.com \
--to=reinette.chatre@intel.com \
--cc=akpm@linux-foundation.org \
--cc=andrew.cooper3@citrix.com \
--cc=babu.moger@amd.com \
--cc=bp@alien8.de \
--cc=brijesh.singh@amd.com \
--cc=corbet@lwn.net \
--cc=daniel.sneddon@linux.intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=ebiggers@google.com \
--cc=eranian@google.com \
--cc=fenghua.yu@intel.com \
--cc=hpa@zytor.com \
--cc=james.morse@arm.com \
--cc=jithu.joseph@intel.com \
--cc=jpoimboe@kernel.org \
--cc=kai.huang@intel.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maciej.wieczor-retman@intel.com \
--cc=mario.limonciello@amd.com \
--cc=mingo@redhat.com \
--cc=paulmck@kernel.org \
--cc=pawan.kumar.gupta@linux.intel.com \
--cc=perry.yuan@amd.com \
--cc=peternewman@google.com \
--cc=rostedt@goodmis.org \
--cc=sandipan.das@amd.com \
--cc=seanjc@google.com \
--cc=tan.shaopeng@fujitsu.com \
--cc=tglx@linutronix.de \
--cc=thomas.lendacky@amd.com \
--cc=thuth@redhat.com \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
--cc=xiaoyao.li@intel.com \
--cc=xin3.li@intel.com \
--cc=xiongwei.song@windriver.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
all inboxes | Powered by JetHome®