Intel Performance and Energy Bias Hint¶
© 2019 Intel Corporation
Rafael J. Wysocki <email@example.com>
The Performance and Energy Bias Hint (EPB) allows software to specify its preference with respect to the power-performance tradeoffs present in the processor. Generally, the EPB is expected to be set by user space (directly via sysfs or with the help of the x86_energy_perf_policy tool), but there are two reasons for the kernel to update it.
First, there are systems where the platform firmware resets the EPB during system-wide transitions from sleep states back into the working state effectively causing the previous EPB updates by user space to be lost. Thus the kernel needs to save the current EPB values for all CPUs during system-wide transitions to sleep states and restore them on the way back to the working state. That can be achieved by saving EPB for secondary CPUs when they are taken offline during transitions into system sleep states and for the boot CPU in a syscore suspend operation, so that it can be restored for the boot CPU in a syscore resume operation and for the other CPUs when they are brought back online. However, CPUs that are already offline when a system-wide PM transition is started are not taken offline again, but their EPB values may still be reset by the platform firmware during the transition, so in fact it is necessary to save the EPB of any CPU taken offline and to restore it when the given CPU goes back online at all times.
Second, on many systems the initial EPB value coming from the platform firmware is 0 (‘performance’) and at least on some of them that is because the platform firmware does not initialize EPB at all with the assumption that the OS will do that anyway. That sometimes is problematic, as it may cause the system battery to drain too fast, for example, so it is better to adjust it on CPU bring-up and if the initial EPB value for a given CPU is 0, the kernel changes it to 6 (‘normal’).
Intel Performance and Energy Bias Attribute in
The Intel Performance and Energy Bias Hint (EPB) value for a given (logical) CPU
can be checked or updated through a
sysfs attribute (file) under
/sys/devices/system/cpu/cpu<N>/power/, where the CPU number
is allocated at the system initialization time:
Shows the current EPB value for the CPU in a sliding scale 0 - 15, where a value of 0 corresponds to a hint preference for highest performance and a value of 15 corresponds to the maximum energy savings.
In order to update the EPB value for the CPU, this attribute can be written to, either with a number in the 0 - 15 sliding scale above, or with one of the strings: “performance”, “balance-performance”, “normal”, “balance-power”, “power” that represent values reflected by their meaning.
This attribute is present for all online CPUs supporting the EPB feature.
Note that while the EPB interface to the processor is defined at the logical CPU level, the physical register backing it may be shared by multiple CPUs (for example, SMT siblings or cores in one package). For this reason, updating the EPB value for one CPU may cause the EPB values for other CPUs to change.