为什么 Linux 将 cpu 温度存储在这么多文件中?

为什么 Linux 将 cpu 温度存储在这么多文件中?

我有一台带有 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

其实温度不已存储任何地方。/sys是一个内存文件系统,并从 in 中的文件读取/sys调用内核中动态计算值的代码。

不同的目录对应于硬件报告温度的不同方式。这些temp*_input文件具有关联标识temp*_label,用于标识报告哪个组件的温度。

下面的位置/sys往往因内核版本而异(而不是因发行版而异)。这是读取数据的程序的作者/sys必须忍受的一个困难(例子)。

答案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 系统上,您可能会看到数十个条目。

相关内容