Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153012327
D56320.id175190.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D56320.id175190.diff
View Options
Index: website/content/en/status/report-2026-01-2026-03/cppc.adoc
===================================================================
--- /dev/null
+++ website/content/en/status/report-2026-01-2026-03/cppc.adoc
@@ -0,0 +1,78 @@
+=== Collaborative Processor Performance Control (CPPC)
+
+Contact: ShengYi Hung <aokblast@FreeBSD.org> +
+Contact: Olivier Certner <olce@FreeBSD.org>
+
+Collaborative Processor Performance Control (CPPC) is a standard introduced by
+ACPI to allow the OS to manage performance and, conversely, efficiency levels of
+CPUs thanks to an abstract performance scale in general uncorrelated to and more
+fine-grained than mere frequency levels.
+Intel and AMD have been providing CPU implementations in support of ACPI CPPC
+for several years now.
+
+FreeBSD had been supporting enabling CPPC but only for Intel processors and
+allowing to manage a useful but very limited subset of its functionality, thanks
+to the man:hwpstate_intel[4] driver added in 2020.
+Hardware autonomous selection of the performance target depending on the
+workload is forcibly enabled, and only the main corresponding hardware tunable,
+called Efficiency/Performance Preference (EPP), is exported to the administrator
+via a man:sysctl[8] knob.
+
+We have added support for AMD CPPC's implementation in the existing
+man:hwpstate_amd[4] driver which, contrary to man:hwpstate_intel[4], so far
+managed only "regular" P-states.
+The driver exports 4 man:sysctl[8] knobs: Minimum performance, maximum
+performance, desired performance and EPP.
+Minimum, maximum and desired performances are values between 0 and 255, but only
+a sub-range may have an effect depending on the hardware.
+Initial values of minimum and maximum performances are set to the effective
+sub-range bounds as instructed by the platform (if available).
+The EPP control serves to express a bias towards efficiency or performance, and
+is a value between 0 (maximum performance preference) and 255 (maximum
+efficiency preference).
+The desired performance may be set to any value between minimum and maximum
+performance, or to the special value 0 to enable hardware autonomous selection
+of target performance by the hardware depending on the current workload.
+The minimum performance, maximum performance and EPP controls apply regardless
+of whether autonomous selection is enabled or a specific desired performance
+specified.
+Note that the effect of each combination of these values depend on the CPU
+model, and we have already been able to observe wildly different behaviors on
+a few ones.
+Therefore, you should expect to have to experiment to find the values adapted to
+your use cases on a given machine.
+
+man:hwpstate_amd[4] is included by the `GENERIC` kernel (through man:cpufreq[4])
+and uses CPPC if the CPUs support it unless explicitly instructed otherwise
+(through the `machdep.hwpstate_amd_cppc_enable` tunable).
+Consequently, in order to avoid performance regressions, for the time being we
+have decided to set the above-mentioned controls for maximum performance, as
+this is the default behavior for traditional P-state support and also that of
+any other man:cpufreq[4] driver except for man:hwpstate_intel[4] (which
+currently forces hardware autonomous selection and sets EPP to 0x80 (50%) by
+default).
+This may be revised later depending on whether we can reliably determine if the
+running computer is a laptop.
+
+Next steps are:
+
+1. Modify man:hwpstate_intel[4] to be on par with man:hwpstate_amd[4]'s CPPC
+ support in terms of functionality and default behavior.
+ This includes:
+ - Better error-handling and debugging output
+ - Exporting knobs for all the above-mentioned controls
+ - Change the scale of EPP (from percents to an 8-bit value)
+ - Change the default values
+1. Write a manual page for man:hwpstate_amd[4] (in the meantime, the
+ explanations here and the embedded man:sysctl[8] knobs' documentation should
+ be enough).
+1. Teach man:powerd[8] the CPPC control knobs and some simple policies on how to
+ set them.
+1. Teach man:cpufreq[4] about the abstract performance values, to provide
+ a unified interface to retrieve or set them.
+1. Make man:cpufreq[4] support per-CPU settings.
+1. Select default control values based on the platform type (probably from
+ ACPI's ``FADT``'s `Preferred_PM_Profile` field).
+1. Possibly move man:powerd[8] policies to kernel space.
+
+Sponsor: The FreeBSD Foundation
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Apr 19, 3:11 PM (12 h, 37 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31779430
Default Alt Text
D56320.id175190.diff (4 KB)
Attached To
Mode
D56320: Status/2026Q1/cppc.adoc: Add report
Attached
Detach File
Event Timeline
Log In to Comment