저는 CPU가 2개인 노트북(씽크패드)을 가지고 있습니다. 현재 cat(1)을 사용하여 다음 파일에서 CPU 온도를 읽을 수 있습니다.
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
내 질문은 왜 커널이 이 정보를 그렇게 많은 다른 장소에 저장하는지, 그리고 어느 것이 CPU 온도를 읽기 위한 "표준" 파일인지입니다.
이것은 systemd(저는 Arch Linux를 사용하고 있습니다) 때문에 발생합니까, 아니면 Slackware와 같은 시스템이 아닌 Linux 배포판이 다른 접근 방식을 가지고 있습니까?
답변1
실제로 온도는 그렇지 않습니다.저장됨어딘가에. /sys
는메모리 파일 시스템, 의 파일에서 /sys
동적으로 계산된 값을 호출하는 커널의 코드를 읽습니다.
다양한 디렉토리는 하드웨어가 온도를 보고하는 다양한 방식에 해당합니다. 이러한 파일에는 보고되는 구성 요소의 온도를 식별하는 temp*_input
관련 ID가 있습니다 .temp*_label
아래 위치는 /sys
배포판이 아닌 커널 버전에 따라 달라지는 경향이 있습니다. 이는 데이터를 읽는 프로그램 작성자가 /sys
견뎌야 하는 어려움입니다(예).
답변2
첫째, /sys/class
에서 콘텐츠를 찾는 편리한 방법입니다 /sys
. 거기에 있는 모든 것이 실제로 심볼릭 링크라는 것을 알게 될 것입니다. 첫 번째 섹션이 세 번째 섹션에 심볼릭 링크되어 있다고 확신합니다.
두 번째 섹션은 커널이 CPU/칩셋에서 직접 온도를 읽는 곳입니다. 세 번째 섹션은 커널이 ACPI를 통해 BIOS에서 값을 얻는 곳입니다. 시스템에서 동일한 답변을 제공할 수 있지만 반드시 그럴 필요는 없습니다(예를 들어 BIOS는 서로 다른 센서를 사용하거나 여러 센서의 평균을 구하거나 일부 마더보드별 조정을 적용할 수 있음).
마지막으로 두 개의 온도계가 있을 수 있으므로 각 섹션에는 두 개의 서로 다른 판독값이 있습니다. 또는 적어도 하드웨어의 API가 이를 허용합니다.
답변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 ""는 "파일 이름이 있는 고양이"로만 작동함)
다음은 총 CPU 온도와 각 코어의 온도입니다.
대규모 다중 CPU 시스템에서는 수십 개의 항목을 볼 수 있습니다.