I've just finished building a new machine with a i9 9900k CPU, a CPU with 1 socket, 8 cores and 16 threads. I installed Ubuntu Bionic on it, and I am just about to add checks to the CPU temperatures.

However, when I run cat /sys/class/thermal/thermal_zone*/temp (as recommended by https://askubuntu.com/a/15834/822289) I get 3 results:


Edit 1: The "correct" CPU-temperature is the one shown at thermal_zone2.

I thought maybe a 3rd-party program like acpi might help:

# acpi -t
Thermal 0: ok, 27.8 degrees C

But that one only gives me what's on thermal_zone0. What do the other ones represent, especially thermal_zone1, and how can I find more information about that?

Edit 2: The answer to what do the other ones represent can be found by running the following command:

cat /sys/class/thermal/thermal_zone*/type

Which gives me, in this case, the following output:

  • By experiment, thermal zone 2 seems to be processor package temperature, I don't know what the others are. Using the msr-tools package the MSRs (Machine Specific Registers) can be read directly. Package temperature, for example: sudo rdmsr --bitfield 22:16 -u 0x1b1 The core temperature for each CPU: sudo rdmsr --bitfield 22:16 -u -a 0x19c. See also here. – Doug Smythies Jan 19 '19 at 17:40
  • Note that idle CPUs can sleep for up to 4 seconds, so don't run the commands every second, because you might simply be waking CPUs just to ask them their temperature. – Doug Smythies Jan 19 '19 at 17:46
  • I made a mistake, the MSRs give temperature relative to TCC (98 degrees for my i7-2600K). So to convert the above readings to actual temperatures is TCC - reading. – Doug Smythies Jan 21 '19 at 15:33
  • @DougSmythies you're absolutely right. It is thermal zone 2 - ran a few stress tests and monitored all 3 thermal zones to see which one changes the most. Thermal zone 0 is static and never changes. I am very curious though what's on thermal zone 1. – Oleg Jan 22 '19 at 10:09
  • 1
    I don't think that the number of thermal zones and their definitions are the same for every computer. Do cat /sys/class/thermal/thermal_zone2/type and I think you'll get x86_pkg_temp, which i think is good enough for what you want. On my computer thermal zone 1 is the fan (I think), and I still don't know what thermal zone 0 is, but the type is acpitz. If you really want all the core temps do grep . /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp*_input, however note that it uses considerable code and will show a higher temp than it should for an idle system, just due to itself. – Doug Smythies Jan 22 '19 at 19:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.