我有一台带有 2 个 cpu 的笔记本电脑(thinkpad)。目前我可以使用 cat(1) 从以下文件中读取 cpu 温度:
cat /sys/class/thermal/thermal_zone0/temp
cat /sys/class/thermal/thermal_zone1/temp
cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input
cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_input
cat /sys/devices/LNXSYSTM:00/LNXCPU:00/thermal_cooling/subsystem/thermal_zone1/temp
cat /sys/devices/LNXSYSTM:00/LNXCPU:01/thermal_cooling/subsystem/thermal_zone0/temp
我的问题是为什么内核将这些信息存储在这么多不同的地方,哪一个是读取 cpu 温度的“标准”文件?
发生这种情况是因为 systemd(我使用的是 Arch Linux)还是像 Slackware 这样的非 systemd Linux 发行版有不同的方法?
答案1
答案2
首先,/sys/class
是在 中查找内容的便捷方法/sys
。你会发现里面的所有内容实际上都是一个符号链接;我很确定你的第一节符号链接到你的第三节。
第二节是内核直接从 CPU/芯片组读取温度。第三节是内核通过 ACPI 从 BIOS 获取值。虽然在您的系统上它们可能会给出相同的答案,但它们不需要(例如,BIOS 可能使用不同的传感器,对几个传感器进行平均,或应用一些特定于主板的调整)。
最后,每个节都有两个不同的读数,因为可能有两个温度计。或者至少,硬件的 API 允许这样做。
答案3
查看 *_label 文件以了解报告的内容 - 这是我的 i5:
$ grep "" /sys/devices/platform/coretemp.?/hwmon/hwmon?/temp?_label
/sys/devices/platform/coretemp.0/hwmon/hwmon1/temp1_label:Physical id 0
/sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_label:Core 0
/sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_label:Core 1
(grep“”仅用作“带文件名的猫”)
这里是 CPU 的总温度,加上每个核心的温度。
在更大的多 CPU 系统上,您可能会看到数十个条目。