CPU Governors and How Do They Work?

The heck is a “CPU Governor”?

A CPU Governor manages the CPU’s clock speed (frequency), balancing performance and power consumption based on workload. It is part of the Linux kernel CPU frequency scaling subsystem, helping a system respond to load demands while optimising energy usage and thermal output.

This information may change as additional devices are supported with different CPU governors. Generally speaking these are the typical CPU Governors you would find on a Linux based system. Please be aware that Android has a whole different subsection of governors and is not applicable for these devices.


Typical CPU Governors

These CPU Governors are the default selected options used across a variety of different systems and cores. Applications, and ports, can also benefit from different CPU Governor changes.

ondemand

  • A balanced option for most content with power saving where possible but where performance spikes are occasionally needed. Dynamically adjusts the CPU frequency based on system load:
    • High load = Maximum Frequency
    • Low load = Minimum Frequency
  • Power UsageModerate
    • This really is dependant on current workload of the CPU.

performance

  • This governor forces the CPU to always run at its highest possible frequency. Best suited for situations where maximum performance is critical.
  • Power Usage – High
    • Maximum Frequency = Higher power draw and heat output.

powersave

  • This governor forces the CPU to always run at its lowest possible frequency. Ideal for conserving battery life or when performance is not a priority.
  • Power Usage – Low
    • Minimal Frequency = Lower power consumption and heat.

Additional CPU Governors

The following CPU Governors are more “advanced” options that you can choose from. These require additional settings that you can change via SSH or ADB. Please note that you won’t get additional performance or power saving benefits from these options but are simply available to choose from as they are available.

userspace

  • Allows manual control over the CPU frequency by setting a specific speed via a scaling_setspeed parameter. Suitable for content that require fine-tuned control of CPU frequency.
  • Power Usage – Well that depends on the manually selected frequency.

conservative

  • Similar to ondemand, but changes CPU frequency more gradually to avoid sudden spikes or drops. Suitable for systems where smooth scaling is preferred over aggressive frequency changes.
  • Power Usage – Lower than ondemand albeit with smoother transitions.

interactive

  • Also similar to ondemand, but designed to ramp up CPU frequency more aggressively in response to user input or CPU intensive activity. Using this governor can sometimes lead to sudden lock ups if the frequency is changed too quickly!
  • Power Usage – About the same as conservative but can spike CPU frequencies a bit too harshly.

How to Check and Change CPU Governors

By pressing SELECT on your device whilst exploring your content you can check your current CPU Governor by pressing the MENU button. This will show up a message box stating what you currently have set.

You can also change the current CPU Governor from this screen and set it to the individual content, for the current directory, or the entire directory (including subdirectories).

Manually Check

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

List Available Governors

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

Manually Set CPU Governor - Example performance

echo performance >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

Please note that manual changes are temporary and reset on reboot.


Additional Information

3 Likes