Re: [PATCH v11 00/23] x86/resctrl : Support AMD Assignable Bandwidth Monitoring Counters (ABMC)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Reinette,

On 3/19/25 13:36, Reinette Chatre wrote:
> Hi Babu,
> 
> On 3/14/25 9:18 AM, Moger, Babu wrote:
>> On 3/13/2025 4:21 PM, Reinette Chatre wrote:
>>> On 3/13/25 1:13 PM, Moger, Babu wrote:
>>>> On 3/13/25 11:08, Reinette Chatre wrote:
>>>>> On 3/12/25 11:14 AM, Moger, Babu wrote:
>>>>>> On 3/12/25 12:14, Reinette Chatre wrote:
>>>>>>> On 3/12/25 9:03 AM, Moger, Babu wrote:
>>>>>>>> On 3/12/25 10:07, Reinette Chatre wrote:
>>>
>>>
>>>> Here are the steps. Just copying steps from Peters proposal.
>>>> https://lore.kernel.org/lkml/CALPaoCiii0vXOF06mfV=kVLBzhfNo0SFqt4kQGwGSGVUqvr2Dg@xxxxxxxxxxxxxx/
>>>
>>> Thank you very much for detailing the steps. It is starting the fall into place
>>> for me.
>>>
>>>>
>>>>
>>>> 1. Mount the resctrl
>>>>     mount -t resctrl resctrl /sys/fs/resctrl
>>>
>>> I assume that on ABMC system the plan remains to have ABMC enabled by default, which
>>> will continue to depend on BMEC.
>>
>> Yes. ABMC will be enabled by default. ABMC will use the configurations from info/L3_MON/counter_configs. ABMC will not depend on BMEC.
> 
> I see. The previous dependency was thus just something enforced by OS to support the
> chosen implementation? 

Yes. That is correct. We went that route mainly not to change the
rmid_read operation.

With ABMC, we need to set Extended EVTID and ABMC bit in QM_EVTSEL
register while reading the cntr_id events. Will add those patches in next
version to make it clear.

> Looks like the two features share some registers.
> 
>>
>>> How would the existing BMEC implementation be impacted in this case?
>>
>> BMEC will only work with pre-ABMC(or default) mode.
> 
> ok. Does this mean that if a user boots kernel with "rdt=!bmec" then ABMC will keep working?

Yes. That is correct.

> 
> 
>>> Without any changes to BMEC support the mbm_total_bytes_config and mbm_local_bytes_config
>>> files will remain and user space may continue to use them to change the event
>>> configurations with confusing expecations/results on an ABMC system.
>>>
>>> One possibility may be that a user may see below on ABMC system even if BMEC is supported:
>>> # cat /sys/fs/resctrl/info/L3_MON/mon_features
>>> llc_occupancy
>>> mbm_total_bytes
>>> mbm_local_bytes
>>>
>>> With the above a user cannot be expected to want to interact with mbm_total_bytes_config
>>> and mbm_local_bytes_config, which may be the simplest to do.
>>
>> yes.
>>
>>>
>>> To follow that, we should also consider how "mon_features" will change with this
>>> implementation.
>>
>> May be
>>
>> # cat /sys/fs/resctrl/info/L3_MON/mon_features
>>  llc_occupancy
>>  mbm_total_bytes
>>  mbm_local_bytes
>>  counter_configs/mbm_total_bytes/event_filter
>>  counter_configs/mbm_local_bytes/event_filter
>>
> 
> I read the docs again to understand what kind of flexibility we have here. As I interpret it
> the "mon_features" is associated with "events" and there is a clear documented association
> between the "events" listed in this file and which files a user can expect to exist in the
> "mon_data" directory. Considering this I think it may be helpful to provide the
> counter configurations in this file. This matches well with mbm_total_bytes/mbm_local_bytes
> being treated as "counter configurations".
> 
> Whether counter configuration is supported could be determined by existence of
> the "counter_configs" directory?
> 
> For example,
> # cat /sys/fs/resctrl/info/L3_MON/mon_features
>  llc_occupancy
>  mbm_total_bytes
>  mbm_local_bytes
> 
> # mkdir /sys/fs/resctrl/info/L3_MON/counter_configs/only_read_fills
> 
> # cat /sys/fs/resctrl/info/L3_MON/mon_features
>  llc_occupancy
>  mbm_total_bytes
>  mbm_local_bytes
>  only_read_fills
> 
> This could possibly be a way to support user interface when configuring the
> counter. For example, a user may easily create a new counter configuration
> by creating a directory, but there may be some requirements wrt its configuration
> that need to be met before that configuration/event may appear in the
> "mon_features" file.

Yes. I am fine with this approach.

> 
>>>> 2. When ABMC is supported two default configurations will be created.
>>>>
>>>>    a. info/L3_MON/counter_configs/mbm_total_bytes/event_filter
>>>>    b. info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>>>
>>>>    These files will be populated with default total and local events
>>>>    # cat info/L3_MON/counter_configs/mbm_total_bytes/event_filter
>>>>      VictimBW
>>>>      RmtSlowFill
>>>>      RmtNTWr
>>>>      RmtFill
>>>>      LclFill
>>>>      LclNTWr
>>>>      LclSlowFill
>>>
>>> Looks good. Here we could perhaps start nitpicking about naming and line separation.
>>> I think it may be easier if the fields are separated by comma, but more on that
>>> below ...
>>>
>>>>
>>>>    # cat info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>>>     LclFill,
>>>>     LclNTWr
>>>>     LclSlowFill
>>>>
>>>> 3. Users will have options to update the event configuration.
>>>>     echo LclFill > info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>>
>>> We need to be clear on how user space interacts with this file. For example,
>>> can user space "append" configurations? Specifically, if the file has
>>> contents like your earlier example:
>>> # cat info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>>   LclFill
>>>   LclNTWr
>>>   LclSlowFill
>>>
>>> Should above be created with (note "append" needed for second and third):
>>> echo LclFill > info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>> echo LclNTWr >> info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>> echo LclSlowFill >> info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>>
>>> Is it possible to set multiple configurations in one write like below?
>>> echo "LclFill,LclNTWr,LclSlowFill" > info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>
>> Yes. We should support that.
> 
> Reading Peter's response (https://lore.kernel.org/lkml/CALPaoCj7aSVxHisQTdKQ5KN0-aNzN8rRkRPVc7pjGMLSxfPvrA@xxxxxxxxxxxxxx/)
> it sounds as though this part is now in the fine-tuning phase.
> If there are other formats that is more convenient for user space then we should surely
> consider that.

I aggee. We can revise it further as we review.

> 
>>
>>>
>>> (note above where it may be easier for user space to use comma (or some other field separator)
>>> when providing multiple configurations at a time, with this, to match, having output in
>>> commas may be easier since it makes user interface copy&paste easier)
>>>
>>> If file has content like:
>>> # cat info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>>   LclNTWr
>>>   LclSlowFill
>>>
>>> What is impact of the following:
>>> echo LclFill > info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>>
>>> Is it (append):
>>> # cat info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>>   LclFill
>>>   LclNTWr
>>>   LclSlowFill
>>>
>>> or (overwrite):
>>> # cat info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>>   LclFill
>>>
>>> I do think the interface will be more intuitive it if follows regular file
>>> operations wrt "append" and such. I have not looked into how kernfs supports
>>> "append".
>>
>> Just searching quickly, I have not seen any append operations on kernfs.
>>
>>
>>> As alternative, we can try to work the previous mbm_assign_control syntax in here (use + and -).
>>>
>>> For example:
>>>
>>> # cat info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>> LclNTWr
>>> # echo "+LclFill,-LclNTWr,+LclSlowFill" > info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>> # cat info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>> LclFill,LclSlowFill
>>>
>>> With something like above resctrl just deals with file writes as before.
>>
>> Or without complicating much we can just support basic operations.
>>
>> # cat info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>   LclFill, LclNTWr, LclSlowFill
>>
>> # echo "LclFill, LclNTWr, LclSlowFill, VictimBW" > info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>
>> # cat info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>   LclFill, LclNTWr, LclSlowFill, VictimBW
>>
>> # echo "LclFill, LclNTWr" > info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>
>> # cat info/L3_MON/counter_configs/mbm_local_bytes/event_filter
>>   LclFill, LclNTWr
>>
> 
> Looks good to me. As I see it this could be expanded to support "append" if needed.

thanks.

> 
>>>
>>>
>>>>
>>>> 4. As usual the events can be read from the mon_data directories.
>>>>     #mkdir /sys/fs/resctrl/test
>>>>     #cd   /sys/fs/resctr/test
>>>>     #cat  test/mon_data/mon_data/mon_L3_00/mbm_tota_bytes
>>>>     101010
>>>>     #cat   test/mon_data/mon_data/mon_L3_00/mbm_local_bytes
>>>>     32323
>>>>
>>>> 5. There will be 3 files created in each group's mon_data directory when
>>>> ABMC is supported.
>>>>
>>>>     a. test/mon_data/mon_L3_00/assign_exclusive
>>>>     b. test/mon_data/mon_L3_00/assign_shared
>>>>     c. test/mon_data/mon_L3_00/unassign
>>>>
>>>>
>>>> 6. Events can be assigned/unassigned by these commands
>>>>
>>>>   # echo mbm_total_bytes > test/mon_data/mon_L3_00/assign_exclusive
>>>>   # echo mbm_local_bytes > test/mon_data/mon_L3_01/assign_exclusive
>>>>   # echo mbm_local_bytes > test/mon_data/mon_L3_01/unassign
>>>>
>>>>
>>>> Note:
>>>> I feel 3 files are excessive here. We can probably achieve everything in
>>>> just one file.
>>>
>>> Could you please elaborate what your concern is? You mention that it is
>>> excessive but it is not clear to me what issues may arise by
>>> having three files instead of one.
>>
>> All these 3 properties are mutually exclusive. Only one can true at a time. Example:
>> #cat assign_exclusive
>> 0
>> #cat assign_shared
>> 0
>> #cat uassigned
>> 1
>>
>> Three operations to find out the assign state.
> 
> ah - good point.
> 
>>
>> Instead of that
>> #cat mon_l3_assignments
>> unassigned
>>
>>
>>>
>>> I do think, and Peter also mentioned [1] this, that it may be useful,
>>> to "put a group/resource-scoped assign_* file higher in the hierarchy
>>> to make it easier for users who want to configure all domains the
>>> same for a group."
>>>
>>> Placing *additional* files higher in hierarchy (used to manage counters in all
>>> domains) may be more useful that trying to provide the shared/exclusive/unassign
>>> in one file per domain.
>>
>> Yea. To make it better we can add "mon_l3_assignments" in groups main directory. We can do all the operation in just one file.
>>
>> https://lore.kernel.org/lkml/efb5293f-b0ef-4c94-bf10-9ca7ebb3b53f@xxxxxxx/
> 
> I am hesitant to respond to that message considering the corporate preamble that
> sneaked in so I'll just add some thoughts here:

Yea. I noticed it later. Will take care next time.

> 
> Having the file higher in hierarchy does seem more useful. It may be useful to reduce
> amount of parsing to get to needed information. Compare with below two examples that can
> be used to convey the same information:
> 
> # cat /sys/fs/resctrl/test/mon_L3_assignments
> mbm_total_bytes: 0=unassigned; 1=unassigned
> mbm_local_bytes: 0=unassigned; 1=unassigned
> 
> #cat /sys/fs/resctrl/test/mon_L3_assignments
> 0=_; 1=_
> 
> We need to take care that it is always clear what "0" or "1" means ...
> Tony has been mentioning a lot of interesting things about scope
> changes. I assume the "L3" in mon_L3_assignments will dictate the scope?

I didnt think about the scope here. I was thinking of changing it to
"mbm_assignments".

> 
> With a syntax like above the needed information can be presented in one line.
> For example,
> 
> #cat /sys/fs/resctrl/test/mon_L3_assignments
> 0=mbm_total_bytes; 1=mbm_local_bytes
> 
> The caveat is that is only for assigned counters, not shared, so this needs
> to change.
> 
> To support shared assignment ...  I wonder if it will be useful to users to
> get the information on which other monitor groups the counter is shared _with_?
> 
> Some examples:
> 
> a) Just indicate whether a counter is shared or dedicated. (Introduce flags).
> #cat /sys/fs/resctrl/test/mon_L3_assignments
> 0=mbm_total_bytes:s; 1=mbm_local_bytes:d
> 
> b) Indicate which groups a counter is shared with:
> #cat /sys/fs/resctrl/testA/mon_L3_assignments
> 0=mbm_total_bytes:s(testB); 1=mbm_local_bytes:d(not needed but perhaps empty for consistent interface?)
> #cat /sys/fs/resctrl/testB/mon_L3_assignments
> 0=mbm_total_bytes:s(testA); 1=mbm_local_bytes:d(?)

This format does not tell what is going on with all other domains. We need
to display all the domains. I think that is important because users need
to know what to expect reading the events on specific domains.

I think we need to convey all the following information to the user.

1. Event Configuation: What is event configuration applied here?

2. Domains: To which all the domains the configaration is applied?
   This is useful in multi-domain configuration.
   We also need to know if which domains are assigned or unassigned.

3. Type of assignment: Exclusive(e or d) or Shared(s) or Unassigned(_)

4. Finally: Where to read the events?
 This is important when we add "mkdir" support in the future,
mon_data/mon_l3_*/config_name will be created.


With that in mind this might be helpful.

# cat /sys/fs/resctrl/test/mon_L3_assignments
mbm_total_bytes: 0=e; 1=_
mbm_local_bytes: 0=_; 1=s

This format tells the user all the information.
mbm_total_bytes and mbm_local_bytes configurations are applied and
configuration are coming from counter_configs.

User can read the events in
mon_data/mon_L3_*/mbm_total_bytes
mon_data/mon_L3_*/mbm_local_bytes

mbm_total_bytes is assigned on domain 0 and not on domain 1.
Reading the mbm_total_bytes on domain 1 will report "unassigned".

mbm_local_bytes is not assigned on domain 0 and assigned on domain 1.
Reading the mbm_local_bytes on domain 0 will report "unassigned".

I dont have much information on shared assignment at this point. Dont know
if we can display shared group.

> 
> ... (b) may just be overkill and we should instead follow Tony's
> guideline (see https://lore.kernel.org/lkml/Z9CiwLrhuTODruCj@agluck-desk3/ )
> that users should be able to keep track themselves.
> 
> Reinette
> 

-- 
Thanks
Babu Moger




[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux