Почему Linux хранит температуру процессора на таком количестве файлов?

10

У меня есть ноутбук (ThinkPad) с 2 процессорами. В настоящее время я могу прочитать температуру процессора из файлов ниже с помощью cat (1):

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

Мой вопрос заключается в том, почему ядро ​​хранит эту информацию в очень многих разных местах, и какой из них является «стандартным» файлом для чтения температуры процессора?

Это происходит из-за systemd (я использую Arch Linux) или несистемных дистрибутивов Linux, таких как Slackware, по-другому?

ЯК
источник

Ответы:

12

На самом деле температура нигде не сохраняется . /sysявляется файловой системой в памяти , и чтение из файлов /sysвызывает код в ядре, которое вычисляет значения на лету.

Различные каталоги соответствуют различным способам, которыми оборудование может сообщать о температуре. У temp*_inputфайлов есть связанный, temp*_labelкоторый определяет, какая температура компонента сообщается.

Расположение под, /sysкак правило, варьируется от версии ядра к версии ядра (не от распространения к распространению). Это трудность, с которой приходится сталкиваться авторам программ, которые считывают данные /sys( пример ).

Жиль "ТАК - перестань быть злым"
источник
Спасибо, это была моя проблема. (Я использую i3 и i3status, и время от времени мне приходится менять температурный путь процессора). Тогда я решил написать небольшую программу, чтобы сделать именно это.
Яку
7

Во-первых, /sys/classэто удобный способ найти вещи /sys. Вы найдете все, что на самом деле является символической ссылкой; Я почти уверен, что ваша первая строфа является символической ссылкой на вашу третью строфу.

2-й раздел - это ядро, считывающее температуру непосредственно из процессора / чипсета. Третья строфа - это ядро, получающее значение из BIOS через ACPI. Хотя в вашей системе они могут давать один и тот же ответ, им это не нужно (например, BIOS может использовать разные датчики, усреднять несколько вместе или применять некоторые специфичные для платы настройки).

Наконец, каждая строфа имеет два разных показания, потому что, скорее всего, два термометра. Или, по крайней мере, API аппаратного обеспечения позволяет это.

derobert
источник
Спасибо за ответ. Это проясняет ситуацию. Но на другом ноутбуке с двумя ядрами пути могут отличаться, верно? (Может ли это быть /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp0_input /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_input, например?).
Яку
@yaku Да, пути могут отличаться. Например, ноутбук может иметь зону охлаждения для (например) жесткого диска, или северного моста, или чего-то еще.
Дероберт
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 "" просто используется как "cat with filenames")

Итак, вот общая температура процессора плюс температура на ядро.

В большой многопроцессорной системе вы можете увидеть десятки записей.

jm73
источник