From: srinivas pandruvada <srinivas.pandruvada@linux.intel.com>
To: "zhenglifeng (A)" <zhenglifeng1@huawei.com>,
Mario Limonciello <mario.limonciello@amd.com>,
Pierre Gondois <pierre.gondois@arm.com>,
Russell Haley <yumpusamongus@gmail.com>,
rafael@kernel.org, lenb@kernel.org, robert.moore@intel.com,
viresh.kumar@linaro.org
Cc: acpica-devel@lists.linux.dev, linux-acpi@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
linuxarm@huawei.com, jonathan.cameron@huawei.com,
gautham.shenoy@amd.com, ray.huang@amd.com,
zhanjie9@hisilicon.com, lihuisong@huawei.com,
hepeng68@huawei.com, fanghao11@huawei.com
Subject: Re: [PATCH v4 6/6] cpufreq: CPPC: Support for autonomous selection in cppc_cpufreq
Date: Fri, 24 Jan 2025 06:18:28 -0800 [thread overview]
Message-ID: <bf3d232eef124080eb0482ff1b43c17739a1c50b.camel@linux.intel.com> (raw)
In-Reply-To: <0c511da2-6a4a-4fa2-9d82-da45d1afe346@huawei.com>
On Fri, 2025-01-24 at 11:53 +0800, zhenglifeng (A) wrote:
> On 2025/1/24 1:05, Mario Limonciello wrote:
>
> > On 1/23/2025 10:46, Srinivas Pandruvada wrote:
> > >
> > > On 1/20/25 18:42, zhenglifeng (A) wrote:
> > > > On 2025/1/21 1:44, Mario Limonciello wrote:
> > > >
> > > > > On 1/20/2025 08:49, Pierre Gondois wrote:
> > > > > >
> > > > > > On 1/20/25 04:15, zhenglifeng (A) wrote:
> > > > > > > On 2025/1/17 22:30, Mario Limonciello wrote:
> > > > > > >
> > > > > > > > On 1/16/2025 21:11, zhenglifeng (A) wrote:
> > > > > > > > > On 2025/1/16 19:39, Russell Haley wrote:
> > > > > > > > >
> > > > > > > > > > Hello,
> > > > > > > > > >
> > > > > > > > > > I noticed something here just as a user casually
> > > > > > > > > > browsing the mailing list.
> > > > > > > > > >
> > > > > > > > > > On 1/13/25 6:21 AM, Lifeng Zheng wrote:
> > > > > > > > > > > Add sysfs interfaces for CPPC autonomous
> > > > > > > > > > > selection in the cppc_cpufreq
> > > > > > > > > > > driver.
> > > > > > > > > > >
> > > > > > > > > > > Signed-off-by: Lifeng Zheng
> > > > > > > > > > > <zhenglifeng1@huawei.com>
> > > > > > > > > > > ---
> > > > > > > > > > > .../ABI/testing/sysfs-devices-system-cpu
> > > > > > > > > > > | 54 +++++++++
> > > > > > > > > > > drivers/cpufreq/cppc_cpufreq.c
> > > > > > > > > > > | 109 +++++++ ++++ +++++++
> > > > > > > > > > > 2 files changed, 163 insertions(+)
> > > > > > > > > > >
> > > > > > > > > > > diff --git a/Documentation/ABI/testing/sysfs-
> > > > > > > > > > > devices-system-cpu b/
> > > > > > > > > > > Documentation/ABI/testing/sysfs-devices-system-
> > > > > > > > > > > cpu
> > > > > > > > > > > index 206079d3bd5b..3d87c3bb3fe2 100644
> > > > > > > > > > > --- a/Documentation/ABI/testing/sysfs-devices-
> > > > > > > > > > > system-cpu
> > > > > > > > > > > +++ b/Documentation/ABI/testing/sysfs-devices-
> > > > > > > > > > > system-cpu
> > > > > > > > > > > @@ -268,6 +268,60 @@ Description: Discover
> > > > > > > > > > > CPUs in the same CPU frequency coordination
> > > > > > > > > > > domain
> > > > > > > > > > > This file is only present if the
> > > > > > > > > > > acpi-cpufreq or the cppc-cpufreq
> > > > > > > > > > > drivers are in use.
> > > > > > > > > > [...snip...]
> > > > > > > > > >
> > > > > > > > > > > +What:
> > > > > > > > > > > /sys/devices/system/cpu/cpuX/cpufreq/energy_perf
> > > > > > > > > > > +Date: October 2024
> > > > > > > > > > > +Contact: linux-pm@vger.kernel.org
> > > > > > > > > > > +Description: Energy performance preference
> > > > > > > > > > > +
> > > > > > > > > > > + Read/write an 8-bit integer from/to this
> > > > > > > > > > > file. This file
> > > > > > > > > > > + represents a range of values from 0
> > > > > > > > > > > (performance preference) to
> > > > > > > > > > > + 0xFF (energy efficiency preference) that
> > > > > > > > > > > influences the rate of
> > > > > > > > > > > + performance increase/decrease and the
> > > > > > > > > > > result of the hardware's
> > > > > > > > > > > + energy efficiency and performance
> > > > > > > > > > > optimization policies.
> > > > > > > > > > > +
> > > > > > > > > > > + Writing to this file only has meaning
> > > > > > > > > > > when Autonomous Selection is
> > > > > > > > > > > + enabled.
> > > > > > > > > > > +
> > > > > > > > > > > + This file only presents if the cppc-
> > > > > > > > > > > cpufreq driver is in use.
> > > > > > > > > > In intel_pstate driver, there is file with near-
> > > > > > > > > > identical semantics:
> > > > > > > > > >
> > > > > > > > > > /sys/devices/system/cpu/cpuX/cpufreq/energy_perform
> > > > > > > > > > ance_preference
> > > > > > > > > >
> > > > > > > > > > It also accepts a few string arguments and converts
> > > > > > > > > > them to integers.
> > > > > > > > > >
> > > > > > > > > > Perhaps the same name should be used, and the
> > > > > > > > > > semantics made exactly
> > > > > > > > > > identical, and then it could be documented as
> > > > > > > > > > present for either
> > > > > > > > > > cppc_cpufreq OR intel_pstate?
> > > > > > > > > >
> > > > > > > > > > I think would be more elegant if userspace tooling
> > > > > > > > > > could Just Work with
> > > > > > > > > > either driver.
> > > > > > > > > >
> > > > > > > > > > One might object that the frequency selection
> > > > > > > > > > behavior that results from
> > > > > > > > > > any particular value of the register itself might
> > > > > > > > > > be different, but they
> > > > > > > > > > are *already* different between Intel's P and E-
> > > > > > > > > > cores in the same CPU
> > > > > > > > > > package. (Ugh.)
> > > > > > > > > Yes, I should use the same name. Thanks.
> > > > > > > > >
> > > > > > > > > As for accepting string arguments and converting them
> > > > > > > > > to integers, I don't
> > > > > > > > > think it is necessary. It'll be a litte confused if
> > > > > > > > > someone writes a raw
> > > > > > > > > value and reads a string I think. I prefer to let
> > > > > > > > > users freely set this
> > > > > > > > > value.
> > > > > > > > >
> > > > > > > > > In addition, there are many differences between the
> > > > > > > > > implementations of
> > > > > > > > > energy_performance_preference in intel_pstate and
> > > > > > > > > cppc_cpufreq (and
> > > > > > > > > amd-pstate...). It is really difficult to explain all
> > > > > > > > > this differences in
> > > > > > > > > this document. So I'll leave it to be documented as
> > > > > > > > > present for
> > > > > > > > > cppc_cpufreq only.
> > > > > > > > At least the interface to userspace I think we should
> > > > > > > > do the best we can to be the same between all the
> > > > > > > > drivers if possible.
> > > > > > > >
> > > > > > > > For example; I've got a patch that I may bring up in a
> > > > > > > > future kernel cycle that adds raw integer writes to
> > > > > > > > amd-pstates energy_performance_profile to behave the
> > > > > > > > same way intel-pstate does.
> > > > > > > I agree that it's better to keep this interface
> > > > > > > consistent across different
> > > > > > > drivers. But in my opinion, the implementation of
> > > > > > > intel_pstate
> > > > > > > energy_performance_preference is not really nice. Someone
> > > > > > > may write a raw
> > > > > > > value but read a string, or read strings for some values
> > > > > > > and read raw
> > > > > > > values for some other values. It is inconsistent. It may
> > > > > > > be better to use
> > > > > > > some other implementation, such as seperating the
> > > > > > > operations of r/w strings
> > > > > > > and raw values into two files.
> > > > > > I agree it would be better to be sure of the type to expect
> > > > > > when reading the
> > > > > > energy_performance_preference file. The epp values in the
> > > > > > range 0-255 with 0
> > > > > > being the performance value for all interfaces.
> > > > > >
> > > > > > In the current epp strings, it seems there is a big gap
> > > > > > between the PERFORMANCE
> > > > > > and the BALANCE_PERFORMANCE strings. Maybe it would be good
> > > > > > to complete it:
> > > > > > EPP_PERFORMANCE 0x00
> > > > > > EPP_BALANCE_PERFORMANCE 0x40 // state value changed
> > > > > > EPP_BALANCE 0x80 // new state
> > > > > > EPP_BALANCE_POWERSAVE 0xC0
> > > > > > EPP_POWERSAVE 0xFF
> > > > > >
> > > > > > NIT: The mapping seems to be slightly different for
> > > > > > intel_pstate and amd-pstate
> > > > > > currently:
> > > > > > drivers/cpufreq/amd-pstate.c
> > > > > > #define AMD_CPPC_EPP_PERFORMANCE 0x00
> > > > > > #define AMD_CPPC_EPP_BALANCE_PERFORMANCE 0x80
> > > > > > #define AMD_CPPC_EPP_BALANCE_POWERSAVE 0xBF
> > > > > > #define AMD_CPPC_EPP_POWERSAVE 0xFF
> > > > > >
> > > > > > arch/x86/include/asm/msr-index.h
> > > > > > #define HWP_EPP_PERFORMANCE 0x00
> > > > > > #define HWP_EPP_BALANCE_PERFORMANCE 0x80
> > > > > > #define HWP_EPP_BALANCE_POWERSAVE 0xC0 <------
> > > > > > Different from AMD_CPPC_EPP_BALANCE_POWERSAVE
> > > > > > #define HWP_EPP_POWERSAVE 0xFF
> > > > > >
> > > > > > > I think it's better to consult Rafael and Viresh about
> > > > > > > how this should
> > > > > > > evolve.
> > > > > > Yes indeed
> > > > > Maybe it's best to discuss what the goal of raw EPP number
> > > > > writes is to decide what to do with it.
> > > > >
> > > > > IE in intel-pstate is it for userspace to be able to actually
> > > > > utilize something besides the strings all the time? Or is it
> > > > > just for debugging to find better values for strings in the
> > > > > future?
> > > > >
> > > > > If the former maybe we're better off splitting to
> > > > > 'energy_performance_preference' and
> > > > > 'energy_performance_preference_int'.
> > > > >
> > > > > If the latter maybe we're better off putting the integer
> > > > > writes and reads into debugfs instead and making
> > > > > 'energy_performance_preference' return -EINVAL while a non-
> > > > > predefined value is in use.
> > >
> > > In Intel case EPP values can be different based on processor. In
> > > some case they they end up sharing the same CPU model. So strings
> > > are not suitable for all cases. Also there is different
> > > preference of EPP between Chrome systems and non chrome distro.
> > > For example Chrome has some resource manager which can change and
> > > same on Intel distros with LPMD.
> > >
> >
> > Thanks for confirming it is intentional and changing it would break
> > existing userspace.
> >
> > And FWIW even in Windows there are more than 4 situational values
> > used like we have in Linux today.
> >
> > As the status quo is there I personally feel that we should do the
> > exact same for other implementation of
> > energy_performance_preference.
>
> I still don't think this implementation is nice, for the following
> reasons:
>
> 1. Users may write raw value but read string. It's odd.
>
> 2. Sometimes a raw value is read and sometimes a character string is
> read.
> The userspace tool needs to adapt this.
>
> 3. Reading and writing EPP strings is not really general in driver.
> It is
> more reasonable to use the userspace tool to implement it.
>
> In order not to break existing userspace, I'll rename the file to
> 'energy_performance_preference_int' or
> 'energy_performance_preference_val'
> in cppc_cpufreq and only support reading and writing raw value. As
> for
> accepting string arguments, it's not necessary for cppc_cpufreq for
> now.
> It's easy to add this feature but hard to remove, so I'll leave it to
> the
> future if it is really needed.
>
> As for amd-pstate and intel_pstate, you can decide how
> energy_performance_preference should evolve. But I strongly recommend
> splitting it.
No. User space can deal with this already. Atleast this has one
interface. If you split you need to keep them consistent. You can write
a raw value to new attribute and then can read a string from the other
attribute, which means different.
This is not the only place where strings and raw values can be written
in sysfs. Also true for energy_perf_bias.
Thanks,
Srinivas
>
> Regards,
>
> Lifeng
>
> >
> > >
> > > Thanks,
> > >
> > > Srinivas
> > >
> > >
> > > > I think it's the former.
> > > >
> > > > I added the author of the patch that allows raw energy
> > > > performance
> > > > preference value in intel_pstate to ask about what the goal is
> > > > and if this
> > > > would be ok to do the modification mentioned above.
> > > >
> > > > To see the patch from
> > > > https://lore.kernel.org/ all/20200626183401.1495090-3-srinivas.pandruvada@linux.intel.c
> > > > om/
> > > >
> > > > Anyway, the purpose of this patch is to allow users write and
> > > > read raw EPP
> > > > number. So maybe I can just rename the file to
> > > > 'energy_performance_preference_int'?
> > > >
> >
>
next prev parent reply other threads:[~2025-01-24 14:18 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-13 12:20 [PATCH v4 0/6] Support for autonomous selection in cppc_cpufreq Lifeng Zheng
2025-01-13 12:20 ` [PATCH v4 1/6] ACPI: CPPC: Add IS_OPTIONAL_CPC_REG macro Lifeng Zheng
2025-01-14 13:27 ` Rafael J. Wysocki
2025-01-15 7:52 ` zhenglifeng (A)
2025-01-13 12:21 ` [PATCH v4 2/6] ACPI: CPPC: Add cppc_get_reg_val and cppc_set_reg_val function Lifeng Zheng
2025-01-14 17:41 ` Rafael J. Wysocki
2025-01-15 8:10 ` zhenglifeng (A)
2025-01-13 12:21 ` [PATCH v4 3/6] ACPI: CPPC: Add macros to generally implement registers getting and setting functions Lifeng Zheng
2025-01-14 17:58 ` Rafael J. Wysocki
2025-01-15 8:58 ` zhenglifeng (A)
2025-01-15 11:12 ` Rafael J. Wysocki
2025-01-16 1:12 ` zhenglifeng (A)
2025-01-13 12:21 ` [PATCH v4 4/6] ACPI: CPPC: Refactor register value get and set ABIs Lifeng Zheng
2025-01-13 12:21 ` [PATCH v4 5/6] ACPI: CPPC: Add autonomous selection ABIs Lifeng Zheng
2025-01-14 18:24 ` Rafael J. Wysocki
2025-01-15 9:16 ` zhenglifeng (A)
2025-01-13 12:21 ` [PATCH v4 6/6] cpufreq: CPPC: Support for autonomous selection in cppc_cpufreq Lifeng Zheng
2025-01-15 14:51 ` Gautham R. Shenoy
2025-01-16 1:26 ` zhenglifeng (A)
2025-01-16 6:13 ` Gautham R. Shenoy
2025-01-16 8:01 ` zhenglifeng (A)
2025-01-16 14:33 ` Gautham R. Shenoy
2025-01-16 11:39 ` Russell Haley
2025-01-17 3:11 ` zhenglifeng (A)
2025-01-17 14:30 ` Mario Limonciello
2025-01-20 3:15 ` zhenglifeng (A)
2025-01-20 14:49 ` Pierre Gondois
2025-01-20 17:44 ` Mario Limonciello
2025-01-21 2:42 ` zhenglifeng (A)
2025-01-23 16:46 ` Srinivas Pandruvada
2025-01-23 17:05 ` Mario Limonciello
2025-01-24 3:53 ` zhenglifeng (A)
2025-01-24 14:18 ` srinivas pandruvada [this message]
2025-02-05 6:13 ` zhenglifeng (A)
2025-01-24 14:32 ` Russell Haley
2025-02-05 6:13 ` zhenglifeng (A)
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=bf3d232eef124080eb0482ff1b43c17739a1c50b.camel@linux.intel.com \
--to=srinivas.pandruvada@linux.intel.com \
--cc=acpica-devel@lists.linux.dev \
--cc=fanghao11@huawei.com \
--cc=gautham.shenoy@amd.com \
--cc=hepeng68@huawei.com \
--cc=jonathan.cameron@huawei.com \
--cc=lenb@kernel.org \
--cc=lihuisong@huawei.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=mario.limonciello@amd.com \
--cc=pierre.gondois@arm.com \
--cc=rafael@kernel.org \
--cc=ray.huang@amd.com \
--cc=robert.moore@intel.com \
--cc=viresh.kumar@linaro.org \
--cc=yumpusamongus@gmail.com \
--cc=zhanjie9@hisilicon.com \
--cc=zhenglifeng1@huawei.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.