From: Reinette Chatre <reinette.chatre@intel.com>
To: James Morse <james.morse@arm.com>, <x86@kernel.org>,
<linux-kernel@vger.kernel.org>
Cc: 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>,
<xingxin.hx@openanolis.org>, <baolin.wang@linux.alibaba.com>,
Jamie Iles <quic_jiles@quicinc.com>,
Xin Hao <xhao@linux.alibaba.com>, <peternewman@google.com>,
<dfustini@baylibre.com>
Subject: Re: [PATCH v4 01/24] x86/resctrl: Track the closid with the rmid
Date: Thu, 15 Jun 2023 15:01:01 -0700 [thread overview]
Message-ID: <94153d66-4c76-40c3-79ef-d2f3a3841f24@intel.com> (raw)
In-Reply-To: <20230525180209.19497-2-james.morse@arm.com>
Hi James,
On 5/25/2023 11:01 AM, James Morse wrote:
> x86's RMID are independent of the CLOSID. An RMID can be allocated,
> used and freed without considering the CLOSID.
>
> MPAM's equivalent feature is PMG, which is not an independent number,
> it extends the CLOSID/PARTID space. For MPAM, only PMG-bits worth of
> 'RMID' can be allocated for a single CLOSID.
> i.e. if there is 1 bit of PMG space, then each CLOSID can have two
> monitor groups.
>
> To allow resctrl to disambiguate RMID values for different CLOSID,
> everything in resctrl that keeps an RMID value needs to know the CLOSID
> too. This will always be ignored on x86.
>
> Tested-by: Shaopeng Tan <tan.shaopeng@fujitsu.com>
> Reviewed-by: Xin Hao <xhao@linux.alibaba.com>
> Signed-off-by: James Morse <james.morse@arm.com>
>
> ---
> Is there a better term for 'the unique identifier for a monitor group'.
> Using RMID for that here may be confusing...
>
> Changes since v1:
> * Added comment in struct rmid_entry
>
> Changes since v2:
> * Moved X86_RESCTRL_BAD_CLOSID from a subsequent patch
> ---
> arch/x86/include/asm/resctrl.h | 7 +++
> arch/x86/kernel/cpu/resctrl/internal.h | 2 +-
> arch/x86/kernel/cpu/resctrl/monitor.c | 65 ++++++++++++++---------
> arch/x86/kernel/cpu/resctrl/pseudo_lock.c | 4 +-
> arch/x86/kernel/cpu/resctrl/rdtgroup.c | 12 ++---
> include/linux/resctrl.h | 11 +++-
> 6 files changed, 64 insertions(+), 37 deletions(-)
>
> diff --git a/arch/x86/include/asm/resctrl.h b/arch/x86/include/asm/resctrl.h
> index 255a78d9d906..e906070285fb 100644
> --- a/arch/x86/include/asm/resctrl.h
> +++ b/arch/x86/include/asm/resctrl.h
> @@ -7,6 +7,13 @@
> #include <linux/sched.h>
> #include <linux/jump_label.h>
>
> +/*
> + * This value can never be a valid CLOSID, and is used when mapping a
> + * (closid, rmid) pair to an index and back. On x86 only the RMID is
> + * needed.
> + */
> +#define X86_RESCTRL_BAD_CLOSID ((u32)~0)
> +
I do not think this name is appropriate considering that it is later used
in x86 normal operation. I understand naming is complicated, could
something like X86_RESCTRL_EMPTY_CLOSID be appropriate?
> /**
> * struct resctrl_pqr_state - State cache for the PQR MSR
> * @cur_rmid: The cached Resource Monitoring ID
...
> @@ -628,7 +640,7 @@ static void mbm_update(struct rdt_resource *r, struct rdt_domain *d, int rmid)
> * the software controller explicitly.
> */
> if (is_mba_sc(NULL))
> - mbm_bw_count(rmid, &rr);
> + mbm_bw_count(closid, rmid, &rr);
> }
> }
>
> @@ -685,11 +697,11 @@ void mbm_handle_overflow(struct work_struct *work)
> d = container_of(work, struct rdt_domain, mbm_over.work);
>
> list_for_each_entry(prgrp, &rdt_all_groups, rdtgroup_list) {
> - mbm_update(r, d, prgrp->mon.rmid);
> + mbm_update(r, d, prgrp->closid, prgrp->mon.rmid);
>
> head = &prgrp->mon.crdtgrp_list;
> list_for_each_entry(crgrp, head, mon.crdtgrp_list)
> - mbm_update(r, d, crgrp->mon.rmid);
> + mbm_update(r, d, crgrp->closid, crgrp->mon.rmid);
>
> if (is_mba_sc(NULL))
> update_mba_bw(prgrp, d);
> @@ -732,10 +744,11 @@ static int dom_data_init(struct rdt_resource *r)
> }
>
> /*
> - * RMID 0 is special and is always allocated. It's used for all
> - * tasks that are not monitored.
> + * RMID 0 is special and is always allocated. It's used for the
Considering this change it may be more specific to now state that both
CLOSID 0 and RMID 0 are special.
> + * default_rdtgroup control group, which will be setup later. See
default_rdtgroup -> rdtgroup_default
> + * rdtgroup_setup_root().
> */
> - entry = __rmid_entry(0);
> + entry = __rmid_entry(0, 0);
> list_del(&entry->list);
>
> return 0;
...
> diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
> index 8334eeacfec5..7d80bae05f59 100644
> --- a/include/linux/resctrl.h
> +++ b/include/linux/resctrl.h
> @@ -225,6 +225,8 @@ void resctrl_offline_domain(struct rdt_resource *r, struct rdt_domain *d);
> * for this resource and domain.
> * @r: resource that the counter should be read from.
> * @d: domain that the counter should be read from.
> + * @closid: closid that matches the rmid. The counter may
> + * match traffic of both closid and rmid, or rmid only.
It may be helpful to be specific in the references to parameters:
closid that matches @rmid. The counter may
match traffic of both @closid and @rmid, or @rmid only.
The "counter may match" text is not specific. Can detail be added
on what decides whether a counter matches both closid and rmid, or
rmid only?
> * @rmid: rmid of the counter to read.
> * @eventid: eventid to read, e.g. L3 occupancy.
> * @val: result of the counter read in bytes.
> @@ -235,20 +237,25 @@ void resctrl_offline_domain(struct rdt_resource *r, struct rdt_domain *d);
> * 0 on success, or -EIO, -EINVAL etc on error.
> */
> int resctrl_arch_rmid_read(struct rdt_resource *r, struct rdt_domain *d,
> - u32 rmid, enum resctrl_event_id eventid, u64 *val);
> + u32 closid, u32 rmid, enum resctrl_event_id eventid,
> + u64 *val);
> +
>
> /**
> * resctrl_arch_reset_rmid() - Reset any private state associated with rmid
> * and eventid.
> * @r: The domain's resource.
> * @d: The rmid's domain.
> + * @closid: The closid that matches the rmid. Counters may match both
> + * closid and rmid, or rmid only.
Same here.
> * @rmid: The rmid whose counter values should be reset.
> * @eventid: The eventid whose counter values should be reset.
> *
> * This can be called from any CPU.
> */
> void resctrl_arch_reset_rmid(struct rdt_resource *r, struct rdt_domain *d,
> - u32 rmid, enum resctrl_event_id eventid);
> + u32 closid, u32 rmid,
> + enum resctrl_event_id eventid);
>
> /**
> * resctrl_arch_reset_rmid_all() - Reset all private state associated with
Reinette
next prev parent reply other threads:[~2023-06-15 22:01 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-25 18:01 [PATCH v4 00/24] x86/resctrl: monitored closid+rmid together, separate arch/fs locking James Morse
2023-05-25 18:01 ` [PATCH v4 01/24] x86/resctrl: Track the closid with the rmid James Morse
2023-06-15 22:01 ` Reinette Chatre [this message]
2023-05-25 18:01 ` [PATCH v4 02/24] x86/resctrl: Access per-rmid structures by index James Morse
2023-06-08 7:52 ` Shaopeng Tan (Fujitsu)
2023-06-15 22:03 ` Reinette Chatre
2023-07-28 16:34 ` James Morse
2023-05-25 18:01 ` [PATCH v4 03/24] x86/resctrl: Create helper for RMID allocation and mondata dir creation James Morse
2023-06-15 22:04 ` Reinette Chatre
2023-05-25 18:01 ` [PATCH v4 04/24] x86/resctrl: Move rmid allocation out of mkdir_rdt_prepare() James Morse
2023-06-15 22:05 ` Reinette Chatre
2023-05-25 18:01 ` [PATCH v4 05/24] x86/resctrl: Allow RMID allocation to be scoped by CLOSID James Morse
2023-06-15 22:05 ` Reinette Chatre
2023-05-25 18:01 ` [PATCH v4 06/24] x86/resctrl: Track the number of dirty RMID a CLOSID has James Morse
2023-06-15 22:08 ` Reinette Chatre
2023-07-28 16:35 ` James Morse
2023-05-25 18:01 ` [PATCH v4 07/24] x86/resctrl: Use set_bit()/clear_bit() instead of open coding James Morse
2023-05-25 18:01 ` [PATCH v4 08/24] x86/resctrl: Allocate the cleanest CLOSID by searching closid_num_dirty_rmid James Morse
2023-06-15 22:09 ` Reinette Chatre
2023-07-28 16:35 ` James Morse
2023-05-25 18:01 ` [PATCH v4 09/24] x86/resctrl: Move CLOSID/RMID matching and setting to use helpers James Morse
2023-05-25 18:01 ` [PATCH v4 10/24] tick/nohz: Move tick_nohz_full_mask declaration outside the #ifdef James Morse
2023-05-25 18:01 ` [PATCH v4 11/24] x86/resctrl: Add cpumask_any_housekeeping() for limbo/overflow James Morse
2023-06-15 22:10 ` Reinette Chatre
2023-05-25 18:01 ` [PATCH v4 12/24] x86/resctrl: Make resctrl_arch_rmid_read() retry when it is interrupted James Morse
2023-06-06 8:49 ` Peter Newman
2023-06-06 17:03 ` James Morse
2023-06-07 12:51 ` Peter Newman
2023-07-17 17:07 ` James Morse
2023-06-08 8:53 ` Peter Newman
2023-07-17 17:06 ` James Morse
2023-05-25 18:01 ` [PATCH v4 13/24] x86/resctrl: Queue mon_event_read() instead of sending an IPI James Morse
2023-06-15 22:10 ` Reinette Chatre
2023-05-25 18:01 ` [PATCH v4 14/24] x86/resctrl: Allow resctrl_arch_rmid_read() to sleep James Morse
2023-06-15 22:13 ` Reinette Chatre
2023-07-28 16:32 ` James Morse
2023-05-25 18:02 ` [PATCH v4 15/24] x86/resctrl: Allow arch to allocate memory needed in resctrl_arch_rmid_read() James Morse
2023-06-12 5:39 ` Shaopeng Tan (Fujitsu)
2023-07-28 16:34 ` James Morse
2023-06-15 22:13 ` Reinette Chatre
2023-05-25 18:02 ` [PATCH v4 16/24] x86/resctrl: Make resctrl_mounted checks explicit James Morse
2023-06-15 22:23 ` Reinette Chatre
2023-05-25 18:02 ` [PATCH v4 17/24] x86/resctrl: Move alloc/mon static keys into helpers James Morse
2023-05-25 18:02 ` [PATCH v4 18/24] x86/resctrl: Make rdt_enable_key the arch's decision to switch James Morse
2023-05-25 18:02 ` [PATCH v4 19/24] x86/resctrl: Add helpers for system wide mon/alloc capable James Morse
2023-05-25 18:02 ` [PATCH v4 20/24] x86/resctrl: Add cpu online callback for resctrl work James Morse
2023-06-15 22:23 ` Reinette Chatre
2023-05-25 18:02 ` [PATCH v4 21/24] x86/resctrl: Allow overflow/limbo handlers to be scheduled on any-but cpu James Morse
2023-06-09 11:10 ` Shaopeng Tan (Fujitsu)
2023-07-28 16:29 ` James Morse
2023-06-15 22:25 ` Reinette Chatre
2023-07-28 16:29 ` James Morse
2023-05-25 18:02 ` [PATCH v4 22/24] x86/resctrl: Add cpu offline callback for resctrl work James Morse
2023-05-25 18:02 ` [PATCH v4 23/24] x86/resctrl: Move domain helper migration into resctrl_offline_cpu() James Morse
2023-05-25 18:02 ` [PATCH v4 24/24] x86/resctrl: Separate arch and fs resctrl locks James Morse
2023-06-13 9:15 ` Peter Newman
2023-07-28 16:32 ` James Morse
2023-06-15 22:26 ` Reinette Chatre
2023-07-28 16:34 ` James Morse
2023-06-13 6:18 ` [PATCH v4 00/24] x86/resctrl: monitored closid+rmid together, separate arch/fs locking Shaopeng Tan (Fujitsu)
2023-07-28 16:34 ` James Morse
2023-06-15 23:28 ` Reinette Chatre
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=94153d66-4c76-40c3-79ef-d2f3a3841f24@intel.com \
--to=reinette.chatre@intel.com \
--cc=Babu.Moger@amd.com \
--cc=baolin.wang@linux.alibaba.com \
--cc=bobo.shaobowang@huawei.com \
--cc=bp@alien8.de \
--cc=carl@os.amperecomputing.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=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 \
--cc=xingxin.hx@openanolis.org \
/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®