mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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


  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