[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v6 00/19] amd-cppc CPU Performance Scaling Driver


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Penny Zheng <Penny.Zheng@xxxxxxx>
  • Date: Fri, 11 Jul 2025 11:50:47 +0800
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Z9C+yV+HmdFTqJaV624vQ6WpSY1VU6tRT3xMWhR+0fw=; b=W6Uhi7hhUzdiUEcdc+nVFDT4uR0suqo79+UuyceFpE4YLYlznaZXbH7sDXRW9lB1L0Nkc8T8mncYmqN2PWDhF8x93hg3PlnrvvSr5sbbvMMC7/PBRTp3/JNnk28u/g1FsAQ/kh2DiSl6DTodp61cvt/6+n+n/rb7HWKGG3DvOI8Pd5skLRtNsXznHbytmM737VjdjUf3S5ZBfpHcFrBYnqzDqeG6n2ZnJdsnpiAeqNLMx105KKmjBH2wWW74BY5819RkTbV7wAZfEen67NAQMfDft1U/CoWKx8bi3pl5UTxW9lENWAfw2SUsdUJE7Y+Qd+HS3c9OReKwrjSWhhgQxg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MYOZkD+SIZEZGHNjlnrk8mWgT8heEUzLQFyetoiGxloMsgu2+Ig4cMxlXPIJm+0hN+h1LzAZGb9NK0SUE3KKbKBGF2HKCaN/rylgWXsDoFMZffdG2mZHYapmC5vzh3z23GaxHkVF9slija6D3k5zBOW81sWhRWnGdijGFB/wgj9jvla6vAvS7BmocW2SM8wE9fbal5dJgqAxPsdFJz78GIB577vDvOop/krSqpOJ1hflMuwfzXOhSlAElUXjuSEXfU66HPpxm4poDHa/HKvZpn5FYyVJuPyyxTT4hmLGMkr8wpcf0odJ3Cy/ufW3XIfa5hFl39hU5MocMky5bNxmUQ==
  • Cc: <ray.huang@xxxxxxx>, Penny Zheng <Penny.Zheng@xxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>
  • Delivery-date: Fri, 11 Jul 2025 03:51:46 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

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 (19):
  xen/amd: introduce amd_process_freq() to get processor frequency
  tools: drop "has_num" condition check for cppc mode
  tools: optimize cpufreq average freq print
  x86/cpufreq: continue looping other than -EBUSY or successful return
  xen/cpufreq: refactor cmdline "cpufreq=xxx"
  xen/cpufreq: make _PSD info common
  cpufreq: rename "xen_cppc_para" to "xen_get_cppc_para"
  xen/cpufreq: rename cppc preset name to
    "XEN_SYSCTL_CPPC_SET_PRESET_ONDEMAND"
  xen/cpufreq: neglect unsupported-mode request from DOM0
  xen/cpufreq: introduce new sub-hypercall to propagate CPPC data
  xen/x86: introduce "cpufreq=amd-cppc" xen cmdline and amd-cppc driver
  xen/cpufreq: implement amd-cppc driver for CPPC in passive mode
  xen/x86: implement amd-cppc-epp driver for CPPC in active mode
  xen/cpufreq: get performance policy from governor set via xenpm
  tools/cpufreq: introduce helper to deal with CPPC-related parameters
  xen/cpufreq: introduce GET_CPUFREQ_CPPC sub-op
  xen/cpufreq: introduce helper cpufreq_in_cppc_passive_mode()
  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

 docs/misc/xen-command-line.pandoc         |  14 +-
 tools/include/xenctrl.h                   |   4 +-
 tools/libs/ctrl/xc_pm.c                   |  68 +-
 tools/misc/xenpm.c                        | 131 +++-
 xen/arch/x86/acpi/cpufreq/Makefile        |   1 +
 xen/arch/x86/acpi/cpufreq/amd-cppc.c      | 777 ++++++++++++++++++++++
 xen/arch/x86/acpi/cpufreq/cpufreq.c       |  74 ++-
 xen/arch/x86/acpi/cpufreq/hwp.c           |   4 +-
 xen/arch/x86/cpu/amd.c                    |  58 +-
 xen/arch/x86/include/asm/amd.h            |   2 +
 xen/arch/x86/include/asm/msr-index.h      |   6 +
 xen/arch/x86/platform_hypercall.c         |  26 +-
 xen/arch/x86/x86_64/cpufreq.c             |  19 +
 xen/arch/x86/x86_64/platform_hypercall.c  |   3 +
 xen/drivers/acpi/pm-op.c                  |  56 +-
 xen/drivers/acpi/pmstat.c                 |   3 +
 xen/drivers/cpufreq/cpufreq.c             | 308 +++++++--
 xen/drivers/cpufreq/utility.c             |  15 +
 xen/include/acpi/cpufreq/cpufreq.h        |  19 +-
 xen/include/acpi/cpufreq/processor_perf.h |  14 +-
 xen/include/public/platform.h             |  26 +
 xen/include/public/sysctl.h               |  29 +-
 xen/include/xen/pmstat.h                  |   5 +
 xen/include/xlat.lst                      |   1 +
 24 files changed, 1522 insertions(+), 141 deletions(-)
 create mode 100644 xen/arch/x86/acpi/cpufreq/amd-cppc.c

-- 
2.34.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.