Perché Linux memorizza le temperature della CPU su così tanti file?


8

Ho un laptop (thinkpad) con 2 cpus. Attualmente posso leggere le temperature della CPU dai file qui sotto con 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

La mia domanda è: perché il kernel memorizza queste informazioni in così tanti posti diversi e quale è il file "standard" per leggere la temperatura di una CPU?

Questo sta accadendo a causa di distro Linux systemd (sto usando Arch Linux) o non systemd come Slackware hanno un approccio diverso?

Risposte:


10

In realtà, la temperatura non è memorizzata da nessuna parte. /sysè un file system in memoria e la lettura da file in /syscodice invoca il codice nel kernel che calcola i valori al volo.

Le diverse directory corrispondono a diversi modi in cui l'hardware può riportare le temperature. Ai temp*_inputfile è associato un temp*_labelelemento che identifica la temperatura del componente riportata.

Le posizioni sotto /systendono a variare dalla versione del kernel alla versione del kernel (non dalla distribuzione alla distribuzione). Questa è una difficoltà con cui gli autori di programmi che leggono i dati /sysdevono convivere ( esempio ).


Grazie, quello era il mio esatto problema (uso i3 e i3status e di tanto in tanto devo cambiare il percorso della temperatura della cpu) Fu allora che decisi di scrivere un piccolo programma per fare proprio questo.
yaku,

7

Innanzitutto, /sys/classè un modo conveniente per trovare le cose /sys. Troverai che tutto dentro è in realtà un link simbolico; Sono abbastanza sicuro che la tua prima strofa sia collegata alla tua terza strofa.

La seconda stanza è il kernel che legge la temperatura direttamente dalla CPU / dal chipset. La terza stanza è il kernel che ottiene il valore dal BIOS tramite ACPI. Mentre sul tuo sistema possono dare la stessa risposta, non è necessario (ad esempio, il BIOS potrebbe utilizzare sensori diversi, fare una media di alcuni insieme o applicare alcune regolazioni specifiche della scheda).

Infine, ogni stanza ha due letture diverse perché probabilmente ci sono due termometri. O almeno, l'API dell'hardware lo consente.


Grazie per la tua risposta. Questo rende le cose più chiare. Eppure su un laptop diverso con due core i percorsi potrebbero essere diversi, giusto? (Potrebbe essere /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp0_input /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_input per esempio?).
yaku,

@yaku Sì, i percorsi potrebbero variare. Ad esempio, un laptop potrebbe avere una zona di raffreddamento per (ad esempio) il disco rigido, il northbridge o qualsiasi altra cosa.
derobert,

1

Dai un'occhiata ai file * _label per vedere cosa viene segnalato - ecco il mio 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 "" è appena usato come "gatto con nomi di file")

Quindi ecco una temperatura totale della CPU, più una temperatura per core.

Su un sistema più grande e multi-CPU potresti vedere dozzine di voci.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.