Por que o Linux armazena temperaturas de cpu em tantos arquivos?

6

Eu tenho um laptop (thinkpad) com 2 cpus. Atualmente eu posso ler as temperaturas da CPU dos arquivos abaixo com 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

A minha pergunta é por que o kernel armazena esta informação em tantos lugares diferentes e qual é o arquivo "padrão" para ler a temperatura da CPU?

Isso está acontecendo devido ao systemd (estou usando o Arch Linux) ou a distribuições Linux não-systemd como o Slackware têm uma abordagem diferente?

    
por yaku 10.11.2014 / 22:55

3 respostas

7

Na verdade, a temperatura não é armazenada em nenhum lugar. /sys é um sistema de arquivos na memória e a leitura de arquivos em /sys invoca código no kernel que calcula valores na mosca.

Os diferentes diretórios correspondem a diferentes maneiras pelas quais o hardware pode reportar temperaturas. Os arquivos temp*_input têm um temp*_label associado que identifica a temperatura do componente que é relatada.

Os locais sob /sys tendem a variar da versão do kernel para a versão do kernel (não da distribuição para a distribuição). Essa é uma dificuldade que autores de programas que leem dados em /sys têm que conviver com ( exemplo ).

    
por 11.11.2014 / 03:18
6

Primeiro, /sys/class é uma maneira conveniente de encontrar coisas em /sys . Você encontrará tudo dentro de um link simbólico; Tenho certeza que sua primeira estrofe é symlink'd para sua terceira estrofe.

A segunda estrofe é o kernel lendo a temperatura diretamente da CPU / chipset. A terceira estrofe é o kernel obtendo o valor do BIOS via ACPI. Enquanto no seu sistema eles podem dar a mesma resposta, eles não precisam (por exemplo, o BIOS pode estar usando sensores diferentes, calculando a média de alguns juntos, ou aplicando algum ajuste específico da placa).

Finalmente, cada estrofe tem duas leituras diferentes porque provavelmente existem dois termômetros. Ou pelo menos, a API do hardware permite isso.

    
por 10.11.2014 / 23:40
1

Dê uma olhada nos arquivos * _label para ver o que está sendo relatado - aqui está meu 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 "" é usado apenas como "cat com nomes de arquivos")

Então aqui está uma temperatura total da CPU, mais uma temperatura por núcleo.

Em um sistema maior com várias CPUs, você pode ver dezenas de entradas.

    
por 04.07.2015 / 12:32