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(-)
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(-) -- 2.34.1
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? (2) The driver is inactive by default, i.e. requires use of the command line option to come into play? If the answer to both is yes, we're leaning towards committing v8 plus the ChangeLog entry. Jan
[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
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
© 2016 - 2025 Red Hat, Inc.