RE: [PATCH v9 0/8] amd-cppc CPU Performance Scaling Driver

Penny, Zheng posted 8 patches 3 days, 18 hours ago
Only 0 patches received!
RE: [PATCH v9 0/8] amd-cppc CPU Performance Scaling Driver
Posted by Penny, Zheng 3 days, 18 hours ago
[Public]

> -----Original Message-----
> From: Jan Beulich <jbeulich@suse.com>
> Sent: Wednesday, September 10, 2025 12:11 AM
> To: Penny, Zheng <penny.zheng@amd.com>
> Cc: Andrew Cooper <andrew.cooper3@citrix.com>; Roger Pau Monné
> <roger.pau@citrix.com>; Anthony PERARD <anthony.perard@vates.tech>; Orzel,
> Michal <Michal.Orzel@amd.com>; Julien Grall <julien@xen.org>; Stefano
> Stabellini <sstabellini@kernel.org>; Juergen Gross <jgross@suse.com>; Oleksii
> Kurochko <oleksii.kurochko@gmail.com>; Community Manager
> <community.manager@xenproject.org>; xen-devel@lists.xenproject.org
> Subject: Re: [PATCH v9 0/8] amd-cppc CPU Performance Scaling Driver
>
> On 04.09.2025 08:35, Penny Zheng wrote:
> > amd-cppc is the AMD CPU performance scaling driver that introduces a
> > new CPU frequency control mechanism on modern AMD APU and CPU series
> > in Xen. The new mechanism is based on Collaborative Processor
> > Performance Control (CPPC) which provides finer grain frequency
> > management than legacy ACPI hardware P-States. Current AMD CPU/APU
> > platforms are using the ACPI P-states driver to manage CPU frequency
> > and clocks with switching only in 3 P-states. CPPC replaces the ACPI
> > P-states controls and allows a flexible, low-latency interface for Xen
> > to directly communicate the performance hints to hardware.
> >
> > amd_cppc driver has 2 operation modes: autonomous (active) mode, and
> > non-autonomous (passive) mode. We register different CPUFreq driver
> > for different modes, "amd-cppc" for passive mode and "amd-cppc-epp"
> > for active mode.
> >
> > The passive mode leverages common governors such as *ondemand*,
> > *performance*, etc, to manage the performance tuning. While the active
> > mode uses epp to provides a hint to the hardware if software wants to
> > bias toward performance (0x0) or energy efficiency (0xff). CPPC power
> > algorithm in hardware will automatically calculate the runtime
> > workload and adjust the realtime cpu cores frequency according to the
> > power supply and thermal, core voltage and some other hardware conditions.
> >
> > amd-cppc is enabled on passive mode with a top-level
> > `cpufreq=amd-cppc` option, while users add extra `active` flag to select active
> mode.
> >
> > With `cpufreq=amd-cppc,active`, we did a 60s sampling test to see the
> > CPU frequency change, through tweaking the energy_perf preference from
> > `xenpm set-cpufreq-cppc powersave` to `xenpm set-cpufreq-cppc performance`.
> > The outputs are as follows:
> > ```
> > Setting CPU in powersave mode
> > Sampling and Outputs:
> >   Avg freq      580000 KHz
> >   Avg freq      580000 KHz
> >   Avg freq      580000 KHz
> > Setting CPU in performance mode
> > Sampling and Outputs:
> >   Avg freq      4640000 KHz
> >   Avg freq      4220000 KHz
> >   Avg freq      4640000 KHz
> > ```
> >
> > Penny Zheng (8):
> >   xen/cpufreq: embed hwp into struct cpufreq_policy{}
> >   xen/cpufreq: implement amd-cppc driver for CPPC in passive mode
> >   xen/cpufreq: implement amd-cppc-epp driver for CPPC in active mode
> >   xen/cpufreq: get performance policy from governor set via xenpm
> >   tools/cpufreq: extract CPPC para from cpufreq para
> >   xen/cpufreq: bypass governor-related para for amd-cppc-epp
> >   xen/cpufreq: Adapt SET/GET_CPUFREQ_CPPC xen_sysctl_pm_op for amd-
> cppc
> >     driver
> >   CHANGELOG.md: add amd-cppc/amd-cppc-epp cpufreq driver support
> >
> >  CHANGELOG.md                         |   1 +
> >  docs/misc/xen-command-line.pandoc    |   9 +-
> >  tools/include/xenctrl.h              |   3 +-
> >  tools/libs/ctrl/xc_pm.c              |  25 +-
> >  tools/misc/xenpm.c                   |  94 ++--
> >  xen/arch/x86/acpi/cpufreq/amd-cppc.c | 703 ++++++++++++++++++++++++++-
> >  xen/arch/x86/acpi/cpufreq/hwp.c      |  32 +-
> >  xen/arch/x86/cpu/amd.c               |   8 +-
> >  xen/arch/x86/include/asm/amd.h       |   2 +
> >  xen/arch/x86/include/asm/msr-index.h |   6 +
> >  xen/drivers/acpi/pm-op.c             |  58 ++-
> >  xen/drivers/cpufreq/utility.c        |  15 +
> >  xen/include/acpi/cpufreq/cpufreq.h   |  44 ++
> >  xen/include/public/sysctl.h          |   5 +-
> >  14 files changed, 936 insertions(+), 69 deletions(-)
>
> As we're considering our options towards getting this work in, can you clarify two
> things please:
> (1) In v9, the sole changes were related to the use of per-CPU data and the
>     adding of a ChangeLog entry?

Yes, also in commit of "xen/cpufreq: Adapt SET/GET_CPUFREQ_CPPC". I added description of "moving the copying of the governor name"

> (2) The driver is inactive by default, i.e. requires use of the command line
>     option to come into play?
>

Yes, only with specific command line to turn on the driver

> If the answer to both is yes, we're leaning towards committing v8 plus the
> ChangeLog entry.
>
> Jan
Re: [PATCH v9 0/8] amd-cppc CPU Performance Scaling Driver
Posted by Jan Beulich 3 days, 17 hours ago
On 10.09.2025 11:27, Penny, Zheng wrote:
>> -----Original Message-----
>> From: Jan Beulich <jbeulich@suse.com>
>> Sent: Wednesday, September 10, 2025 12:11 AM
>>
>> On 04.09.2025 08:35, Penny Zheng wrote:
>>> Penny Zheng (8):
>>>   xen/cpufreq: embed hwp into struct cpufreq_policy{}
>>>   xen/cpufreq: implement amd-cppc driver for CPPC in passive mode
>>>   xen/cpufreq: implement amd-cppc-epp driver for CPPC in active mode
>>>   xen/cpufreq: get performance policy from governor set via xenpm
>>>   tools/cpufreq: extract CPPC para from cpufreq para
>>>   xen/cpufreq: bypass governor-related para for amd-cppc-epp
>>>   xen/cpufreq: Adapt SET/GET_CPUFREQ_CPPC xen_sysctl_pm_op for amd-
>> cppc
>>>     driver
>>>   CHANGELOG.md: add amd-cppc/amd-cppc-epp cpufreq driver support
>>>
>>>  CHANGELOG.md                         |   1 +
>>>  docs/misc/xen-command-line.pandoc    |   9 +-
>>>  tools/include/xenctrl.h              |   3 +-
>>>  tools/libs/ctrl/xc_pm.c              |  25 +-
>>>  tools/misc/xenpm.c                   |  94 ++--
>>>  xen/arch/x86/acpi/cpufreq/amd-cppc.c | 703 ++++++++++++++++++++++++++-
>>>  xen/arch/x86/acpi/cpufreq/hwp.c      |  32 +-
>>>  xen/arch/x86/cpu/amd.c               |   8 +-
>>>  xen/arch/x86/include/asm/amd.h       |   2 +
>>>  xen/arch/x86/include/asm/msr-index.h |   6 +
>>>  xen/drivers/acpi/pm-op.c             |  58 ++-
>>>  xen/drivers/cpufreq/utility.c        |  15 +
>>>  xen/include/acpi/cpufreq/cpufreq.h   |  44 ++
>>>  xen/include/public/sysctl.h          |   5 +-
>>>  14 files changed, 936 insertions(+), 69 deletions(-)
>>
>> As we're considering our options towards getting this work in, can you clarify two
>> things please:
>> (1) In v9, the sole changes were related to the use of per-CPU data and the
>>     adding of a ChangeLog entry?
> 
> Yes, also in commit of "xen/cpufreq: Adapt SET/GET_CPUFREQ_CPPC". I added description of "moving the copying of the governor name"

Oh, right, and that description is either too little or possibly unnecessary,
with a change made to "tools/cpufreq: extract CPPC para from cpufreq para"
(both as per my v9 comments). IOW v8 also isn't exactly what would want to go
in. All not a good basis for rushing this in at (later than) the last minute.

Jan