cpu MHz: 1600.000 — Why the CPU Frequency in Debian Is Lower Than Rated
On a new server I ran into this: the CPU is an Intel Pentium G2020 @ 2.90GHz, yet Debian shows a frequency of 1600 MHz. The first thing I did was check the frequency and memory:
grep MHz /proc/cpuinfo ; grep MemTotal /proc/meminfo
The memory was fine (8 GB), but the frequency was puzzling. Where does 1600 MHz come from instead of 2900?
Why the frequency is lower than rated
The dmesg output shows the CPU is detected correctly:
[ 0.048138] CPU0: Intel(R) Pentium(R) CPU G2020 @ 2.90GHz stepping 09
It turned out to be simple: it’s power saving. With no load, the cores run at 1.6 GHz. Start a heavy MySQL query and the frequency immediately goes up to the rated one. So 1600 MHz at idle is normal, not a faulty CPU.
You can watch the frequency change under load like this (updates every second):
watch -n1 "grep MHz /proc/cpuinfo"
And this shows the policy the kernel uses to manage the frequency:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
It’s usually ondemand or powersave — the frequency drops at idle. If the file doesn’t exist, frequency scaling isn’t in use on the system.
This surprised me, because I mostly work with virtual servers on ESXi, and there the console always shows the maximum frequency, even under low load:
Frequency of all cores and the CPU model (2020)
The same commands came in handy on a home computer with an AMD Ryzen 5 3600 (6 cores, 12 threads):
grep MHz /proc/cpuinfo
Each line is one thread. The frequencies differ because idle cores drop their clock:
cpu MHz : 3999.797 cpu MHz : 1998.880 cpu MHz : 3998.749 cpu MHz : 3997.977 cpu MHz : 3999.594 cpu MHz : 3998.537 cpu MHz : 3998.684 cpu MHz : 1999.940 cpu MHz : 3999.897 cpu MHz : 2526.773 cpu MHz : 3998.544 cpu MHz : 3993.985
The CPU model, the number of cores and threads and other details are shown by:
lscpu

Nothing extra to install: both commands are available on Debian right after installation.

