From: "Moger, Babu" <bmoger@amd.com>
To: Reinette Chatre <reinette.chatre@intel.com>,
Babu Moger <babu.moger@amd.com>,
corbet@lwn.net, fenghua.yu@intel.com, tglx@linutronix.de,
mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com
Cc: x86@kernel.org, hpa@zytor.com, paulmck@kernel.org,
rdunlap@infradead.org, tj@kernel.org, peterz@infradead.org,
yanjiewtw@gmail.com, kim.phillips@amd.com,
lukas.bulwahn@gmail.com, seanjc@google.com, jmattson@google.com,
leitao@debian.org, jpoimboe@kernel.org,
rick.p.edgecombe@intel.com, kirill.shutemov@linux.intel.com,
jithu.joseph@intel.com, kai.huang@intel.com,
kan.liang@linux.intel.com, daniel.sneddon@linux.intel.com,
pbonzini@redhat.com, sandipan.das@amd.com,
ilpo.jarvinen@linux.intel.com, peternewman@google.com,
maciej.wieczor-retman@intel.com, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, eranian@google.com,
james.morse@arm.com
Subject: Re: [PATCH v7 24/24] x86/resctrl: Introduce interface to modify assignment states of the groups
Date: Fri, 27 Sep 2024 12:47:21 -0500 [thread overview]
Message-ID: <c43171f4-48c6-b6c3-d71e-1f23367932d7@amd.com> (raw)
In-Reply-To: <faf50d1f-d3c1-4a9b-a87f-4598e88dc9a1@intel.com>
Hi Reinette,
On 9/19/2024 12:59 PM, Reinette Chatre wrote:
> Hi Babu,
>
> On 9/4/24 3:21 PM, Babu Moger wrote:
>> Introduce the interface to assign MBM events in mbm_cntr_assign mode.
>>
>> Events can be enabled or disabled by writing to file
>> /sys/fs/resctrl/info/L3_MON/mbm_assign_control
>>
>> Format is similar to the list format with addition of opcode for the
>> assignment operation.
>> "<CTRL_MON group>/<MON group>/<domain_id><opcode><flags>"
>>
>> Format for specific type of groups:
>>
>> * Default CTRL_MON group:
>> "//<domain_id><opcode><flags>"
>>
>> * Non-default CTRL_MON group:
>> "<CTRL_MON group>//<domain_id><opcode><flags>"
>>
>> * Child MON group of default CTRL_MON group:
>> "/<MON group>/<domain_id><opcode><flags>"
>>
>> * Child MON group of non-default CTRL_MON group:
>> "<CTRL_MON group>/<MON group>/<domain_id><opcode><flags>"
>>
>> Domain_id '*' will apply the flags on all the domains.
>>
>> Opcode can be one of the following:
>>
>> = Update the assignment to match the flags
>> + Assign a new MBM event without impacting existing assignments.
>> - Unassign a MBM event from currently assigned events.
>>
>> Assignment flags can be one of the following:
>> t MBM total event
>> l MBM local event
>> tl Both total and local MBM events
>> _ None of the MBM events. Valid only with '=' opcode.
>>
>> Signed-off-by: Babu Moger <babu.moger@amd.com>
>> ---
>> v7: Simplified the parsing (strsep(&token, "//") in rdtgroup_mbm_assign_control_write().
>> Added mutex lock in rdtgroup_mbm_assign_control_write() while processing.
>> Renamed rdtgroup_find_grp to rdtgroup_find_grp_by_name.
>> Fixed rdtgroup_str_to_mon_state to return error for invalid flags.
>> Simplified the calls rdtgroup_assign_cntr by merging few functions earlier.
>> Removed ABMC reference in FS code.
>> Reinette commented about handling the combination of flags like 'lt_' and '_lt'.
>> Not sure if we need to change the behaviour here. Processed them sequencially right now.
>> Users have the liberty to pass the flags. Restricting it might be a problem later.
>
> Could you please give an example of what problem may be encountered later? An assignment
> like "domain=_lt" seems like a contradiction to me since user space essentially asks
> for "None of the MBM events" as well as "MBM total event" and "MBM local event".
I agree it is contradiction. But user is the one who decides to do that.
I think we should allow it. Also, there is some value to it as well.
"domain=_lt" This will also reset the counters if the total and local
events are assigned earlier this action.
>
>
> ...
>
>> @@ -352,6 +352,98 @@ with the following files:
>> There are four resctrl groups. All the groups have total and local MBM events
>> assigned on domain 0 and 1.
>>
>> + Assignment state can be updated by writing to the interface.
>> +
>> + Format is similar to the list format with addition of opcode for the
>> + assignment operation.
>> +
>> + "<CTRL_MON group>/<MON group>/<domain_id><opcode><flags>"
>> +
>> + Format for each type of groups:
>> +
>> + * Default CTRL_MON group:
>> + "//<domain_id><opcode><flags>"
>> +
>> + * Non-default CTRL_MON group:
>> + "<CTRL_MON group>//<domain_id><opcode><flags>"
>> +
>> + * Child MON group of default CTRL_MON group:
>> + "/<MON group>/<domain_id><opcode><flags>"
>> +
>> + * Child MON group of non-default CTRL_MON group:
>> + "<CTRL_MON group>/<MON group>/<domain_id><opcode><flags>"
>> +
>> + Domain_id '*' will apply the flags on all the domains.
>> +
>> + Opcode can be one of the following:
>> + ::
>> +
>> + = Update the assignment to match the MBM event.
>> + + Assign a new MBM event without impacting existing assignments.
>> + - Unassign a MBM event from currently assigned events.
>> +
>> + Examples:
>> + ::
>> +
>> + Initial group status:
>> + # cat /sys/fs/resctrl/info/L3_MON/mbm_assign_control
>> + non_default_ctrl_mon_grp//0=tl;1=tl;
>> + non_default_ctrl_mon_grp/child_non_default_mon_grp/0=tl;1=tl;
>> + //0=tl;1=tl;
>> + /child_default_mon_grp/0=tl;1=tl;
>> +
>
> Similar to previous patch, looking at this generated doc does not seem to reflect
> what is intended. Above and below are all formatted as code, the descriptions as
> well as the actual "code".
Sure. Will check again.
>
>> + To update the default group to assign only total MBM event on domain 0:
>> + # echo "//0=t" > /sys/fs/resctrl/info/L3_MON/mbm_assign_control
>> +
>> + Assignment status after the update:
>> + # cat /sys/fs/resctrl/info/L3_MON/mbm_assign_control
>> + non_default_ctrl_mon_grp//0=tl;1=tl;
>> + non_default_ctrl_mon_grp/child_non_default_mon_grp/0=tl;1=tl;
>> + //0=t;1=tl;
>> + /child_default_mon_grp/0=tl;1=tl;
>> +
>> + To update the MON group child_default_mon_grp to remove total MBM event on domain 1:
>> + # echo "/child_default_mon_grp/1-t" > /sys/fs/resctrl/info/L3_MON/mbm_assign_control
>> +
>> + Assignment status after the update:
>> + $ cat /sys/fs/resctrl/info/L3_MON/mbm_assign_control
>> + non_default_ctrl_mon_grp//0=tl;1=tl;
>> + non_default_ctrl_mon_grp/child_non_default_mon_grp/0=tl;1=tl;
>> + //0=t;1=tl;
>> + /child_default_mon_grp/0=tl;1=l;
>> +
>> + To update the MON group non_default_ctrl_mon_grp/child_non_default_mon_grp to
>> + unassign both local and total MBM events on domain 1:
>> + # echo "non_default_ctrl_mon_grp/child_non_default_mon_grp/1=_" >
>> + /sys/fs/resctrl/info/L3_MON/mbm_assign_control
>> +
>> + Assignment status after the update:
>> + non_default_ctrl_mon_grp//0=tl;1=tl;
>> + non_default_ctrl_mon_grp/child_non_default_mon_grp/0=tl;1=_;
>> + //0=t;1=tl;
>> + /child_default_mon_grp/0=tl;1=l;
>> +
>> + To update the default group to add a local MBM event domain 0.
>> + # echo "//0+l" > /sys/fs/resctrl/info/L3_MON/mbm_assign_control
>> +
>> + Assignment status after the update:
>> + # cat /sys/fs/resctrl/info/L3_MON/mbm_assign_control
>> + non_default_ctrl_mon_grp//0=tl;1=tl;
>> + non_default_ctrl_mon_grp/child_non_default_mon_grp/0=tl;1=_;
>> + //0=tl;1=tl;
>> + /child_default_mon_grp/0=tl;1=l;
>> +
>> + To update the non default CTRL_MON group non_default_ctrl_mon_grp to unassign all
>> + the MBM events on all the domains.
>> + # echo "non_default_ctrl_mon_grp//*=_" > /sys/fs/resctrl/info/L3_MON/mbm_assign_control
>> +
>> + Assignment status after the update:
>> + #cat /sys/fs/resctrl/info/L3_MON/mbm_assign_control
>> + non_default_ctrl_mon_grp//0=_;1=_;
>> + non_default_ctrl_mon_grp/child_non_default_mon_grp/0=tl;1=_;
>> + //0=tl;1=tl;
>> + /child_default_mon_grp/0=tl;1=l;
>> +
>> "max_threshold_occupancy":
>> Read/write file provides the largest value (in
>> bytes) at which a previously used LLC_occupancy
>
> ...
>
>> +static int rdtgroup_process_flags(struct rdt_resource *r,
>> + enum rdt_group_type rtype,
>> + char *p_grp, char *c_grp, char *tok)
>> +{
>> + int op, mon_state, assign_state, unassign_state;
>> + char *dom_str, *id_str, *op_str;
>> + struct rdt_mon_domain *d;
>> + struct rdtgroup *rdtgrp;
>> + unsigned long dom_id;
>> + int ret, found = 0;
>> +
>> + rdtgrp = rdtgroup_find_grp_by_name(rtype, p_grp, c_grp);
>> +
>> + if (!rdtgrp) {
>> + rdt_last_cmd_puts("Not a valid resctrl group\n");
>> + return -EINVAL;
>> + }
>> +
>> +next:
>> + if (!tok || tok[0] == '\0')
>> + return 0;
>> +
>> + /* Start processing the strings for each domain */
>> + dom_str = strim(strsep(&tok, ";"));
>> +
>> + op_str = strpbrk(dom_str, "=+-");
>> +
>> + if (op_str) {
>> + op = *op_str;
>> + } else {
>> + rdt_last_cmd_puts("Missing operation =, +, -, _ character\n");
>
> "_" is not an operation.
Sure. Will remove this charactor.
>
>> + return -EINVAL;
>> + }
>> +
>> + id_str = strsep(&dom_str, "=+-");
>> +
>> + /* Check for domain id '*' which means all domains */
>> + if (id_str && *id_str == '*') {
>> + d = NULL;
>> + goto check_state;
>> + } else if (!id_str || kstrtoul(id_str, 10, &dom_id)) {
>> + rdt_last_cmd_puts("Missing domain id\n");
>> + return -EINVAL;
>> + }
>> +
>> + /* Verify if the dom_id is valid */
>> + list_for_each_entry(d, &r->mon_domains, hdr.list) {
>> + if (d->hdr.id == dom_id) {
>> + found = 1;
>> + break;
>> + }
>> + }
>> +
>> + if (!found) {
>> + rdt_last_cmd_printf("Invalid domain id %ld\n", dom_id);
>> + return -EINVAL;
>> + }
>> +
>> +check_state:
>> + mon_state = rdtgroup_str_to_mon_state(dom_str);
>> +
>> + if (mon_state == ASSIGN_INVALID) {
>> + rdt_last_cmd_puts("Invalid assign flag\n");
>> + goto out_fail;
>> + }
>> +
>> + assign_state = 0;
>> + unassign_state = 0;
>> +
>> + switch (op) {
>> + case '+':
>> + if (mon_state == ASSIGN_NONE) {
>> + rdt_last_cmd_puts("Invalid assign opcode\n");
>> + goto out_fail;
>> + }
>> + assign_state = mon_state;
>> + break;
>> + case '-':
>> + if (mon_state == ASSIGN_NONE) {
>> + rdt_last_cmd_puts("Invalid assign opcode\n");
>> + goto out_fail;
>> + }
>> + unassign_state = mon_state;
>> + break;
>> + case '=':
>> + assign_state = mon_state;
>> + unassign_state = (ASSIGN_TOTAL | ASSIGN_LOCAL) & ~assign_state;
>> + break;
>> + default:
>> + break;
>> + }
>> +
>> + if (assign_state & ASSIGN_TOTAL) {
>> + ret = rdtgroup_assign_cntr(r, rdtgrp, d, QOS_L3_MBM_TOTAL_EVENT_ID);
>
> hmmm ... wasn't unassign going to happen first? That would potentially make counters
> available to help subsequent assign succeed.
Good point. I will change the order.
>
>> + if (ret)
>> + goto out_fail;
>> + }
>> +
>> + if (assign_state & ASSIGN_LOCAL) {
>> + ret = rdtgroup_assign_cntr(r, rdtgrp, d, QOS_L3_MBM_LOCAL_EVENT_ID);
>> + if (ret)
>> + goto out_fail;
>> + }
>> +
>> + if (unassign_state & ASSIGN_TOTAL) {
>> + ret = rdtgroup_unassign_cntr(r, rdtgrp, d, QOS_L3_MBM_TOTAL_EVENT_ID);
>> + if (ret)
>> + goto out_fail;
>> + }
>> +
>> + if (unassign_state & ASSIGN_LOCAL) {
>> + ret = rdtgroup_unassign_cntr(r, rdtgrp, d, QOS_L3_MBM_LOCAL_EVENT_ID);
>> + if (ret)
>> + goto out_fail;
>> + }
>> +
>> + goto next;
>> +
>> +out_fail:
>> +
>> + return -EINVAL;
>> +}
>> +
>
> Reinette
>
>
Thanks
--
- Babu Moger
next prev parent reply other threads:[~2024-09-27 17:47 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-04 22:21 [PATCH v7 00/24] x86/resctrl : Support AMD Assignable Bandwidth Monitoring Counters (ABMC) Babu Moger
2024-09-04 22:21 ` [PATCH v7 01/24] x86/cpufeatures: Add support for " Babu Moger
2024-09-04 22:21 ` [PATCH v7 02/24] x86/resctrl: Add ABMC feature in the command line options Babu Moger
2024-09-19 16:00 ` Reinette Chatre
2024-09-23 14:21 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 03/24] x86/resctrl: Consolidate monitoring related data from rdt_resource Babu Moger
2024-09-19 16:03 ` Reinette Chatre
2024-09-04 22:21 ` [PATCH v7 04/24] x86/resctrl: Detect Assignable Bandwidth Monitoring feature details Babu Moger
2024-09-19 16:16 ` Reinette Chatre
2024-09-23 14:37 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 05/24] x86/resctrl: Introduce resctrl_file_fflags_init() to initialize fflags Babu Moger
2024-09-04 22:21 ` [PATCH v7 06/24] x86/resctrl: Add support to enable/disable AMD ABMC feature Babu Moger
2024-09-19 16:22 ` Reinette Chatre
2024-09-23 15:30 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 07/24] x86/resctrl: Introduce the interface to display monitor mode Babu Moger
2024-09-19 16:28 ` Reinette Chatre
2024-09-23 16:01 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 08/24] x86/resctrl: Introduce interface to display number of monitoring counters Babu Moger
2024-09-19 16:32 ` Reinette Chatre
2024-09-23 16:23 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 09/24] x86/resctrl: Introduce bitmap mbm_cntr_free_map to track assignable counters Babu Moger
2024-09-19 16:42 ` Reinette Chatre
2024-09-23 18:33 ` Moger, Babu
2024-09-23 22:28 ` Reinette Chatre
2024-09-24 13:58 ` Moger, Babu
2024-09-24 16:25 ` Peter Newman
2024-09-24 17:01 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 10/24] x86/resctrl: Introduce mbm_total_cfg and mbm_local_cfg in struct rdt_hw_mon_domain Babu Moger
2024-09-19 16:51 ` Reinette Chatre
2024-09-23 18:43 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 11/24] x86/resctrl: Remove MSR reading of event configuration value Babu Moger
2024-09-19 16:55 ` Reinette Chatre
2024-09-23 18:45 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 12/24] x86/resctrl: Introduce mbm_cntr_map to track counters at domain Babu Moger
2024-09-04 22:21 ` [PATCH v7 13/24] x86/resctrl: Add data structures and definitions for ABMC assignment Babu Moger
2024-09-19 17:08 ` Reinette Chatre
2024-09-23 20:21 ` Moger, Babu
2024-09-23 22:30 ` Reinette Chatre
2024-09-24 14:51 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 14/24] x86/resctrl: Introduce cntr_id in mongroup for assignments Babu Moger
2024-09-04 22:21 ` [PATCH v7 15/24] x86/resctrl: Implement resctrl_arch_assign_cntr to assign a counter with ABMC Babu Moger
2024-09-19 17:13 ` Reinette Chatre
2024-09-23 21:03 ` Moger, Babu
2024-09-23 22:29 ` Reinette Chatre
2024-09-24 14:07 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 16/24] x86/resctrl: Add the interface to assign/update counter assignment Babu Moger
2024-09-19 17:20 ` Reinette Chatre
2024-09-26 16:28 ` Moger, Babu
2024-09-26 16:46 ` Reinette Chatre
2024-09-26 16:59 ` Moger, Babu
2024-09-27 1:48 ` Reinette Chatre
2024-09-04 22:21 ` [PATCH v7 17/24] x86/resctrl: Add the interface to unassign a MBM counter Babu Moger
2024-09-19 17:26 ` Reinette Chatre
2024-09-26 16:56 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 18/24] x86/resctrl: Auto Assign/unassign counters when mbm_cntr_assign is enabled Babu Moger
2024-09-19 17:29 ` Reinette Chatre
2024-09-26 18:48 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 19/24] x86/resctrl: Report "Unassigned" for MBM events in mbm_cntr_assign mode Babu Moger
2024-09-19 17:31 ` Reinette Chatre
2024-09-26 19:16 ` Moger, Babu
2024-09-27 1:50 ` Reinette Chatre
2024-09-27 13:40 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 20/24] x86/resctrl: Introduce the interface to switch between monitor modes Babu Moger
2024-09-19 17:38 ` Reinette Chatre
2024-09-26 19:39 ` Moger, Babu
2024-09-27 1:51 ` Reinette Chatre
2024-09-27 13:26 ` Moger, Babu
2024-09-27 15:07 ` Reinette Chatre
2024-09-04 22:21 ` [PATCH v7 21/24] x86/resctrl: Configure mbm_cntr_assign mode if supported Babu Moger
2024-09-19 17:43 ` Reinette Chatre
2024-09-27 14:37 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 22/24] x86/resctrl: Update assignments on event configuration changes Babu Moger
2024-09-19 17:45 ` Reinette Chatre
2024-09-27 16:22 ` Moger, Babu
2024-10-02 18:20 ` Reinette Chatre
2024-10-04 0:51 ` Moger, Babu
2024-10-04 2:17 ` Reinette Chatre
2024-10-04 15:02 ` Moger, Babu
2024-10-04 15:53 ` Reinette Chatre
2024-10-08 0:01 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 23/24] x86/resctrl: Introduce interface to list assignment states of all the groups Babu Moger
2024-09-19 17:53 ` Reinette Chatre
2024-09-27 17:06 ` Moger, Babu
2024-09-04 22:21 ` [PATCH v7 24/24] x86/resctrl: Introduce interface to modify assignment states of " Babu Moger
2024-09-19 17:59 ` Reinette Chatre
2024-09-27 17:47 ` Moger, Babu [this message]
2024-10-02 18:19 ` Reinette Chatre
2024-10-04 1:11 ` Moger, Babu
2024-10-04 2:17 ` Reinette Chatre
2024-10-04 16:38 ` Moger, Babu
2024-10-04 16:52 ` Reinette Chatre
2024-10-04 19:36 ` Moger, Babu
2024-10-04 21:09 ` Reinette Chatre
2024-10-05 0:23 ` Moger, Babu
2024-09-19 18:00 ` [PATCH v7 00/24] x86/resctrl : Support AMD Assignable Bandwidth Monitoring Counters (ABMC) Reinette Chatre
2024-09-27 18:11 ` 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=c43171f4-48c6-b6c3-d71e-1f23367932d7@amd.com \
--to=bmoger@amd.com \
--cc=babu.moger@amd.com \
--cc=bp@alien8.de \
--cc=corbet@lwn.net \
--cc=daniel.sneddon@linux.intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=eranian@google.com \
--cc=fenghua.yu@intel.com \
--cc=hpa@zytor.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=james.morse@arm.com \
--cc=jithu.joseph@intel.com \
--cc=jmattson@google.com \
--cc=jpoimboe@kernel.org \
--cc=kai.huang@intel.com \
--cc=kan.liang@linux.intel.com \
--cc=kim.phillips@amd.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=leitao@debian.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lukas.bulwahn@gmail.com \
--cc=maciej.wieczor-retman@intel.com \
--cc=mingo@redhat.com \
--cc=paulmck@kernel.org \
--cc=pbonzini@redhat.com \
--cc=peternewman@google.com \
--cc=peterz@infradead.org \
--cc=rdunlap@infradead.org \
--cc=reinette.chatre@intel.com \
--cc=rick.p.edgecombe@intel.com \
--cc=sandipan.das@amd.com \
--cc=seanjc@google.com \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=x86@kernel.org \
--cc=yanjiewtw@gmail.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®