All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Morse <james.morse@arm.com>
To: babu.moger@amd.com, x86@kernel.org, linux-kernel@vger.kernel.org
Cc: Fenghua Yu <fenghua.yu@intel.com>,
	Reinette Chatre <reinette.chatre@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	H Peter Anvin <hpa@zytor.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
Subject: Re: [PATCH v8 00/24] x86/resctrl: monitored closid+rmid together, separate arch/fs locking
Date: Mon, 22 Jan 2024 18:06:40 +0000	[thread overview]
Message-ID: <8881fa05-e69c-6599-4925-2dc9ee83eebd@arm.com> (raw)
In-Reply-To: <b23341cb-0efb-416c-91e3-0538836af890@amd.com>

Hi Babu,

On 03/01/2024 19:42, Moger, Babu wrote:
> Hi James,
> Tested the series. Looks good.

Thanks - this was on an AMD machine right? (I've not got access to one of those, so I'm
always nervous about something I may have missed!)


Thanks,

James


> Thanks
> Babu
> 
> On 12/15/23 11:43, James Morse wrote:
>> Some of the changes this version are:
>>  * Fixed a bounds checking bug in cpumask_any_housekeeping(),
>>  * Moved the kfree() of rmid_ptrs[] later,
>>
>> Changes are noted in each patch, I've not added 'no changes' notes
>> if these need double checking anyway. I'll try again next series.
>>
>> ~
>>
>> This series does two things, it changes resctrl to call resctrl_arch_rmid_read()
>> in a way that works for MPAM, and it separates the locking so that the arch code
>> and filesystem code don't have to share a mutex. I tried to split this as two
>> series, but these touch similar call sites, so it would create more work.
>>
>> (What's MPAM? See the cover letter of the first series. [1])
>>
>> On x86 the RMID is an independent number. MPAMs equivalent is PMG, but this
>> isn't an independent number - it extends the PARTID (same as CLOSID) space
>> with bits that aren't used to select the configuration. The monitors can
>> then be told to match specific PMG values, allowing monitor-groups to be
>> created.
>>
>> But, MPAM expects the monitors to always monitor by PARTID. The
>> Cache-storage-utilisation counters can only work this way.
>> (In the MPAM spec not setting the MATCH_PARTID bit is made CONSTRAINED
>> UNPREDICTABLE - which is Arm's term to mean portable software can't rely on
>> this)
>>
>> It gets worse, as some SoCs may have very few PMG bits. I've seen the
>> datasheet for one that has a single bit of PMG space.
>>
>> To be usable, MPAM's counters always need the PARTID and the PMG.
>> For resctrl, this means always making the CLOSID available when the RMID
>> is used.
>>
>> To ensure RMID are always unique, this series combines the CLOSID and RMID
>> into an index, and manages RMID based on that. For x86, the index and RMID
>> would always be the same.
>>
>>
>> Currently the architecture specific code in the cpuhp callbacks takes the
>> rdtgroup_mutex. This means the filesystem code would have to export this
>> lock, resulting in an ill-defined interface between the two, and the possibility
>> of cross-architecture lock-ordering head aches.
>>
>> The second part of this series adds a domain_list_lock to protect writes to the
>> domain list, and protects the domain list with RCU - or cpus_read_lock().
>>
>> Use of RCU is to allow lockless readers of the domain list. To get MPAMs monitors
>> working, its very likely they'll need to be plumbed up to perf. An uncore PMU
>> driver would need to be a lockless reader of the domain list.
>>
>>
>>
>> This series is based on v6.7-rc2, and can be retrieved from:
>> https://git.kernel.org/pub/scm/linux/kernel/git/morse/linux.git mpam/monitors_and_locking/v8
>>
>> Bugs welcome,
>>
>> Thanks,
>>
>> James
>>
>> [1] https://lore.kernel.org/lkml/20210728170637.25610-1-james.morse@arm.com/
>> [v1] https://lore.kernel.org/all/20221021131204.5581-1-james.morse@arm.com/
>> [v2] https://lore.kernel.org/lkml/20230113175459.14825-1-james.morse@arm.com/
>> [v3] https://lore.kernel.org/r/20230320172620.18254-1-james.morse@arm.com/
>> [v4] https://lore.kernel.org/r/20230525180209.19497-1-james.morse@arm.com/
>> [v5] https://lore.kernel.org/lkml/20230728164254.27562-1-james.morse@arm.com/
>> [v6] https://lore.kernel.org/all/20230914172138.11977-1-james.morse@arm.com/
>> [v7] https://lore.kernel.org/r/20231025180345.28061-1-james.morse@arm.com/
>>
>> James Morse (24):
>>   tick/nohz: Move tick_nohz_full_mask declaration outside the #ifdef
>>   x86/resctrl: kfree() rmid_ptrs from resctrl_exit()
>>   x86/resctrl: Create helper for RMID allocation and mondata dir
>>     creation
>>   x86/resctrl: Move rmid allocation out of mkdir_rdt_prepare()
>>   x86/resctrl: Track the closid with the rmid
>>   x86/resctrl: Access per-rmid structures by index
>>   x86/resctrl: Allow RMID allocation to be scoped by CLOSID
>>   x86/resctrl: Track the number of dirty RMID a CLOSID has
>>   x86/resctrl: Use __set_bit()/__clear_bit() instead of open coding
>>   x86/resctrl: Allocate the cleanest CLOSID by searching
>>     closid_num_dirty_rmid
>>   x86/resctrl: Move CLOSID/RMID matching and setting to use helpers
>>   x86/resctrl: Add cpumask_any_housekeeping() for limbo/overflow
>>   x86/resctrl: Queue mon_event_read() instead of sending an IPI
>>   x86/resctrl: Allow resctrl_arch_rmid_read() to sleep
>>   x86/resctrl: Allow arch to allocate memory needed in
>>     resctrl_arch_rmid_read()
>>   x86/resctrl: Make resctrl_mounted checks explicit
>>   x86/resctrl: Move alloc/mon static keys into helpers
>>   x86/resctrl: Make rdt_enable_key the arch's decision to switch
>>   x86/resctrl: Add helpers for system wide mon/alloc capable
>>   x86/resctrl: Add CPU online callback for resctrl work
>>   x86/resctrl: Allow overflow/limbo handlers to be scheduled on any-but
>>     cpu
>>   x86/resctrl: Add CPU offline callback for resctrl work
>>   x86/resctrl: Move domain helper migration into resctrl_offline_cpu()
>>   x86/resctrl: Separate arch and fs resctrl locks
>>
>>  arch/x86/include/asm/resctrl.h            |  90 +++++
>>  arch/x86/kernel/cpu/resctrl/core.c        | 102 ++---
>>  arch/x86/kernel/cpu/resctrl/ctrlmondata.c |  48 ++-
>>  arch/x86/kernel/cpu/resctrl/internal.h    |  67 +++-
>>  arch/x86/kernel/cpu/resctrl/monitor.c     | 449 +++++++++++++++++-----
>>  arch/x86/kernel/cpu/resctrl/pseudo_lock.c |  15 +-
>>  arch/x86/kernel/cpu/resctrl/rdtgroup.c    | 359 ++++++++++++-----
>>  include/linux/resctrl.h                   |  48 ++-
>>  include/linux/tick.h                      |   9 +-
>>  9 files changed, 911 insertions(+), 276 deletions(-)
>>
> 


      reply	other threads:[~2024-01-22 18:06 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-15 17:43 [PATCH v8 00/24] x86/resctrl: monitored closid+rmid together, separate arch/fs locking James Morse
2023-12-15 17:43 ` [PATCH v8 01/24] tick/nohz: Move tick_nohz_full_mask declaration outside the #ifdef James Morse
2023-12-15 20:31   ` Thomas Gleixner
2024-01-22 18:05     ` James Morse
2023-12-15 17:43 ` [PATCH v8 02/24] x86/resctrl: kfree() rmid_ptrs from resctrl_exit() James Morse
2023-12-16  4:57   ` Reinette Chatre
2023-12-15 17:43 ` [PATCH v8 03/24] x86/resctrl: Create helper for RMID allocation and mondata dir creation James Morse
2023-12-15 17:43 ` [PATCH v8 04/24] x86/resctrl: Move rmid allocation out of mkdir_rdt_prepare() James Morse
2023-12-15 17:43 ` [PATCH v8 05/24] x86/resctrl: Track the closid with the rmid James Morse
2023-12-16  4:58   ` Reinette Chatre
2024-01-22 18:05     ` James Morse
2023-12-15 17:43 ` [PATCH v8 06/24] x86/resctrl: Access per-rmid structures by index James Morse
2023-12-16  4:58   ` Reinette Chatre
2024-01-22 18:05     ` James Morse
2023-12-15 17:43 ` [PATCH v8 07/24] x86/resctrl: Allow RMID allocation to be scoped by CLOSID James Morse
2023-12-15 17:43 ` [PATCH v8 08/24] x86/resctrl: Track the number of dirty RMID a CLOSID has James Morse
2024-01-03 19:43   ` Moger, Babu
2024-01-22 18:05     ` James Morse
2024-01-04 19:13   ` Peter Newman
2024-01-22 18:05     ` James Morse
2023-12-15 17:43 ` [PATCH v8 09/24] x86/resctrl: Use __set_bit()/__clear_bit() instead of open coding James Morse
2023-12-15 17:43 ` [PATCH v8 10/24] x86/resctrl: Allocate the cleanest CLOSID by searching closid_num_dirty_rmid James Morse
2023-12-16  5:01   ` Reinette Chatre
2024-01-22 18:06     ` James Morse
2023-12-15 17:43 ` [PATCH v8 11/24] x86/resctrl: Move CLOSID/RMID matching and setting to use helpers James Morse
2023-12-15 17:43 ` [PATCH v8 12/24] x86/resctrl: Add cpumask_any_housekeeping() for limbo/overflow James Morse
2023-12-15 17:43 ` [PATCH v8 13/24] x86/resctrl: Queue mon_event_read() instead of sending an IPI James Morse
2024-01-03 19:43   ` Moger, Babu
2024-01-22 18:06     ` James Morse
2023-12-15 17:43 ` [PATCH v8 14/24] x86/resctrl: Allow resctrl_arch_rmid_read() to sleep James Morse
2024-01-03 19:43   ` Moger, Babu
2024-01-22 18:06     ` James Morse
2023-12-15 17:43 ` [PATCH v8 15/24] x86/resctrl: Allow arch to allocate memory needed in resctrl_arch_rmid_read() James Morse
2023-12-15 17:43 ` [PATCH v8 16/24] x86/resctrl: Make resctrl_mounted checks explicit James Morse
2023-12-15 17:43 ` [PATCH v8 17/24] x86/resctrl: Move alloc/mon static keys into helpers James Morse
2023-12-15 17:43 ` [PATCH v8 18/24] x86/resctrl: Make rdt_enable_key the arch's decision to switch James Morse
2023-12-15 17:43 ` [PATCH v8 19/24] x86/resctrl: Add helpers for system wide mon/alloc capable James Morse
2024-01-03 19:43   ` Moger, Babu
2024-01-22 18:06     ` James Morse
2023-12-15 17:43 ` [PATCH v8 20/24] x86/resctrl: Add CPU online callback for resctrl work James Morse
2023-12-15 17:43 ` [PATCH v8 21/24] x86/resctrl: Allow overflow/limbo handlers to be scheduled on any-but cpu James Morse
2023-12-16  5:02   ` Reinette Chatre
2024-01-22 18:06     ` James Morse
2023-12-15 17:43 ` [PATCH v8 22/24] x86/resctrl: Add CPU offline callback for resctrl work James Morse
2023-12-15 17:43 ` [PATCH v8 23/24] x86/resctrl: Move domain helper migration into resctrl_offline_cpu() James Morse
2023-12-15 17:43 ` [PATCH v8 24/24] x86/resctrl: Separate arch and fs resctrl locks James Morse
2023-12-22 22:43 ` [PATCH v8 00/24] x86/resctrl: monitored closid+rmid together, separate arch/fs locking Carl Worth
2024-01-22 18:06   ` James Morse
2024-01-03 19:42 ` Moger, Babu
2024-01-22 18:06   ` James Morse [this message]

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=8881fa05-e69c-6599-4925-2dc9ee83eebd@arm.com \
    --to=james.morse@arm.com \
    --cc=amitsinght@marvell.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=lcherian@marvell.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peternewman@google.com \
    --cc=quic_jiles@quicinc.com \
    --cc=reinette.chatre@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.