为什么Linux在许多文件上存储CPU温度?


10

我有一台2 cpus的笔记本电脑(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发行版采用了不同的方法?

Answers:


12

实际上,温度不会存储在任何地方。/sys内存中的文件系统,从中读取文件会/sys调用内核中的代码,该代码可动态计算值。

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

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


谢谢,这是我的确切问题。(我使用i3和i3status,有时需要更改cpu温度路径)那是我决定编写一个小型程序来执行此操作的时候。
yaku 2014年

7

首先,这/sys/class是在中查找内容的便捷方法/sys。您会发现里面的所有内容实际上都是一个符号链接。我很确定您的第一个节已符号链接到您的第三个节。

第二节是内核直接从CPU /芯片组读取温度。第三节是内核通过ACPI从BIOS获取值。尽管在您的系统上它们可能给出相同的答案,但它们不一定(例如,BIOS可能使用其他传感器,将几个传感器平均在一起或对板进行特定调整)。

最后,每个节都有两个不同的读数,因为可能有两个温度计。至少,硬件的API允许这样做。


感谢您的回复。这使事情变得更清楚。但是,在具有两个核心的另一台笔记本电脑上,路径可能会不同吗?(例如,它是/sys/devices/platform/coretemp.0/hwmon/hwmon1/temp0_input /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_input吗?)。
yaku 2014年

@yaku是的,路径可能会有所不同。例如,膝上型计算机可以具有用于(例如)硬盘,北桥或任何其他物体的冷却区。
derobert 2014年

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系统上,您可能会看到许多条目。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.