我刚刚组装了一台新机器,它配备了 i9 9900k CPU,该 CPU 有 1 个插槽、8 个内核和 16 个线程。我在上面安装了 Ubuntu Bionic,我正要添加对 CPU 温度的检查。
然而,当我跑步时cat /sys/class/thermal/thermal_zone*/temp
(按照https://askubuntu.com/a/15834/822289)我得到3个结果:
27800
40000
28000
编辑1:“正确”的 CPU 温度是 thermal_zone2 显示的温度。
我认为可能是第三方程序交流电源接口可能有帮助:
# acpi -t
Thermal 0: ok, 27.8 degrees C
但那一个只告诉我什么是thermal_zone0
。其他的代表什么,特别是 thermal_zone1,我如何才能找到有关它的更多信息?
编辑2: 答案其他的代表什么可以通过运行以下命令找到:
cat /sys/class/thermal/thermal_zone*/type
在这种情况下,它给出了以下输出:
acpitz
pch_cannonlake
x86_pkg_temp
答案1
给定热区所代表内容的确切定义由给定区域的驱动程序定义。不同的处理器和主板为 Linux 提供不同的温度计,因此每个温度计都有自己的名称。每个不同的区域都是系统上的不同温度计:“acpitz”温度计是通过 ACPI 提供的,x86_pkg_temp 是核心 x86 规范导出的温度。ACPI 温度计是靠近 CPU 插槽的主板传感器,x86_pkg_temp 位于 CPU 本身内
根据内核源代码树中的 git grep,第二个 (pch_cannonlake) 指定了英特尔专用热电偶的温度计输出,用于热节流。但是,确定它的确切位置(与其他位置一样)充其量只是一个有根据的猜测:它会因芯片组和制造商而异,因此您需要查阅芯片的详细规格和布局。
答案2
为了说明所说的内容...
在我的华硕笔记本上运行 pop-os 时,我有不少于 7 个热区 (*),x86_package_temp 是第 7 个。报告显示有 11 个这里(并且提供的答案是相关的)。
此“x86_package_temp”热区域由驱动程序“x86_pkg_temperature_thermal”设置。
该驱动程序将 CPU 数字温度封装级传感器注册为具有最多两个用户模式可配置跳变点的热区。
https://www.kernel.org/doc/Documentation/thermal/x86_pkg_temperature_thermal
正如评论和 Calum 的回答中所说,热区“类型”属性定义了参与温度测量的传感器以及该传感器的应用位置,但相关字符串可能需要一些调查(例如TSKN
=?),除非它足够明确或有记录。
- 热区属性*
type:表示热区类型的字符串。这是由热区驱动程序在注册时提供的。例如:“acpitz”表示它是 ACPI 热设备。为了与 hwmon sys 属性保持一致;这应该是短的、小写的字符串,不包含空格或破折号。
https://www.kernel.org/doc/Documentation/thermal/sysfs-api.txt
(*)
$ cat /sys/class/thermal/thermal_zone*/type
acpitz
INT3400 Thermal
TMEM
TSKN
TAMB
T_VR
TEFN
x86_pkg_temp