From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: "Andrew Cooper" <andrew.cooper3@citrix.com>,
"Wei Liu" <wl@xen.org>, "Roger Pau Monné" <roger.pau@citrix.com>
Subject: [PATCH 2/4] mwait-idle: add SPR support
Date: Tue, 26 Apr 2022 12:05:07 +0200 [thread overview]
Message-ID: <722833a9-e6bf-1a63-e866-aed0648c785e@suse.com> (raw)
In-Reply-To: <4eae5ab3-361c-4eac-619c-160147220be4@suse.com>
From: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Add Sapphire Rapids Xeon support.
Up until very recently, the C1 and C1E C-states were independent, but this
has changed in some new chips, including Sapphire Rapids Xeon (SPR). In these
chips the C1 and C1E states cannot be enabled at the same time. The "C1E
promotion" bit in 'MSR_IA32_POWER_CTL' also has its semantics changed a bit.
Here are the C1, C1E, and "C1E promotion" bit rules on Xeons before SPR.
1. If C1E promotion bit is disabled.
a. C1 requests end up with C1 C-state.
b. C1E requests end up with C1E C-state.
2. If C1E promotion bit is enabled.
a. C1 requests end up with C1E C-state.
b. C1E requests end up with C1E C-state.
Here are the C1, C1E, and "C1E promotion" bit rules on Sapphire Rapids Xeon.
1. If C1E promotion bit is disabled.
a. C1 requests end up with C1 C-state.
b. C1E requests end up with C1 C-state.
2. If C1E promotion bit is enabled.
a. C1 requests end up with C1E C-state.
b. C1E requests end up with C1E C-state.
Before SPR Xeon, the 'intel_idle' driver was disabling C1E promotion and was
exposing C1 and C1E as independent C-states. But on SPR, C1 and C1E cannot be
enabled at the same time.
This patch adds both C1 and C1E states. However, C1E is marked as with the
"CPUIDLE_FLAG_UNUSABLE" flag, which means that in won't be registered by
default. The C1E promotion bit will be cleared, which means that by default
only C1 and C6 will be registered on SPR.
The next patch will add an option for enabling C1E and disabling C1 on SPR.
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Origin: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 9edf3c0ffef0
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- unstable.orig/xen/arch/x86/cpu/mwait-idle.c 2022-04-25 16:48:58.000000000 +0200
+++ unstable/xen/arch/x86/cpu/mwait-idle.c 2022-04-25 17:17:05.000000000 +0200
@@ -586,6 +586,38 @@ static const struct cpuidle_state icx_cs
{}
};
+/*
+ * On Sapphire Rapids Xeon C1 has to be disabled if C1E is enabled, and vice
+ * versa. On SPR C1E is enabled only if "C1E promotion" bit is set in
+ * MSR_IA32_POWER_CTL. But in this case there effectively no C1, because C1
+ * requests are promoted to C1E. If the "C1E promotion" bit is cleared, then
+ * both C1 and C1E requests end up with C1, so there is effectively no C1E.
+ *
+ * By default we enable C1 and disable C1E by marking it with
+ * 'CPUIDLE_FLAG_DISABLED'.
+ */
+static struct cpuidle_state __read_mostly spr_cstates[] = {
+ {
+ .name = "C1",
+ .flags = MWAIT2flg(0x00),
+ .exit_latency = 1,
+ .target_residency = 1,
+ },
+ {
+ .name = "C1E",
+ .flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_DISABLED,
+ .exit_latency = 2,
+ .target_residency = 4,
+ },
+ {
+ .name = "C6",
+ .flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED,
+ .exit_latency = 290,
+ .target_residency = 800,
+ },
+ {}
+};
+
static const struct cpuidle_state atom_cstates[] = {
{
.name = "C1E",
@@ -972,6 +1004,11 @@ static const struct idle_cpu idle_cpu_ic
.disable_promotion_to_c1e = true,
};
+static struct idle_cpu __read_mostly idle_cpu_spr = {
+ .state_table = spr_cstates,
+ .disable_promotion_to_c1e = true,
+};
+
static const struct idle_cpu idle_cpu_avn = {
.state_table = avn_cstates,
.disable_promotion_to_c1e = true,
@@ -1034,6 +1071,7 @@ static const struct x86_cpu_id intel_idl
ICPU(SKYLAKE_X, skx),
ICPU(ICELAKE_X, icx),
ICPU(ICELAKE_D, icx),
+ ICPU(SAPPHIRERAPIDS_X, spr),
ICPU(XEON_PHI_KNL, knl),
ICPU(XEON_PHI_KNM, knl),
ICPU(ATOM_GOLDMONT, bxt),
next prev parent reply other threads:[~2022-04-26 10:05 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-26 10:03 [PATCH 0/4] x86/mwait-idle: (mostly) SPR support Jan Beulich
2022-04-26 10:04 ` [PATCH 1/4] x86/mwait-idle: switch to asm/intel-family.h naming Jan Beulich
2022-04-27 11:21 ` Roger Pau Monné
2022-04-26 10:05 ` Jan Beulich [this message]
2022-04-27 11:39 ` [PATCH 2/4] mwait-idle: add SPR support Roger Pau Monné
2022-04-26 10:05 ` [PATCH 3/4] mwait-idle: add 'preferred_cstates' module argument Jan Beulich
2022-04-27 12:45 ` Roger Pau Monné
2022-04-27 13:41 ` Jan Beulich
2022-04-27 15:06 ` Roger Pau Monné
2022-04-27 15:25 ` Jan Beulich
2022-04-27 16:12 ` Roger Pau Monné
2022-04-28 6:37 ` Jan Beulich
2022-04-28 8:06 ` Roger Pau Monné
2022-04-28 8:10 ` Jan Beulich
2022-04-26 10:06 ` [PATCH 4/4] mwait-idle: add core C6 optimization for SPR Jan Beulich
2022-04-27 12:56 ` Roger Pau Monné
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=722833a9-e6bf-1a63-e866-aed0648c785e@suse.com \
--to=jbeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=roger.pau@citrix.com \
--cc=wl@xen.org \
--cc=xen-devel@lists.xenproject.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 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.