CPUFreq & P-State Go Through A Redesign With Linux 4.6

Written by Michael Larabel in Linux Kernel on 15 March 2016 at 08:17 AM EDT. 3 Comments
LINUX KERNEL
The power management updates for Linux 4.6 are quite hearty.

Rafael Wysocki sent in the power management and ACPI updates for Linux 4.6 on Monday and they contain some big changes particularly for the CPUFreq/P-State CPU frequency scaling code. Wysocki explained it as:
First off, the way CPU frequency updates are triggered is different now. Instead of having to set up and manage a deferrable timer for each CPU in the system to evaluate and possibly change its frequency periodically, cpufreq governors set up callbacks to be invoked by the scheduler on a regular basis (basically on utilization updates). The "old" governors, "ondemand" and "conservative", still do all of their work in process context (although that is triggered by the scheduler now), but intel_pstate does it all in the callback invoked by the scheduler with no need for any additional asynchronous processing.

Of course, this eliminates the overhead related to the management of all those timers, but also it allows the cpufreq governor code to be simplified quite a bit. On top of that, the common code and data structures used by the "ondemand" and "conservative" governors are cleaned up and made more straightforward and some long-standing and quite annoying problems are addressed. In particular, the handling of governor sysfs attributes is modified and the related locking becomes more fine grained which allows some concurrency problems to be avoided (particularly deadlocks with the core cpufreq code).

In principle, the new mechanism for triggering frequency updates allows utilization information to be passed from the scheduler to cpufreq. Although the current code doesn't make use of it, in the works is a new cpufreq governor that will make decisions based on the scheduler's utilization data. That should allow the scheduler and cpufreq to work more closely together in the long run.

Beyond this reworking of P-State and CPUFreq governors to use callbacks invoked by the scheduler rather than deferrable timers, there are also various bug fixes and optimizations to P-State, clean-ups to CPUFreq core, ACPICA updates, Intel RAPL driver fixes, TurboStat utility fixes, and other changes.

More details on this ACPI/PM update for the Linux 4.6 merge window can be found via this pull request.
Related News
About The Author
Michael Larabel

Michael Larabel is the principal author of Phoronix.com and founded the site in 2004 with a focus on enriching the Linux hardware experience. Michael has written more than 20,000 articles covering the state of Linux hardware support, Linux performance, graphics drivers, and other topics. Michael is also the lead developer of the Phoronix Test Suite, Phoromatic, and OpenBenchmarking.org automated benchmarking software. He can be followed via Twitter, LinkedIn, or contacted via MichaelLarabel.com.

Popular News This Week