From: "Roger Pau Monné" <roger.pau@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
Andrew Cooper <andrew.cooper3@citrix.com>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH 3/4] mwait-idle: add 'preferred_cstates' module argument
Date: Wed, 27 Apr 2022 14:45:58 +0200 [thread overview]
Message-ID: <Ymk7BjXdyiMUGoc8@Air-de-Roger> (raw)
In-Reply-To: <7c15016f-cc57-f128-4b79-79c820f3196c@suse.com>
On Tue, Apr 26, 2022 at 12:05:28PM +0200, Jan Beulich wrote:
> From: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
>
> On Sapphire Rapids Xeon (SPR) the C1 and C1E states are basically mutually
> exclusive - only one of them can be enabled. By default, 'intel_idle' driver
> enables C1 and disables C1E. However, some users prefer to use C1E instead of
> C1, because it saves more energy.
>
> This patch adds a new module parameter ('preferred_cstates') for enabling C1E
> and disabling C1. Here is the idea behind it.
>
> 1. This option has effect only for "mutually exclusive" C-states like C1 and
> C1E on SPR.
> 2. It does not have any effect on independent C-states, which do not require
> other C-states to be disabled (most states on most platforms as of today).
> 3. For mutually exclusive C-states, the 'intel_idle' driver always has a
> reasonable default, such as enabling C1 on SPR by default. On other
> platforms, the default may be different.
> 4. Users can override the default using the 'preferred_cstates' parameter.
> 5. The parameter accepts the preferred C-states bit-mask, similarly to the
> existing 'states_off' parameter.
> 6. This parameter is not limited to C1/C1E, and leaves room for supporting
> other mutually exclusive C-states, if they come in the future.
>
> Today 'intel_idle' can only be compiled-in, which means that on SPR, in order
> to disable C1 and enable C1E, users should boot with the following kernel
> argument: intel_idle.preferred_cstates=4
>
> 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 da0e58c038e6
>
> Enable C1E (if requested) not only on the BSP's socket / package.
Maybe we should also add a note here that the command line option for
Xen is preferred-cstates instead of intel_idle.preferred_cstates?
I think this is a bad interface however, we should have a more generic
option (ie: cstate-mode = 'performance | powersave') so that users
don't have to fiddle with model specific C state masks.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>
> --- unstable.orig/docs/misc/xen-command-line.pandoc 2022-04-25 17:59:42.123387258 +0200
> +++ unstable/docs/misc/xen-command-line.pandoc 2022-04-25 17:36:00.000000000 +0200
> @@ -1884,6 +1884,12 @@ paging controls access to usermode addre
> ### ple_window (Intel)
> > `= <integer>`
>
> +### preferred-cstates (x86)
> +> `= <integer>`
> +
> +This is a mask of C-states which are to be use preferably. This option is
> +applicable only oh hardware were certain C-states are exlusive of one another.
> +
> ### psr (Intel)
> > `= List of ( cmt:<boolean> | rmid_max:<integer> | cat:<boolean> | cos_max:<integer> | cdp:<boolean> )`
>
> --- unstable.orig/xen/arch/x86/cpu/mwait-idle.c 2022-04-25 17:17:05.000000000 +0200
> +++ unstable/xen/arch/x86/cpu/mwait-idle.c 2022-04-25 17:33:47.000000000 +0200
> @@ -82,6 +82,18 @@ boolean_param("mwait-idle", opt_mwait_id
>
> static unsigned int mwait_substates;
>
> +/*
> + * Some platforms come with mutually exclusive C-states, so that if one is
> + * enabled, the other C-states must not be used. Example: C1 and C1E on
> + * Sapphire Rapids platform. This parameter allows for selecting the
> + * preferred C-states among the groups of mutually exclusive C-states - the
> + * selected C-states will be registered, the other C-states from the mutually
> + * exclusive group won't be registered. If the platform has no mutually
> + * exclusive C-states, this parameter has no effect.
> + */
> +static unsigned int __ro_after_init preferred_states_mask;
> +integer_param("preferred-cstates", preferred_states_mask);
> +
> #define LAPIC_TIMER_ALWAYS_RELIABLE 0xFFFFFFFF
> /* Reliable LAPIC Timer States, bit 1 for C1 etc. Default to only C1. */
> static unsigned int lapic_timer_reliable_states = (1 << 1);
> @@ -96,6 +108,7 @@ struct idle_cpu {
> unsigned long auto_demotion_disable_flags;
> bool byt_auto_demotion_disable_flag;
> bool disable_promotion_to_c1e;
> + bool enable_promotion_to_c1e;
I'm confused by those fields, shouldn't we just have:
promotion_to_c1e = true | false?
As one field is the negation of the other:
enable_promotion_to_c1e = !disable_promotion_to_c1e
I know this is code from Linux, but would like to understand why two
fields are needed.
Thanks, Roger.
next prev parent reply other threads:[~2022-04-27 12:46 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 ` [PATCH 2/4] mwait-idle: add SPR support Jan Beulich
2022-04-27 11:39 ` 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é [this message]
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=Ymk7BjXdyiMUGoc8@Air-de-Roger \
--to=roger.pau@citrix.com \
--cc=andrew.cooper3@citrix.com \
--cc=jbeulich@suse.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.