■CPU温度について調べてみる。
$ lsb_release -d
Description: Debian GNU/Linux 9.5 (stretch)
■lm-sensorsをインストール。
$ apt-cache search lm-sensors
libsensors4 - 温度/電圧/ファンセンサへのアクセス用ライブラリ
libsensors4-dev - lm-sensors 開発キット
lm-sensors - 温度・電圧・ファンセンサ読み取り用ユーティリティ
sensors-applet - ハードウェアセンサからの情報を Gnome パネルに表示
fancontrol - utility to control the fan speed
mate-sensors-applet - Display readings from hardware sensors in your MATE panel
mrtgutils-sensors - Utilities to generate statistics for mrtg (from lm-sensors)
nagios-plugins-contrib - Plugins for nagios compatible monitoring systems
psensor - display graphs for monitoring hardware temperature
psensor-server - Psensor server for monitoring hardware sensors remotely
xfce4-goodies - enhancements for the Xfce4 Desktop Environment
$ sudo apt-get install -y lm-sensors
$ dpkg -L lm-sensors | grep bin/
/usr/bin/sensors
/usr/bin/sensors-conf-convert
/usr/sbin/isadump
/usr/sbin/isaset
/usr/sbin/sensors-detect
■4コア/8スレッドのCPUが実装されている。
$ awk 'BEGIN{cnt=0}/model.name/{print cnt,$0;cnt++}' /proc/cpuinfo
0 model name : Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz
1 model name : Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz
2 model name : Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz
3 model name : Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz
4 model name : Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz
5 model name : Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz
6 model name : Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz
7 model name : Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz
$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +61.0°C (high = +83.0°C, crit = +99.0°C)
Core 1: +61.0°C (high = +83.0°C, crit = +99.0°C)
Core 2: +62.0°C (high = +83.0°C, crit = +99.0°C)
Core 3: +60.0°C (high = +83.0°C, crit = +99.0°C)
nouveau-pci-0100
Adapter: PCI adapter
GPU core: +0.90 V (min = +0.88 V, max = +1.08 V)
temp1: +51.0°C (high = +95.0°C, hyst = +3.0°C)
(crit = +105.0°C, hyst = +5.0°C)
(emerg = +135.0°C, hyst = +5.0°C)
■temp1はGPU、temp[2-5]がそれぞれCPU Core[0-3]のセンサー。
$ sensors -u
coretemp-isa-0000
Adapter: ISA adapter
Core 0:
temp2_input: 61.000
temp2_max: 83.000
temp2_crit: 99.000
temp2_crit_alarm: 0.000
Core 1:
temp3_input: 62.000
temp3_max: 83.000
temp3_crit: 99.000
temp3_crit_alarm: 0.000
Core 2:
temp4_input: 62.000
temp4_max: 83.000
temp4_crit: 99.000
temp4_crit_alarm: 0.000
Core 3:
temp5_input: 60.000
temp5_max: 83.000
temp5_crit: 99.000
temp5_crit_alarm: 0.000
nouveau-pci-0100
Adapter: PCI adapter
GPU core:
in0_input: 0.900
in0_min: 0.880
in0_max: 1.080
temp1:
temp1_input: 51.000
temp1_max: 95.000
temp1_max_hyst: 3.000
temp1_crit: 105.000
temp1_crit_hyst: 5.000
temp1_emergency: 135.000
temp1_emergency_hyst: 5.000
■確認出来る値のリストを一覧化。
$ find /sys/devices/ -type f -name "temp*" | awk '{gsub(".*temp[0-9]_","",$1);a[$1]+=1}END{for(n in a){print a[n],n}}'
4 crit_alarm
1 crit_hyst
5 input
1 max_hyst
1 auto_point1_temp
1 emergency_hyst
1 auto_point1_temp_hyst
5 crit
5 max
4 label
1 emergency
1 auto_point1_pwm
■emergencyとなったのはGPUが135°Cの時。
$ find /sys/devices/ -type f -name "temp*_emergency" | awk '{print "echo -n \042["$1"]:\042;awk \047{printf \042%3.4f\134n\042,$1/1000}\047 "$1}' |sh
[/sys/devices/pci0000:00/0000:00:03.0/0000:01:00.0/hwmon/hwmon1/temp1_emergency]:135.0000
■利用可能なセンサーの値を取得
単位は°C
$ find /sys/devices/ -type f -name "temp*_input" | awk '{print "echo -n \042["$1"]:\042;awk \047{printf \042%3.4f\134n\042,$1/1000}\047 "$1}' |sh
[/sys/devices/pci0000:00/0000:00:03.0/0000:01:00.0/hwmon/hwmon1/temp1_input]:55.0000
[/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_input]:70.0000
[/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_input]:73.0000
[/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_input]:74.0000
[/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_input]:75.0000
■max(sensorsではhigh)として、95°C(GPU)、83°C(CPU)が定義されている。
$ find /sys/devices/ -type f -name "temp*_max" | awk '{print "echo -n \042["$1"]:\042;awk \047{printf \042%3.4f\134n\042,$1/1000}\047 "$1}' |sh
[/sys/devices/pci0000:00/0000:00:03.0/0000:01:00.0/hwmon/hwmon1/temp1_max]:95.0000
[/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_max]:83.0000
[/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_max]:83.0000
[/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_max]:83.0000
[/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_max]:83.0000
■critとして、105°C(GPU)、99°C(CPU)のしきい値がある。
$ find /sys/devices/ -type f -name "temp*_crit" | awk '{print "echo -n \042["$1"]:\042;awk \047{printf \042%3.4f\134n\042,$1/1000}\047 "$1}' |sh
[/sys/devices/pci0000:00/0000:00:03.0/0000:01:00.0/hwmon/hwmon1/temp1_crit]:105.0000
[/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp5_crit]:99.0000
[/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp4_crit]:99.0000
[/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp3_crit]:99.0000
[/sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_crit]:99.0000
■/sysを直接参照する1秒置きの温度変化を見るには以下のようにする。
$ cat coretemp
find /sys/devices/ -type f -name "temp*" | awk '/input$|crit$|max$/{print "echo -n \042["$1"]:\042;awk \047{printf \042%3.4f\134n\042,$1/1000}\047 "$1}' |sh | sort -V
$ watch -d -n 1 '/bin/bash coretemp'
■lm-sensorsを使った1秒置きの温度変化を見るには以下のようにする。
$ watch -d -n 1 'sensors'
■その他、間接参照するファイルを追ってみる。
INTEL POWERCLAMP DRIVER
https://www.kernel.org/doc/Documentation/thermal/intel_powerclamp.txt
$ find /sys/devices/virtual/thermal/cooling_device[0-8] -type f -name "type" | xargs grep .
/sys/devices/virtual/thermal/cooling_device0/type:Processor
/sys/devices/virtual/thermal/cooling_device1/type:Processor
/sys/devices/virtual/thermal/cooling_device2/type:Processor
/sys/devices/virtual/thermal/cooling_device3/type:Processor
/sys/devices/virtual/thermal/cooling_device4/type:Processor
/sys/devices/virtual/thermal/cooling_device5/type:Processor
/sys/devices/virtual/thermal/cooling_device6/type:Processor
/sys/devices/virtual/thermal/cooling_device7/type:Processor
/sys/devices/virtual/thermal/cooling_device8/type:intel_powerclamp
$ find /sys/devices/virtual/thermal/cooling_device[0-7] -type l -ls | awk '{print $(NF-2),$NF}'
/sys/devices/virtual/thermal/cooling_device0/device ../../../LNXSYSTM:00/LNXCPU:00
/sys/devices/virtual/thermal/cooling_device0/subsystem ../../../../class/thermal
/sys/devices/virtual/thermal/cooling_device1/device ../../../LNXSYSTM:00/LNXCPU:01
/sys/devices/virtual/thermal/cooling_device1/subsystem ../../../../class/thermal
/sys/devices/virtual/thermal/cooling_device2/device ../../../LNXSYSTM:00/LNXCPU:02
/sys/devices/virtual/thermal/cooling_device2/subsystem ../../../../class/thermal
/sys/devices/virtual/thermal/cooling_device3/device ../../../LNXSYSTM:00/LNXCPU:03
/sys/devices/virtual/thermal/cooling_device3/subsystem ../../../../class/thermal
/sys/devices/virtual/thermal/cooling_device4/device ../../../LNXSYSTM:00/LNXCPU:04
/sys/devices/virtual/thermal/cooling_device4/subsystem ../../../../class/thermal
/sys/devices/virtual/thermal/cooling_device5/device ../../../LNXSYSTM:00/LNXCPU:05
/sys/devices/virtual/thermal/cooling_device5/subsystem ../../../../class/thermal
/sys/devices/virtual/thermal/cooling_device6/device ../../../LNXSYSTM:00/LNXCPU:06
/sys/devices/virtual/thermal/cooling_device6/subsystem ../../../../class/thermal
/sys/devices/virtual/thermal/cooling_device7/device ../../../LNXSYSTM:00/LNXCPU:07
/sys/devices/virtual/thermal/cooling_device7/subsystem ../../../../class/thermal
$ find /sys/class/thermal/cooling_device[0-7] -ls | awk '{print $(NF-2),$NF}'
/sys/class/thermal/cooling_device0 ../../devices/virtual/thermal/cooling_device0
/sys/class/thermal/cooling_device1 ../../devices/virtual/thermal/cooling_device1
/sys/class/thermal/cooling_device2 ../../devices/virtual/thermal/cooling_device2
/sys/class/thermal/cooling_device3 ../../devices/virtual/thermal/cooling_device3
/sys/class/thermal/cooling_device4 ../../devices/virtual/thermal/cooling_device4
/sys/class/thermal/cooling_device5 ../../devices/virtual/thermal/cooling_device5
/sys/class/thermal/cooling_device6 ../../devices/virtual/thermal/cooling_device6
/sys/class/thermal/cooling_device7 ../../devices/virtual/thermal/cooling_device7
■セルシウス度とファーレンハイト度について
「-f」オプションで°Fが出力される。
$ sensors -f
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +143.6°F (high = +181.4°F, crit = +210.2°F)
Core 1: +140.0°F (high = +181.4°F, crit = +210.2°F)
Core 2: +141.8°F (high = +181.4°F, crit = +210.2°F)
Core 3: +140.0°F (high = +181.4°F, crit = +210.2°F)
nouveau-pci-0100
Adapter: PCI adapter
GPU core: +0.90 V (min = +0.88 V, max = +1.08 V)
temp1: +122.0°F (high = +203.0°F, hyst = +37.4°F)
(crit = +221.0°F, hyst = +41.0°F)
(emerg = +275.0°F, hyst = +41.0°F)
■highの値は83.0°Cと分かっているので、それぞれ以下の公式に当てはめて計算してみる。
計算しやすいように、9/5=1.8000とする。
°C=(°F-32)/1.8000
°F=1.8000*°C+32
$ echo "scale=4; 9/5" | bc
1.8000
$ echo 181.4 | awk '{printf "%3.1f\n",($1-32)/1.8000}'
83.0
$ echo 83.0 | awk '{printf "%3.1f\n",(1.8*$1)+32}'
181.4