CPU temperatures in linux: throttling or wrong reading?

The difference is due to windows and linux using different CPU throttling profiles.

You do have some control over this on linux. For example, the following command will show you which profile is currently being used:

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

There are ways to choose which profiles to use. The Arch Linux wiki has good information on this, it may be worth a read:

CPU Frequency Scaling - Arch Wiki

There is an additional issue of fan control -- you need to make sure you have the proper drivers for controllin your fans and that they are set to a high enough speed when gaming.

Linux on Laptops can be a helpful resource.


I believe the reason for the difference is because your Windows installation has the Intel Dynamic Platform and Thermal Framework driver which adjusts the frequencies to manage the temperature. Your Linux installation does not have this so your CPU will just run at maximum frequency regardless of temperature, so it'll jump to the maximum of 100C until the CPU's firmware minimizes all frequencies until the temperature drops, then it returns to max frequency and this repeats.

Unfornately the Intel DPTF driver is not availabe for linux AFAIK, so unless you can set up some software to do the equivalent of it (thermald maybe?), I guess you can only simply limit the maximum frequency.

I do not understand how the temperature changes so instantaneously though (it changes between 60C and 100C in a fraction of a second on my friend's Y520 that's missing the Intel DPTF driver; I've never seen any CPU temp change anywhere near that rapidly). I thought it's caused by bad thermal contact between the CPU and heatsink but maybe the chip is designed like this and it's supposed to be managed by the Intel DPTF driver to work properly.