CPU Frequency Scaling and Governors: schedutil, the Intel Driver and EPP

CPU Frequency Scaling and Governors: schedutil, the Intel Driver and EPP

Your CPU spends most of its life below its rated frequency, ramping up when work arrives and dropping back when it does not. Which mechanism decides that depends on a driver you probably have not looked at.

Find out what you have first

# the scaling driver
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver

# available governors and the active one
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# the friendly summary
cpupower frequency-info

The driver determines which governors even exist, which is why advice that works on one machine produces “no such governor” on another.

DriverTypical hardware
intel_pstateMost modern Intel
amd-pstateRyzen and EPYC, recent kernels
acpi-cpufreqOlder systems and fallback
cppc_cpufreqMany Arm server parts

The governors, when you have the generic set

With acpi-cpufreq or intel_pstate in passive mode:

schedutil takes its input directly from the scheduler, which already knows what has been queued. It responds sooner and more accurately than anything polling utilisation after the fact, and it is the modern default for good reason.

ondemand samples utilisation periodically and reacts. It works, and it is reacting to the past rather than the present.

conservative is ondemand that ramps more gradually. Occasionally useful on hardware where frequency transitions are expensive.

performance pins the maximum frequency.

powersave pins the minimum, in the generic drivers. This is the source of enormous confusion, explained next.

userspace hands control to a program, which is mostly historical.

sudo cpupower frequency-set -g schedutil

Why Intel only gives you two, and why powersave is not what you think

On intel_pstate in active mode, which is the default on most Intel systems, you get exactly two governors: powersave and performance.

powersave here does not mean slow. It means the driver handles scaling dynamically, using turbo frequencies whenever the workload calls for them. It is the normal, correct setting, and it will happily run your CPU at maximum.

That naming has sent countless people to performance believing their machine was being held back. It was not.

# active or passive
cat /sys/devices/system/cpu/intel_pstate/status

# switch to passive to get the generic governors
echo passive | sudo tee /sys/devices/system/cpu/intel_pstate/status

amd-pstate has a similar split, with amd-pstate-epp being the equivalent of active mode.

EPP, which often matters more than the governor

Energy Performance Preference is a hint to the processor about how to balance power and performance in its own internal decisions.

cat /sys/devices/system/cpu/cpu0/cpufreq/energy_performance_available_preferences
# default performance balance_performance balance_power power

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

echo balance_power | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference

On modern Intel and AMD systems, EPP frequently has more effect on real behaviour than the governor name does, because the hardware is making fine-grained decisions the operating system is not involved in.

If you want a laptop to run cooler without pinning it to minimum frequency, balance_power is usually a better lever than changing governors.

Turbo, and when disabling it is reasonable

# Intel: 1 means disabled
cat /sys/devices/system/cpu/intel_pstate/no_turbo

# generic
cat /sys/devices/system/cpu/cpufreq/boost

# disable turbo on Intel
echo 1 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo

Turbo lets cores exceed base frequency when thermal and power budgets allow. It is also where most of the heat and fan noise comes from, and the efficiency curve is poor at the top: the last few hundred megahertz cost disproportionate power.

Disabling it is a legitimate choice for a laptop that runs hot or loud, at the cost of peak performance.

Check your cooling first. If a machine that used to be quiet is now thermally limited, the cause is usually dust, degraded thermal paste or a failing fan. Disabling turbo hides that rather than fixing it.

# what frequency are you actually getting
watch -n1 'grep MHz /proc/cpuinfo'

# thermal state
sensors
cat /sys/class/thermal/thermal_zone*/temp

Making it persist

Settings in /sys vanish at reboot.

# /etc/systemd/system/cpu-governor.service
[Unit]
Description=Set CPU governor
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/bin/cpupower frequency-set -g schedutil
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
sudo systemctl enable --now cpu-governor

Our systemd service guide covers the unit structure. On laptops, TLP or power-profiles-daemon usually manage this already, and running your own service alongside them produces a fight you will lose confusingly. Pick one.

When it is worth touching

Usually not. Defaults are reasonable and the kernel knows more about the workload than you do.

Worth considering performance:

  • Latency-sensitive work where the brief ramp-up delay is the problem: audio production, some game servers, trading systems
  • Benchmarking, where you want to remove frequency variation as a variable
  • Machines on mains power where the electricity cost is irrelevant

Worth considering balance_power or disabling turbo:

  • Laptops where temperature or fan noise is the complaint
  • Battery life, alongside the wider measures in our power management guide

Not worth it:

  • General desktop use. schedutil or intel_pstate powersave reaches full speed fast enough that you will not perceive the difference
  • Servers with variable load, where the power saving at idle is real and the performance cost is not

Measuring rather than guessing

# what frequencies are actually being used over time
sudo cpupower monitor
sudo turbostat --interval 1

# before and after, on a real workload
time ./your-actual-workload

turbostat is the honest tool on Intel: it reports actual achieved frequency, C-state residency and package power, which tells you whether a change did anything.

The common outcome of measuring is discovering that the governor was never the bottleneck, and our CPU monitoring guide covers finding what is.

Frequently Asked Questions

Why does my Intel system only offer powersave and performance governors?

Because intel_pstate in active mode implements scaling inside the driver rather than exposing the generic governors. Its powersave is not a low-performance mode, it is a dynamic scaling mode that will use full turbo when needed, which makes the name thoroughly misleading.

What is the difference between schedutil and ondemand?

ondemand samples CPU utilisation periodically and reacts after the fact. schedutil takes its input directly from the scheduler, which already knows what work has been queued, so it responds sooner and more accurately. schedutil is the modern default and generally the better choice.

Does the performance governor make my system faster?

Marginally, and mostly by removing the brief delay before the clock ramps up. It matters for latency-sensitive and bursty workloads. For sustained load, modern governors reach maximum frequency almost immediately anyway, so the gain is small and the power cost is not.

What does energy performance preference control?

EPP is a hint to the processor telling it how to balance power against performance in its own internal decisions. It ranges from performance to power, and on Intel systems it frequently has more effect on real behaviour than the governor name does.

Should I disable turbo boost to reduce heat?

It is a legitimate option for a laptop that becomes uncomfortably hot or loud, and it costs peak performance. Before doing that, check whether thermal paste, dust or a broken fan is the real problem, because disabling turbo to work around failing cooling treats the symptom.

Is it worth tuning CPU frequency scaling at all?

On most systems, no. Defaults are reasonable and the kernel has far more information about the workload than you do. It is worth adjusting for latency-sensitive workloads that suffer from ramp-up delay, and for laptops where you want to trade peak speed for battery life or temperature.