Pourquoi Linux stocke-t-il les températures du processeur sur autant de fichiers?

10

J'ai un ordinateur portable (thinkpad) avec 2 processeurs. Actuellement, je peux lire les températures du processeur dans les fichiers ci-dessous avec 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

Ma question est pourquoi le noyau stocke ces informations sur tant d'endroits différents et lequel est le fichier "standard" pour lire la température d'un processeur?

Est-ce que cela se produit à cause de systemd (j'utilise Arch Linux) ou des distributions Linux non-systemd comme Slackware ont une approche différente?

yaku
la source

Réponses:

12

En fait, la température n'est stockée nulle part. /sysest un système de fichiers en mémoire et la lecture à partir de fichiers en /sysappelle du code dans le noyau qui calcule les valeurs à la volée.

Les différents répertoires correspondent à différentes manières dont le matériel peut signaler les températures. Les temp*_inputfichiers ont un associé temp*_labelqui identifie la température du composant qui est signalé.

Les emplacements sous /sysont tendance à varier d'une version de noyau à une autre (pas de distribution en distribution). C'est une difficulté avec laquelle les auteurs de programmes qui lisent des données /sysdoivent vivre ( exemple ).

Gilles 'SO- arrête d'être méchant'
la source
Merci, c'était mon problème exact. (J'utilise i3 et i3status et de temps en temps je dois changer le chemin de température du processeur) C'est alors que j'ai décidé d'écrire un petit programme pour faire exactement cela.
yaku
7

Première, /sys/class c'est un moyen pratique de trouver des choses /sys. Vous trouverez que tout à l'intérieur est en fait un lien symbolique; Je suis sûr que votre première strophe est liée à votre troisième strophe.

La deuxième strophe est le noyau qui lit la température directement depuis le CPU / chipset. La troisième strophe est le noyau obtenant la valeur du BIOS via ACPI. Alors que sur votre système, ils peuvent donner la même réponse, ils n'en ont pas besoin (par exemple, le BIOS peut utiliser des capteurs différents, en faire une moyenne ensemble ou appliquer un ajustement spécifique à la carte).

Enfin, chaque strophe a deux lectures différentes car il y a probablement deux thermomètres. Ou du moins, l'API du matériel le permet.

derobert
la source
Merci pour votre réponse. Cela rend les choses plus claires. Pourtant, sur un ordinateur portable différent avec deux cœurs, les chemins pourraient être différents, non? (Serait-ce /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp0_input /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_input par exemple?).
yaku
@yaku Oui, les chemins peuvent varier. Par exemple, un ordinateur portable pourrait avoir une zone de refroidissement pour (par exemple,) le disque dur, ou le northbridge, ou autre chose.
derobert
3

Jetez un œil aux fichiers * _label pour voir ce qui est signalé - voici mon 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 "" est juste utilisé comme "chat avec des noms de fichiers")

Voici donc une température totale du CPU, plus une température par cœur.

Sur un système multi-CPU plus grand, vous pouvez voir des dizaines d'entrées.

jm73
la source