From: Reinette Chatre <reinette.chatre@intel.com>
To: Dave Martin <Dave.Martin@arm.com>
Cc: James Morse <james.morse@arm.com>, <x86@kernel.org>,
<linux-kernel@vger.kernel.org>, Fenghua Yu <fenghua.yu@intel.com>,
"Thomas Gleixner" <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "Borislav Petkov" <bp@alien8.de>,
H Peter Anvin <hpa@zytor.com>, Babu Moger <Babu.Moger@amd.com>,
<shameerali.kolothum.thodi@huawei.com>,
"D Scott Phillips OS" <scott@os.amperecomputing.com>,
<carl@os.amperecomputing.com>, <lcherian@marvell.com>,
<bobo.shaobowang@huawei.com>, <tan.shaopeng@fujitsu.com>,
<baolin.wang@linux.alibaba.com>,
Jamie Iles <quic_jiles@quicinc.com>,
Xin Hao <xhao@linux.alibaba.com>, <peternewman@google.com>,
<dfustini@baylibre.com>, <amitsinght@marvell.com>,
David Hildenbrand <david@redhat.com>,
Rex Nie <rex.nie@jaguarmicro.com>
Subject: Re: [PATCH v1 03/31] x86/resctrl: Move ctrlval string parsing policy away from the arch code
Date: Wed, 17 Apr 2024 22:34:58 -0700 [thread overview]
Message-ID: <b2595743-c7dc-4946-884f-ff159bc4865e@intel.com> (raw)
In-Reply-To: <Zh6kRMkqVpu0Km4l@e133380.arm.com>
Hi Dave
On 4/16/2024 9:16 AM, Dave Martin wrote:
> On Mon, Apr 15, 2024 at 10:44:34AM -0700, Reinette Chatre wrote:
>> Hi Dave,
>>
>> On 4/12/2024 9:16 AM, Dave Martin wrote:
>>> On Mon, Apr 08, 2024 at 08:14:47PM -0700, Reinette Chatre wrote:
>>>> On 3/21/2024 9:50 AM, James Morse wrote:
>>
>>>>> @@ -195,6 +204,14 @@ int parse_cbm(struct rdt_parse_data *data, struct resctrl_schema *s,
>>>>> return 0;
>>>>> }
>>>>>
>>>>> +static ctrlval_parser_t *get_parser(struct rdt_resource *res)
>>>>> +{
>>>>> + if (res->fflags & RFTYPE_RES_CACHE)
>>>>> + return &parse_cbm;
>>>>> + else
>>>>> + return &parse_bw;
>>>>> +}
>>>>
>>>> This is borderline ... at minimum it expands what fflags means and how it
>>>> is intended to be used and that needs to be documented because it reads:
>>>>
>>>> * @fflags: flags to choose base and info files
>>>>
>>>> I am curious why you picked fflags instead of an explicit check against
>>>> rid?
>>>>
>>>> Reinette
>>>
>>> Is fflags already somewhat overloaded? There seem to be a mix of things
>>> that are independent Boolean flags, while other things seem mutually
>>> exclusive or enum-like.
>>>
>>> Do we expect RFTYPE_RES_CACHE | RFTYPE_RES_MB ever to make sense,
>>> as David points out?
>>>
>>>
>>> With MPAM, we could in theory have cache population control and egress
>>> memory bandwidth controls on a single interconnect component.
>>>
>>> If that would always be represented through resctrl as two components
>>> with the MB controls considered one level out from the CACHE controls,
>>> then I guess these control types remain mutually exclusive from
>>> resctrl's point of view.
>>>
>>> Allowing a single rdt_resource to sprout multiple control types looks
>>> more invasive in the code, even if it logically makes sense in terms of
>>> the hardware.
>>>
>>> (I'm guessing that may have already been ruled out? Apologies if I
>>> seem to be questioning things that were decided already. That's not
>>> my intention, and James will already have thought about this in any
>>> case...)
>>>
>>>
>>> Anyway, for this patch, there seem to be a couple of assumptions:
>>>
>>> a) get_parser() doesn't get called except for rdt_resources that
>>> represent resource controls (so, fflags = RFTYPE_RES_foo for some "foo",
>>> with no other flags set), and
>>>
>>> b) there are exactly two kinds of "foo", so whatever isn't a CACHE is
>>> a BW.
>>>
>>> These assumptions seem to hold today (?)
>>
>> (c) the parser for user provided data is based on the resource type.
>>
>> As I understand (c) may not be true for MPAM that supports different
>> partitioning controls for a single resource. For example, for a cache
>> MPAM supports portion as well as maximum capacity controls that
>> I expect would need different parsers (perhaps mapping to different
>> schemata entries?) from user space but will be used to control the
>> same resource.
>>
>> I do now know if the goal is to support this MPAM capability via
>> resctrl but do accomplish this I wonder if it may not be more appropriate
>> to associate the parser with the schema entry that is presented to user space.
>>
>>> But the semantics of fflags already look a bit complicated, so I can
>>> see why it might be best to avoid anything that may add more
>>> complexity.
>>
>> ack.
>>
>>> If the main aim is to avoid silly copy-paste errors when coding up
>>> resources for a new arch, would it make sense to go for a more low-
>>> tech approach and just bundle up related fields in a macro?
>>
>> I understand this as more than avoiding copy-paste errors. I understand
>> the goal is to prevent architectures from having architecture specific
>> parsers.
>>
>>>
>>> E.g., something like:
>>>
>>> #define RDT_RESOURCE_MB_DEFAULTS \
>>> .format_str = "%d=%*u", \
>>> .fflags = RFTYPE_RES_MB, \
>>> .parse_ctrlval = parse_bw
>>>
>>> #define RDT_RESOURCE_CACHE_DEFAULTS \
>>> .format_str = "%d=%0*x", \
>>> .fflags = RFTYPE_RES_CACHE, \
>>> .parse_ctrlval = parse_cbm
>>>
>>> This isn't particularly pretty, but would at least help avoid accidents
>>> and reduce the amount of explicit boilerplate in the resource
>>> definitions.
>>>
>>> Thoughts?
>>
>> I understand the goal of this patch to make the parser something that
>> the fs code owns. This is done in support of a consistent user interface.
>> It is not clear how turning this into macros prevents arch code from
>> still overriding the parser.
>>
>> You do highlight another point though, shouldn't the fs code own the
>> format_str also? I do not think we want arch code to control the
>> print format, this is also something that should be consistent between
>> all archs and owned by fs code, again perhaps more appropriate for
>> a schema entry.
>>
>> Reinette
>
> Fair points, I guess.
>
> For the print format, I was presuming that this ought to be consistent
> with the parse format, so probably a core property too (until/unless
> someone comes up with a convincing counterexample).
>
>
> Would something like the following make sense, if you want a less
> informal approach? (Modulo minor details like naming conventions etc.)
>
>
> /* In fs/resctrl.c */
>
> struct struct resctrl_ctrl_traits {
> const char *format_str;
> ctrlval_parser_t *parse_ctrlval;
> };
>
> static const struct resctrl_ctrl_traits resource_traits[] = {
> [RESTYPE_INVALID] = {},
> [RESTYPE_MB] = {
> .format_str = "%d=%*u",
> .parse_ctrlval = parse_bw,
> },
> [RESTYPE_CACHE] = {
> .format_str = "%d=%0*x",
> .parse_ctrlval = parse_cbm,
> },
> };
It is not obvious to me that another layer is needed here. format_str
and parse_ctrlval can just be members of struct resctrl_schema?
>
> static bool is_resource(const struct rdt_resource *r)
> {
> return r->fflags & RFTYPE_RES;
> }
I do not see the usage of is_resource().
(I think we are now discussing both this patch and patch #30 here)
Here is part relevant to #30:
What I was thinking about was something like below that uses the
enum you introduce later and lets the RF flags stay internal to fs code:
rdtgroup_create_info_dir()
{
...
list_for_each_entry(s, &resctrl_schema_all, list) {
r = s->res;
if (r->res_type == RRESTYPE_CACHE)
fflags = RFTYPE_RES_CACHE;
else if (r->res_type == RRESTYPE_MB)
fflags = RFTYPE_RES_MB;
else /* fail */
fflags |= RFTYPE_CTRL_INFO;
...
}
/* same idea for monitor info files */
For this patch the resource type can be used to initialize the schema
entry.
>
>
> /* In include/linux/resctrl_types.h */
>
> +#define RFTYPE_RES BIT(8)
> -#define RFTYPE_RES_CACHE BIT(8)
> -#define RFTYPE_RES_MB BIT(9)
The goal is to not have to expose any of the RFTYPE flags internals to
the architecture. RFTYPE_RES_CACHE and RFTYPE_RES_MB stays, but is
not exposed to arch code. I do not see need for RFTYPE_RES.
All the RFTYPE flags can be defined in fs/resctrl/internal.h
>
> /* For RFTYPE_RES: */
> enum resctrl_resource_type {
> RRESTYPE_INVALID,
> RRESTYPE_MB,
> RRESTYPE_CACHE,
> };
(I find naming hard ... note the names changed from the beginning of
pseudo code to here where RESTYPE changing to RRESTYPE)
>
> /* In include/linux/resctrl.h */
>
> struct rdt_resource {
> /* ... */
>
> - const char *format_str;
> + enum resctrl_resource_type res_type;
>
> /* ... */
> };
Yes. With the above architecture code would only specify if it is
cache or memory via enum resctrl_resource_type and need not know
the individual file flags and can pick how to format and parse
data based on the resource type.
>
>
> (RRESTYPE_INVALID would just be there to catch cases where .res_type is
> not assigned.)
>
>
> James might also have other thoughts about this when he gets back...
>
> In any case, it might make sense to detach this change from this series
> if we're making more significant changes in this area than just
> splitting the code into core and arch parts.
>
> (Note also, your suggestion about indexing using rid may also work;
> I tend to assume that the mapping from rid to resource types may not be
> fixed, but maybe I'm being too strongly influenced by MPAM...)
Reinette
next prev parent reply other threads:[~2024-04-18 5:35 UTC|newest]
Thread overview: 179+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-21 16:50 [PATCH v1 00/31] x86/resctrl: Move the resctrl filesystem code to /fs/resctrl James Morse
2024-03-21 16:50 ` [PATCH v1 01/31] x86/resctrl: Fix allocation of cleanest CLOSID on platforms with no monitors James Morse
2024-04-09 3:13 ` Reinette Chatre
2024-04-11 14:13 ` Dave Martin
2024-04-09 8:05 ` David Hildenbrand
2024-04-09 15:02 ` Reinette Chatre
2024-04-09 15:06 ` David Hildenbrand
2024-04-11 15:02 ` Dave Martin
2024-04-11 14:13 ` Dave Martin
2024-04-11 17:35 ` Reinette Chatre
2024-04-12 16:17 ` Dave Martin
2024-04-15 20:27 ` Moger, Babu
2024-04-16 16:13 ` Dave Martin
2024-04-16 20:33 ` Moger, Babu
2024-03-21 16:50 ` [PATCH v1 02/31] x86/resctrl: Add a helper to avoid reaching into the arch code resource list James Morse
2024-04-09 3:13 ` Reinette Chatre
2024-04-11 14:14 ` Dave Martin
2024-04-09 8:09 ` David Hildenbrand
2024-04-11 14:13 ` Dave Martin
2024-04-15 20:28 ` Moger, Babu
2024-04-16 16:15 ` Dave Martin
2024-04-16 20:44 ` Moger, Babu
2024-04-17 14:40 ` Dave Martin
2024-03-21 16:50 ` [PATCH v1 03/31] x86/resctrl: Move ctrlval string parsing policy away from the arch code James Morse
2024-04-09 3:14 ` Reinette Chatre
2024-04-12 16:16 ` Dave Martin
2024-04-15 17:44 ` Reinette Chatre
2024-04-16 16:16 ` Dave Martin
2024-04-18 5:34 ` Reinette Chatre [this message]
2024-05-23 18:04 ` James Morse
2024-04-09 15:13 ` David Hildenbrand
2024-04-12 16:13 ` Dave Martin
2024-03-21 16:50 ` [PATCH v1 04/31] x86/resctrl: Add helper for setting CPU default properties James Morse
2024-04-09 3:15 ` Reinette Chatre
2024-04-12 16:13 ` Dave Martin
2024-04-15 17:45 ` Reinette Chatre
2024-04-16 16:16 ` Dave Martin
2024-03-21 16:50 ` [PATCH v1 05/31] x86/resctrl: Remove rdtgroup from update_cpu_closid_rmid() James Morse
2024-04-09 3:16 ` Reinette Chatre
2024-04-12 16:12 ` Dave Martin
2024-04-15 17:47 ` Reinette Chatre
2024-04-16 16:16 ` Dave Martin
2024-04-18 5:12 ` Reinette Chatre
2024-04-18 15:21 ` Dave Martin
2024-04-20 3:58 ` Reinette Chatre
2024-04-15 20:40 ` Moger, Babu
2024-04-16 16:17 ` Dave Martin
2024-03-21 16:50 ` [PATCH v1 06/31] x86/resctrl: Export resctrl fs's init function James Morse
2024-04-03 7:51 ` Shaopeng Tan (Fujitsu)
2024-04-11 14:14 ` Dave Martin
2024-04-09 3:16 ` Reinette Chatre
2024-04-11 14:14 ` Dave Martin
2024-04-11 17:36 ` Reinette Chatre
2024-03-21 16:50 ` [PATCH v1 07/31] x86/resctrl: Wrap resctrl_arch_find_domain() around rdt_find_domain() James Morse
2024-04-09 3:17 ` Reinette Chatre
2024-04-11 14:15 ` Dave Martin
2024-03-21 16:50 ` [PATCH v1 08/31] x86/resctrl: Move resctrl types to a separate header James Morse
2024-04-09 3:18 ` Reinette Chatre
2024-04-12 16:17 ` Dave Martin
2024-04-15 18:03 ` Reinette Chatre
2024-04-16 16:19 ` Dave Martin
2024-04-18 5:15 ` Reinette Chatre
2024-04-18 15:25 ` Dave Martin
2024-04-20 3:59 ` Reinette Chatre
2024-03-21 16:50 ` [PATCH v1 09/31] x86/resctrl: Add a resctrl helper to reset all the resources James Morse
2024-04-03 7:52 ` Shaopeng Tan (Fujitsu)
2024-04-12 16:17 ` Dave Martin
2024-03-21 16:50 ` [PATCH v1 10/31] x86/resctrl: Move monitor init work to a resctrl init call James Morse
2024-04-09 3:18 ` Reinette Chatre
2024-04-10 2:57 ` Shawn Wang
2024-04-11 15:35 ` Dave Martin
2024-06-05 16:40 ` James Morse
2024-03-21 16:50 ` [PATCH v1 11/31] x86/resctrl: Move monitor exit work to a restrl exit call James Morse
2024-04-09 3:19 ` Reinette Chatre
2024-04-11 14:15 ` Dave Martin
2024-04-11 17:37 ` Reinette Chatre
2024-03-21 16:50 ` [PATCH v1 12/31] x86/resctrl: Move max_{name,data}_width into resctrl code James Morse
2024-04-09 3:19 ` Reinette Chatre
2024-04-11 14:15 ` Dave Martin
2024-04-11 17:38 ` Reinette Chatre
2024-04-17 14:41 ` Dave Martin
2024-04-18 5:16 ` Reinette Chatre
2024-04-18 15:26 ` Dave Martin
2024-03-21 16:50 ` [PATCH v1 13/31] x86/resctrl: Stop using the for_each_*_rdt_resource() walkers James Morse
2024-04-09 3:19 ` Reinette Chatre
2024-04-11 14:16 ` Dave Martin
2024-03-21 16:50 ` [PATCH v1 14/31] x86/resctrl: Export the is_mbm_*_enabled() helpers to asm/resctrl.h James Morse
2024-04-09 3:20 ` Reinette Chatre
2024-04-11 14:16 ` Dave Martin
2024-03-21 16:50 ` [PATCH v1 15/31] x86/resctrl: Add resctrl_arch_is_evt_configurable() to abstract BMEC James Morse
2024-03-21 16:50 ` [PATCH v1 16/31] x86/resctrl: Change mon_event_config_{read,write}() to be arch helpers James Morse
2024-04-09 3:20 ` Reinette Chatre
2024-04-11 14:16 ` Dave Martin
2024-03-21 16:50 ` [PATCH v1 17/31] x86/resctrl: Move mbm_cfg_mask to struct rdt_resource James Morse
2024-04-09 3:21 ` Reinette Chatre
2024-04-11 14:16 ` Dave Martin
2024-04-11 17:39 ` Reinette Chatre
2024-04-17 14:41 ` Dave Martin
2024-04-18 5:18 ` Reinette Chatre
2024-04-18 15:26 ` Dave Martin
2024-06-14 13:57 ` James Morse
2024-03-21 16:50 ` [PATCH v1 18/31] x86/resctrl: Allow resctrl_arch_mon_event_config_write() to return an error James Morse
2024-04-09 3:23 ` Reinette Chatre
2024-04-11 14:17 ` Dave Martin
2024-04-11 17:39 ` Reinette Chatre
2024-04-17 14:42 ` Dave Martin
2024-04-18 5:19 ` Reinette Chatre
2024-04-18 15:31 ` Dave Martin
2024-06-14 13:57 ` James Morse
2024-03-21 16:50 ` [PATCH v1 19/31] x86/resctrl: Add resctrl_arch_ prefix to pseudo lock functions James Morse
2024-03-21 16:50 ` [PATCH v1 20/31] x86/resctrl: Allow an architecture to disable pseudo lock James Morse
2024-04-09 3:24 ` Reinette Chatre
2024-04-11 14:17 ` Dave Martin
2024-04-11 17:40 ` Reinette Chatre
2024-04-17 14:42 ` Dave Martin
2024-03-21 16:50 ` [PATCH v1 21/31] x86/resctrl: Make prefetch_disable_bits belong to the arch code James Morse
2024-03-21 16:50 ` [PATCH v1 22/31] x86/resctrl: Make resctrl_arch_pseudo_lock_fn() take a plr James Morse
2024-04-09 3:24 ` Reinette Chatre
2024-04-11 14:38 ` Dave Martin
2024-04-11 17:40 ` Reinette Chatre
2024-03-21 16:50 ` [PATCH v1 23/31] x86/resctrl: Move thread_throttle_mode_init() to be managed by resctrl James Morse
2024-03-21 16:50 ` [PATCH v1 24/31] x86/resctrl: Move get_config_index() to a header James Morse
2024-04-09 3:25 ` Reinette Chatre
2024-04-11 14:25 ` Dave Martin
2024-04-11 17:41 ` Reinette Chatre
2024-06-14 13:58 ` James Morse
2024-03-21 16:51 ` [PATCH v1 25/31] x86/resctrl: Claim get_domain_from_cpu() for resctrl James Morse
2024-03-21 16:51 ` [PATCH v1 26/31] x86/resctrl: Describe resctrl's bitmap size assumptions James Morse
2024-03-21 16:51 ` [PATCH v1 27/31] x86/resctrl: Rename resctrl_sched_in() to begin resctrl_arch_ James Morse
2024-04-09 3:26 ` Reinette Chatre
2024-04-11 14:25 ` Dave Martin
2024-04-15 20:43 ` Moger, Babu
2024-03-21 16:51 ` [PATCH v1 28/31] x86/resctrl: Drop __init/__exit on assorted symbols James Morse
2024-04-09 3:32 ` Reinette Chatre
2024-04-11 14:26 ` Dave Martin
2024-04-11 15:51 ` [EXTERNAL] " Amit Singh Tomar
2024-04-12 16:20 ` Dave Martin
2024-04-30 7:13 ` Amit Singh Tomar
2024-04-30 16:19 ` Dave Martin
2024-05-01 16:21 ` Amit Singh Tomar
2024-05-02 15:58 ` Dave Martin
2024-06-14 13:59 ` James Morse
2024-06-14 13:59 ` [EXTERNAL] " James Morse
2024-03-21 16:51 ` [PATCH v1 29/31] fs/resctrl: Add boiler plate for external resctrl code James Morse
2024-04-09 3:41 ` Reinette Chatre
2024-04-11 14:27 ` Dave Martin
2024-04-11 17:42 ` Reinette Chatre
2024-04-12 16:23 ` Dave Martin
2024-04-12 16:23 ` Dave Martin
2024-03-21 16:51 ` [PATCH v1 30/31] x86/resctrl: Move the filesystem bits to headers visible to fs/resctrl James Morse
2024-04-04 7:43 ` Shaopeng Tan (Fujitsu)
2024-04-11 14:27 ` Dave Martin
2024-04-09 3:42 ` Reinette Chatre
2024-04-11 14:28 ` Dave Martin
2024-04-11 17:43 ` Reinette Chatre
2024-04-12 16:20 ` Dave Martin
2024-04-15 18:03 ` Reinette Chatre
2024-04-17 14:42 ` Dave Martin
2024-03-21 16:51 ` [PATCH v1 31/31] x86/resctrl: Move the resctrl filesystem code to /fs/resctrl James Morse
2024-03-26 19:44 ` Fenghua Yu
2024-04-11 14:30 ` Dave Martin
2024-04-11 17:45 ` Reinette Chatre
2024-04-12 16:20 ` Dave Martin
2024-04-09 3:43 ` Reinette Chatre
2024-04-11 14:38 ` Dave Martin
2024-04-15 20:44 ` Moger, Babu
2024-04-17 14:43 ` Dave Martin
2024-06-14 13:59 ` James Morse
2024-04-09 3:13 ` [PATCH v1 00/31] " Reinette Chatre
2024-04-11 14:38 ` Dave Martin
2024-04-18 15:32 ` Dave Martin
2024-04-20 4:06 ` Reinette Chatre
2024-04-22 13:51 ` Moger, Babu
2024-04-22 16:01 ` Reinette Chatre
2024-04-22 18:35 ` Moger, Babu
2024-04-22 18:39 ` Peter Newman
2024-04-23 12:37 ` Dave Martin
2024-06-14 13:59 ` James Morse
2024-04-11 13:52 ` Dave Martin
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=b2595743-c7dc-4946-884f-ff159bc4865e@intel.com \
--to=reinette.chatre@intel.com \
--cc=Babu.Moger@amd.com \
--cc=Dave.Martin@arm.com \
--cc=amitsinght@marvell.com \
--cc=baolin.wang@linux.alibaba.com \
--cc=bobo.shaobowang@huawei.com \
--cc=bp@alien8.de \
--cc=carl@os.amperecomputing.com \
--cc=david@redhat.com \
--cc=dfustini@baylibre.com \
--cc=fenghua.yu@intel.com \
--cc=hpa@zytor.com \
--cc=james.morse@arm.com \
--cc=lcherian@marvell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peternewman@google.com \
--cc=quic_jiles@quicinc.com \
--cc=rex.nie@jaguarmicro.com \
--cc=scott@os.amperecomputing.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=tan.shaopeng@fujitsu.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=xhao@linux.alibaba.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
Powered by JetHome