From: Peter Newman <peternewman@google.com>
To: Fenghua Yu <fenghua.yu@intel.com>,
Reinette Chatre <reinette.chatre@intel.com>
Cc: Babu Moger <babu.moger@amd.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
Stephane Eranian <eranian@google.com>,
James Morse <james.morse@arm.com>,
linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
Peter Newman <peternewman@google.com>
Subject: [PATCH v1 7/9] x86/resctrl: Assign HW RMIDs to CPUs for soft RMID
Date: Fri, 21 Apr 2023 16:17:21 +0200 [thread overview]
Message-ID: <20230421141723.2405942-8-peternewman@google.com> (raw)
In-Reply-To: <20230421141723.2405942-1-peternewman@google.com>
To implement soft RMIDs, each CPU needs a HW RMID that is unique within
its L3 cache domain. This is the minimum number of RMIDs needed to
monitor all CPUs.
This is accomplished by determining the rank of each CPU's mask bit
within its L3 shared_cpu_mask in resctrl_online_cpu().
Signed-off-by: Peter Newman <peternewman@google.com>
---
arch/x86/kernel/cpu/resctrl/core.c | 39 +++++++++++++++++++++++++++++-
1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c
index 47b1c37a81f8..b0d873231b1e 100644
--- a/arch/x86/kernel/cpu/resctrl/core.c
+++ b/arch/x86/kernel/cpu/resctrl/core.c
@@ -596,6 +596,38 @@ static void domain_remove_cpu(int cpu, struct rdt_resource *r)
}
}
+/* Assign each CPU an RMID that is unique within its cache domain. */
+static u32 determine_hw_rmid_for_cpu(int cpu)
+{
+ struct cpu_cacheinfo *ci = get_cpu_cacheinfo(cpu);
+ struct cacheinfo *l3ci = NULL;
+ u32 rmid;
+ int i;
+
+ /* Locate the cacheinfo for this CPU's L3 cache. */
+ for (i = 0; i < ci->num_leaves; i++) {
+ if (ci->info_list[i].level == 3 &&
+ (ci->info_list[i].attributes & CACHE_ID)) {
+ l3ci = &ci->info_list[i];
+ break;
+ }
+ }
+ WARN_ON(!l3ci);
+
+ if (!l3ci)
+ return 0;
+
+ /* Use the position of cpu in its shared_cpu_mask as its RMID. */
+ rmid = 0;
+ for_each_cpu(i, &l3ci->shared_cpu_map) {
+ if (i == cpu)
+ break;
+ rmid++;
+ }
+
+ return rmid;
+}
+
static void clear_closid_rmid(int cpu)
{
struct resctrl_pqr_state *state = this_cpu_ptr(&pqr_state);
@@ -604,7 +636,12 @@ static void clear_closid_rmid(int cpu)
state->default_rmid = 0;
state->cur_closid = 0;
state->cur_rmid = 0;
- wrmsr(MSR_IA32_PQR_ASSOC, 0, 0);
+ state->hw_rmid = 0;
+
+ if (static_branch_likely(&rdt_soft_rmid_enable_key))
+ state->hw_rmid = determine_hw_rmid_for_cpu(cpu);
+
+ wrmsr(MSR_IA32_PQR_ASSOC, state->hw_rmid, 0);
}
static int resctrl_online_cpu(unsigned int cpu)
--
2.40.0.634.g4ca3ef3211-goog
next prev parent reply other threads:[~2023-04-21 14:18 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-21 14:17 [PATCH v1 0/9] x86/resctrl: Use soft RMIDs for reliable MBM on AMD Peter Newman
2023-04-21 14:17 ` [PATCH v1 1/9] selftests/resctrl: Verify all RMIDs count together Peter Newman
2023-04-21 14:17 ` [PATCH v1 2/9] x86/resctrl: Hold a spinlock in __rmid_read() on AMD Peter Newman
2023-05-11 21:35 ` Reinette Chatre
2023-05-12 13:23 ` Peter Newman
2023-05-12 15:23 ` Reinette Chatre
2023-04-21 14:17 ` [PATCH v1 3/9] x86/resctrl: Add resctrl_mbm_flush_cpu() to collect CPUs' MBM events Peter Newman
2023-05-11 21:37 ` Reinette Chatre
2023-05-12 13:25 ` Peter Newman
2023-05-12 15:26 ` Reinette Chatre
2023-05-15 14:42 ` Peter Newman
2023-05-17 0:05 ` Reinette Chatre
2023-12-01 20:56 ` Peter Newman
2023-12-05 21:57 ` Reinette Chatre
2023-12-06 0:33 ` Peter Newman
2023-12-06 1:46 ` Reinette Chatre
2023-12-06 18:38 ` Peter Newman
2023-12-06 20:02 ` Reinette Chatre
2023-05-16 14:18 ` Peter Newman
2023-05-16 14:27 ` Peter Newman
2023-06-01 14:45 ` Peter Newman
2023-06-01 17:14 ` Reinette Chatre
2023-04-21 14:17 ` [PATCH v1 4/9] x86/resctrl: Flush MBM event counts on soft RMID change Peter Newman
2023-05-11 21:37 ` Reinette Chatre
2023-04-21 14:17 ` [PATCH v1 5/9] x86/resctrl: Call mon_event_count() directly for soft RMIDs Peter Newman
2023-05-11 21:38 ` Reinette Chatre
2023-04-21 14:17 ` [PATCH v1 6/9] x86/resctrl: Create soft RMID version of __mon_event_count() Peter Newman
2023-05-11 21:38 ` Reinette Chatre
2023-04-21 14:17 ` Peter Newman [this message]
2023-05-11 21:39 ` [PATCH v1 7/9] x86/resctrl: Assign HW RMIDs to CPUs for soft RMID Reinette Chatre
2023-05-16 14:49 ` Peter Newman
2023-05-17 0:06 ` Reinette Chatre
2023-06-06 13:31 ` Peter Newman
2023-06-06 13:36 ` Peter Newman
2023-04-21 14:17 ` [PATCH v1 8/9] x86/resctrl: Use mbm_update() to push soft RMID counts Peter Newman
2023-05-11 21:40 ` Reinette Chatre
2023-06-02 12:42 ` Peter Newman
2023-06-06 13:48 ` Peter Newman
2023-04-21 14:17 ` [PATCH v1 9/9] x86/resctrl: Add mount option to enable soft RMID Peter Newman
2023-05-11 21:41 ` 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=20230421141723.2405942-8-peternewman@google.com \
--to=peternewman@google.com \
--cc=babu.moger@amd.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=eranian@google.com \
--cc=fenghua.yu@intel.com \
--cc=hpa@zytor.com \
--cc=james.morse@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=reinette.chatre@intel.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.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