EPP (Energy Performance Preference): A complete and practical guide

Last update: 17/12/2025
Author Isaac
  • EPP defines how much the CPU prioritizes performance over energy saving, using ranges such as 0–255 or 0–100% depending on the platform.
  • Linux exposes EPP via sysfs and drivers such as intel_pstate or amd-pstate-epp, while Windows It manages it with PerfEnergyPreference and CPPC.
  • In modern processors (Intel Meteor Lake, Ryzen mobiles, hybrids) EPP adjustment impacts turbo, consumption, temperature and battery life.
  • Tools like auto-epp on Linux or CPUFriend on macOS allow you to fine-tune the power-performance preference beyond the default profiles.

How to know the CPU frequency on a PC-6

If you've come here looking for exactly what it is EPP (Energy Performance Preference) And if you're wondering how this affects the performance and power consumption of your CPU on Windows, Linux, macOS, or even modern Intel and AMD processors, you've come to the right place. The concept seems simple, but it's full of nuances, numerical ranges, modes, drivers, and tools that can make a big difference in temperature, battery life, and power.

Throughout this article we will clearly explain how it works EPP parameter and the different energy-performance modes in each system: from the files of /sys in Linux and the driver intel_pstate...even the hidden Windows settings with PerfEnergyPreferenceincluding fine-tuning tools like CPUFriend on macOS or scripts like auto-epp in modern distributions. The idea is for you to understand what each mode does, how it's configured, and what real implications it has for your day-to-day work.

What is EPP (Energy Performance Preference)?

The term EPP, Energy Performance PreferenceThis refers to a value or clue given to the processor to tell it what to prioritize: maximum performance, energy saving, or something in between. In modern systems, this parameter is primarily implemented through registers such as EPP (Energy Performance Preference) o EPB (Energy Performance Bias)or through standardized interfaces such as CPPC v2 (Collaborative Processor Performance Control).

In practice, this adjustment influences the aggressiveness with which the CPU "turbo" or scales frequenciesA value more oriented towards performance makes the processor quickly reach its maximum frequency, while a value oriented towards efficiency makes it climb more slowly, remain in low-power states for longer, and in many cases reduce temperatures and noise at the cost of some power.

Typical numerical ranges for PPE

On platforms that display EPP as a gross value, it is common to work with a numeric range from 0 to 255These numbers are interpreted as follows:

  • 0: total priority to performance, the CPU seeks to go as fast as possible.
  • 255: top priority given to energy efficiency, revs up less.
  • Intermediate values: balance between performance and savings which the manufacturer usually groups into modes such as performance, balance_performance, balance_power o power.

These ranges are used in both Linux (for example with the drivers) intel_pstate o amd-pstate-epp), like in MacOS in advanced configurations with CPUFriend, or in the internal logic of Windows when programming registers like the one in PerfEnergyPreference through CPPC.

EPP in Linux: sysfs files and available values

In modern GNU/Linux systems, the power-performance preference is managed by interfaces in the sysfs file systemFor each CPU core there is a key file:

The current energy-performance preference can be found in /sys/devices/system/cpu/cpu#/cpufreq/energy_performance_preferenceWhere cpu# is the kernel identifier, for example cpu0Reading this file you will see values ​​like performance, balance_performance, balance_power o power, or even a number between 0 and 255 if the system allows raw values.

To find out which modes it supports hardware and the driver, you have /sys/devices/system/cpu/cpu#/cpufreq/energy_performance_available_preferenceswhere you'll see a list of accepted text strings. This is very useful for understanding which combinations of performance and efficiency They are supported by your specific platform.

Many systems also allow writing directly a numerical value from 0 to 255 en energy_performance_preferenceThe closer to 0, more performance; the closer to 255This granular control is ideal for those who want maximum fine-tuning, although in practice most users stick with the predefined modes readable by name.

Practical example in Linux with AMD-Pstate-EPP and auto-epp

On modern AMD hardware, especially in portable with Ryzen processors like a AMD Ryzen 7 7840UMany distributions, such as openSUSE Tumbleweed, enable the driver by default. amd-pstate-eppThis driver appears, for example, when reading /sys/devices/system/cpu/cpu0/cpufreq/scaling_driverwhere you will see the chain amd-pstate-epp when it is in use.

Normally, the status of this driver is checked at /sys/devices/system/cpu/amd_pstate/status, where the value active This indicates that it is deployed as the primary scaling mechanism. Furthermore, the default governor on many modern laptops is often... powersavewhich, from the AMD driver's perspective, doesn't mean "going slow," but rather applying a similar logic to scheduleutil u ondemand but optimized for the specific hardware.

For the user layer, desktops like KDE Plasma or GNOME rely on power-profiles-daemon, a background service that exposes profiles such as Performance , Balanced o Power SaverIn a system with power-profiles-daemon.service When active, it is common to simply configure “AC Performance” and “Battery Balanced”, letting the daemon adjust internally. frequencies, EPP and governors.

Based on that, many users add additional tools such as auto-epp, script which automates the EPP change using the AMD-Pstate driver. This utility reads a configuration in /etc/auto-epp.conf with variables such as epp_state_for_AC y epp_state_for_BATand applies states like performance, balance_performance, balance_power o power depending on whether the device is plugged in or running on battery power.

  How to customize system names in the Windows Bootloader boot menu

Imagine a laptop initially configured with epp_state_for_AC=balance_performance y epp_state_for_BAT=powerIn this case, the ultra-conservative battery mode can limit the frequency of a Ryzen 7840U to around 1,4 GHz even under load, when the maximum single-core turbo is around 5,1 GHz. The result is a feeling of a "crippled" machine that doesn't fully utilize the processor's potential.

Changing the settings to epp_state_for_AC=performance y epp_state_for_BAT=balance_performanceIn AC mode, the CPU approaches its maximum potential, while on battery power it maintains approximately 90-95% of maximum performance when needed, but without drastically increasing power consumption.

Additionally, configurations such as balance_power for battery They offer an even more efficient balance, with performance close to 85-90% but with significant energy savings. Users who have tested these combinations report improvements of up to an extra hour of battery life in standby mode. balance_performance, and reduced average temperatures around 3-5 ºC, even reaching drops of around 8 ºC when moving to balance_power in light tasks such as web browsing and text editing.

EPP modes in Intel Meteor Lake: impact on performance and power consumption

How User Interaction-Aware CPU Power Management Works in Windows 11

The Intel Meteor LakeWith models like the Core Ultra 7 155H, it makes excellent use of the EPP concept. In recent laptops, these processors allow switching between modes of Balanced PPE, performance and energy saving, which affects both the CPU and the integrated graphics (tGPU) and to the overall consumption of the equipment.

In synthetic GPU tests such as 3DMark Wild Life ExtremeThe balanced EPP mode has shown values ​​around 91,35 FPS with a peak of 69 W, while performance mode remains approximately at 87,67 FPS but with peaks of up to 82 WThe energy saving mode is around 80,93 FPS with a maximum of 63 WInterestingly, the "performance" mode doesn't always provide more FPS compared to the balanced mode, but it does increase power consumption.

In browser benchmarks such as JetStream 2 with Firefox and SeleniumPerformance mode scores around 10% higher than balanced mode, at the cost of increasing CPU power consumption from about 58W to around 63W. In power-saving mode, performance drops to approximately half, but the CPU can barely move. 20 W, which significantly increases efficiency measured as output per watt, reaching figures on the order of 15.464 points versus 8.555 (balanced) and 7.652 (performance).

In applications like GIMPThe low power mode makes tasks take almost twice as long, but with consumption dropping to around 18 W versus 44 W or 53 W in other modes, which is very significant in thin laptops. In Blender 4.0However, there is hardly any noticeable difference in performance between modes, although the power saving mode reduces consumption by around 10W and limits the frequency to a maximum of about 2,8 GHz.

If all the benchmarks are added together, it can be seen that performance mode outperforms balanced mode by a modest margin, with something like 445,6 points vs. 429while the power-saving mode lags considerably behind around 316,35 pointsThis represents an improvement of barely a 4% increase in total score in exchange for an increase in consumption of approximately 22% in performance mode, which is not always worthwhile except in very specific scenarios.

In terms of frequency, the power-saving mode limits the average to about 2414 MHz, while balanced mode usually hovers around 3193 MHz and performance mode goes up to approximately 3651 MHzIn parallel, average temperatures drop by around 8 degrees in energy-saving mode, with average consumption approaching half that of performance mode, clearly demonstrating how the EPP can drastically influence the balance between silence, battery life and raw power.

EPP and perfEnergyPreference on Windows

En WindowsThe control equivalent to the EPP is exposed through the hidden configuration PerfEnergyPreference, which defines the value that is programmed into the power-performance preference register in systems that implement version 2 of the CPPC interface and operate in standalone mode.

Parameter PerfEnergyPreference It is expressed as a percentage between 0 and 100. A value of 0 This causes Windows to schedule the internal registry to 0, prioritizing performance above all else. A value of 100 internally translates to 255tipping the balance entirely towards energy savings. For intermediate values, the system applies the formula (value * 255) / 100, so that the 0-100% range is mapped to the 0-255 range that the hardware understands.

This setting is available as part of energy policies, although it is usually marked as hidden optionAt the alias level:

  • In Windows provisioning: Common\Power\Policy\Settings\Processor\PerfEnergyPreference y PerfEnergyPreference1.
  • En powercfgThey are presented as PERFEPP y PERFEPP1.

Accepted values ​​range from 0 to 100and are applied in different editions of the system: Windows 10 desktop (Home, Pro, Enterprise, Education) supports this setting on x86 and x64 architectures, Windows 10 Mobile only on ARM, and Windows 11 desktop computers running x64 and ARM. On many modern laptops, the manufacturer pre-configures these values ​​in their own power plans, and tweaking them can noticeably change how the CPU clocks up and down, and even help to make Windows 11 use less battery.

  Everything you need to know about Windows 11 24H2: installation, issues, and recent updates

Adjusting EPP and turbo on macOS with CPUFriend

En MacOSApple uses its own power management system based on XCPM (XNU CPU Power Management) and in the plugin X86PlatformPluginFor it to work correctly on compatible hardware (such as Haswell or later), it is important that the kernel loads that plugin and that an ACPI table of type [type] has been properly configured SSDT-PLUG pointing to the first logical thread of the processor (CP00 or similar).

On systems where native management is insufficient or further refinement is desired, tools such as CPUFriend and the auxiliary script CPUFriendFriendThese utilities allow you to generate a CPUFriendDataProvider.kext or ssdt_data.aml that inject customized energy data, including key values ​​such as LFM (Low Frequency Mode), the EPP itself and a call Performance Bias.

El LFM This is interpreted as the "floor" frequency to which the CPU can drop at idle. To determine this, you can consult the field TDP-down Frequency on Intel ARK, or use recommended values, such as:

Generation LFM Approximate equivalent
Broadwell laptops and later 08 ~ 800 MHz
Broadwell tabletop and later 0A ~ 1000 MHz
Haswell/Broadwell HEDT/server (X99) 0D ~ 1300 MHz
Skylake+ HEDT/server (X299) 0C ~ 1200 MHz

These values ​​are encoded as multipliers in hexadecimal, for example, 13 for 1,3 GHzand affect how macOS handles sleep and wake transitions.

Parameter EPP on macOS It is also configured as a value between 00 y FFWhere 00 It indicates that the system should allow the CPU to turbocharge as quickly as possible, and FF which must be done very gently. By convention, they are usually grouped as follows:

PPE Range Behavior
0x00-0x3F Maximum performance
0x40-0x7F Balanced performance
0x80-0xBF Balance leaning towards savings
0xC0-0xFF Maximum savings

It's important to know that SMBIOS Skylake and later only They officially support this EPP field, and a bad configuration can break stability, causing kernel panics with messages like Sleep Wake failure in efi or worsen consumption instead of improving it.

In older architectures such as Sandy Bridge and Ivy BridgemacOS does not use XCPM natively in recent versions, so scripts such as ssdtPRGen to generate specific energy management tables (SSDT-PM). This approach is combined with adjustments in ACPI (e.g., manipulating inputs) _PSS o _PPC) and can indirectly influence how the system distributes frequencies and energy states, although it does not expose such a direct EPP as in Skylake+.

The intel_pstate driver in Linux and its modes

The driver intel_pstate It is part of the CPU performance scaling subsystem (CPUFreq) in the Linux kernel, and is designed for Intel processors from Sandy Bridge onwards (although not all models are supported). Unlike generic drivers such acpi-cpufreq, It works directly with the hardware's P-state interface. and maps those states to frequencies understandable by the rest of the system.

For each logical CPU, intel_pstate creates an independent policybecause the hardware interface is exposed at the kernel level. It is not a downloadable module: it is configured using line parameters. Boot of the kernel (as intel_pstate=active o intel_pstate=passive), and is hot-checked through sysfs en /sys/devices/system/cpu/intel_pstate/.

This driver can operate in two modes:

  • Active mode: uses its own P-state selection algorithms, or lets the hardware (HWP) manage itself by receiving cues.
  • Passive modeIt behaves like a driver CPUFreq standard, taking into account the values ​​requested by generic governors such as schedutil o ondemand.

In active mode with HWP, the driver relies on the processor to automatically select the P-states, but sends it "hints" through registers such as the EPP or EPBIn that way, The available algorithms are also called powersave y performanceHowever, they do not behave the same as the generic governors with the same name, which often leads to confusion.

When HWP is activated and you choose the algorithm performance, intel_pstate enter a value 0 in the PPE/EPBindicating that the focus should be on maximum performance. This ignores any previous EPP configuration that may have been done since sysfs and rejects further attempts to change it to a value other than 0.

If you use the algorithm powersave With HWP, the driver respects the EPP/EPB value configured in sysfs or the one that has left the UEFI/BIOS, which normally makes the hardware behave less aggressively and favors the balance or efficiency instead of peak power.

En active mode without HWP, intel_pstate It implements its own P-state calculation based on internal processor counters. The algorithm performance always select the maximum allowed P-state, while powersave The P-state is adjusted proportionally to CPU utilization, with a minimum interval of about 10 ms between adjustments.

En passive modeThe driver presents itself to the system as intel_cpufreq and exposes the full range of P-states (including turbo) to generic governors. In this way, The escalation policy is decided externally.While intel_pstate It simply translates requests into actual frequency changes.

  How to return to the classic menu in Windows 11

Turbo, P-state limits and EPP in intel_pstate

In Intel processors, the range of P-states is typically divided into two subsets: the Sustainable P-states (below the turbo threshold) and the turbo P-stateswhich are only maintainable during intervals limited by the thermal and power budget.

The driver intel_pstate always exposes the entire range of P-states to the system, including the turbo section, which means turbo states are used more frequently than with acpi-cpufreqwhich usually represents the entire turbo range with a single entry in the tables _PSSThis difference is key when it comes to governors like schedutil can take greater advantage of the performance ceiling.

To limit the use of turbo globally, there is the attribute no_turbo en /sys/devices/system/cpu/intel_pstate/When it is set to 1, intel_pstate It stops using any P-state above the turbo threshold, even though the maximum reported frequency (cpuinfo_max_freq) continue to reflect the maximum turbo value. This discrepancy is resolved internally by limiting the maximum values ​​of scaling_max_freq y scaling_min_freq to the non-turbo roof.

In addition to no_turboThe driver has several important global attributes:

  • max_perf_pct: maximum percentage of the performance level (including turbo) that can be requested.
  • min_perf_pct: minimum percentage of yield allowed.
  • num_pstates y turbo_pct: total number of P-states and proportion occupied by the turbo segment, when they are constant between CPUs.
  • status: indicates if the driver is in mode active, passive u offand allows switching between modes.
  • hwp_dynamic_boostWhen using HWP, it allows temporarily raising the minimum P-state threshold on I/O wake-up to improve responsiveness.

On the other hand, when HWP is available, intel_pstate enables an interface similar to the EPP described above: energy_performance_preference y energy_performance_available_preferences for each CPU in /sys/devices/system/cpu/cpu#/cpufreq/From there, the user can choose semantic values ​​such as performance, balance_performance, balance_power, power o default, or even write an integer between 0 and 255 if EPP is directly supported.

Behind these strings, the driver internally translates them into a numeric value that is written to the register of Energy-Performance Preference (EPP) or in the Energy-Performance Bias (EPB), in a very similar way to what was explained for Windows with the parameter PerfEnergyPreference.

intel_pstate versus acpi-cpufreq and hybrid models

In many systems, the BIOS/UEFI provides ACPI tables with objects _PSS that list supported P-states. The driver acpi-cpufreq It uses that data to scale frequency, but is limited to the listed states, and represents the turbo section with a single inlet whose frequency is, by convention, 1 MHz higher than that of the highest non-turbo P-state.

This approach causes generic governors to tend to spend more time in non-turbo states, because the turbo segment occupies "only" 1 MHz of the entire range and seems marginal in percentage terms. Furthermore, in systems with Configurable TDPPoor coordination between the actual turbo threshold and the inputs _PSS This can cause multiple turbo inputs, and disabling turbo isn't as straightforward as ignoring the last input.

By contrast, intel_pstate It knows the exact turbo threshold and displays the entire range.which facilitates consistent management of the attribute no_turbo and a more aggressive and efficient use of turbo states when desired.

In hybrid processors (large and small cores), intel_pstate It also enables Capacity-Aware Scheduling (CAS) and, if the kernel is configured with CONFIG_ENERGY_MODEL, active Energy-Aware Scheduling (EAS)In that context, it defines CPU capacities based on maximum HWP levels and builds an "artificial" power model to help the scheduler place tasks where they are most efficient, favoring small or lightly loaded cores as long as they have sufficient capacity.

This combination of CAS + EAS, along with the use of EPP/HWP, allows modern processors to place lightweight tasks on efficient cores with very low energy costs, reserving large cores for intensive workloads, all adjusted according to the established energy-performance preferences.

Putting all of the above together, the EPP becomes a kind of "mixing controller" between power and efficiency that spans OSDrivers and architectures: in Linux it is controlled through sysfs and drivers like intel_pstate or amd-pstate-eppIn Windows, using parameters such as PerfEnergyPreference Integrated into CPPC, and on macOS with low-level tools like CPUFriend and XCPM. Understanding how it's expressed (0-255, 0-100%), what semantic modes it offers (performance, balance_performance, balance_power, power), and how it interacts with technologies like HWP, turbo, or the hybrid scheduler is key to truly fine-tuning your system, whether to squeeze out every last FPS or to gain that extra hour of battery life that's so welcome.

What's new in Linux 6.18
Related articles:
Linux 6.18: all the new features of the new kernel