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.
| Driver | Typical hardware |
|---|---|
intel_pstate | Most modern Intel |
amd-pstate | Ryzen and EPYC, recent kernels |
acpi-cpufreq | Older systems and fallback |
cppc_cpufreq | Many 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.
schedutilorintel_pstatepowersave 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.