¿Por qué Linux almacena temperaturas de CPU en tantos archivos?

10

Tengo una computadora portátil (thinkpad) con 2 cpus. Actualmente puedo leer las temperaturas de la CPU de los archivos a continuación 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

Mi pregunta es por qué el núcleo almacena esta información en tantos lugares diferentes y cuál es el archivo "estándar" para leer la temperatura de una CPU.

¿Está sucediendo esto debido a systemd (estoy usando Arch Linux) o distribuciones de Linux no systemd como Slackware tienen un enfoque diferente?

yaku
fuente

Respuestas:

12

En realidad, la temperatura no se almacena en ningún lado. /syses un sistema de archivos en memoria , y la lectura de archivos /sysinvoca el código en el núcleo que calcula los valores sobre la marcha.

Los diferentes directorios corresponden a diferentes formas en que el hardware puede informar las temperaturas. Los temp*_inputarchivos tienen un asociado temp*_labelque identifica la temperatura de qué componente se informa.

Las ubicaciones bajo /systienden a variar de una versión de núcleo a otra (no de distribución a distribución). Esa es una dificultad con la que /systienen que vivir los autores de programas que leen datos ( ejemplo ).

Gilles 'SO- deja de ser malvado'
fuente
Gracias, ese fue mi problema exacto. (Uso i3 e i3status y de vez en cuando tengo que cambiar la ruta de temperatura de la CPU) Fue entonces cuando decidí escribir un pequeño programa para hacer esto.
yaku
7

Primero, /sys/classes una forma conveniente de encontrar cosas /sys. Encontrarás que todo lo que hay dentro es en realidad un enlace simbólico; Estoy bastante seguro de que su primera estrofa está vinculada a su tercera estrofa.

La segunda estrofa es el núcleo que lee la temperatura directamente desde la CPU / chipset. La tercera estrofa es el núcleo que obtiene el valor del BIOS a través de ACPI. Si bien en su sistema pueden dar la misma respuesta, no es necesario (por ejemplo, el BIOS podría estar usando sensores diferentes, promediando algunos juntos o aplicando algún ajuste específico de la placa).

Finalmente, cada estrofa tiene dos lecturas diferentes porque probablemente hay dos termómetros. O al menos, la API del hardware lo permite.

derobert
fuente
Gracias por su respuesta. Esto aclara las cosas. Sin embargo, en una computadora portátil diferente con dos núcleos, las rutas podrían ser diferentes, ¿verdad? (¿Podría ser /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp0_input /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_input, por ejemplo?).
yaku
@yaku Sí, los caminos pueden variar. Por ejemplo, una computadora portátil podría tener una zona de enfriamiento para (por ejemplo,) el disco duro, o el puente norte, o lo que sea.
derobert
3

Eche un vistazo a los archivos * _label para ver lo que se informa: aquí está mi 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 "" solo se usa como "gato con nombres de archivo")

Entonces, aquí hay una temperatura total de la CPU, más una temperatura por núcleo.

En un sistema más grande, con múltiples CPU, puede ver docenas de entradas.

jm73
fuente