Why is my CPU frequency limited to a fraction of its maximum?

I have a Dell XPS 15 9550. According to/sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq, it has a maximum speed of 3.5 GHz, although that might be a boost speed. Running Ubuntu, it can certainly sustain 2.6 GHz. But running Fedora 32, it maxes out at 1.8 GHz (according to /proc/cpuinfo). I am currently on a Zoom call, and the sound is stuttering, and input lag is about two thirds of a second!

Why is this? Why does my CPU not go faster?

I see other questions referring to something called cpupower, but i don’t appear to have anything of that name installed.

Is the cpu maxed out and stuttering? or is it zoom?, or or is it the network?

Most linux distros do not push the cpu faster than needed, and if it is not bottle necked at the cpu then your issue is likely elsewhere. Please do a little analysis to see what the cause is instead of automatically assuming it is the cpu. Most video streaming problems I have seen are network/internet buffering related and tweaking the cpu has been fruitless.

On some platform /proc/cpuinfo frequency is not true frequency, you need cpupower, FYI, sudo dnf install kernel-tools and sudo cpupower monitor can do this.

Or you can try CPU-X (similar to CPU-Z, but available on Linux, and Open Source)

1 Like

The network is wired gigabit ethernet connected to a ~80 Mb/s VDSL modem.

With Ubuntu on the same hardware, where the CPU goes faster, Zoom works fine, which seems to point at some kind of OS-related issue. It could also be something related to video drivers, codecs, etc.

Thanks! Right now, just running a browser, /proc/cpuinfo says 800 MHz, and cpupower appears to say ~1000 MHz. Is there a simple explanation for the difference? Based on some quick searches, it seems like /proc/cpuinfo just doesn’t give the true value any more, although the discussions i found about that were all from ~2017.

I made a little more progress on my own. I found that /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor was set to “powersave”. This explains a lot.

I tried changing it to “ondemand”, but got “write error: Invalid argument”.

/sys/devices/system/cpu/cpu*/cpufreq/scaling_available_governors contains “performance powersave”.

If i set scaling_governor to “performance”, the /proc/cpuinfo speed goes to 3100 MHz, and video calling starts working fine.

The two things i don’t understand are why i only have those two choices for a governor, and how powersave got chosen.