■CPUクーラを交換、1時間毎に温度情報をsyslogに転送する。
今回はCPUクーラをリテール品から新規で購入した品に交換する。
リテール品とはメーカーがエンドユーザー向けに出荷した正規品のこと。
純正品とも呼ばれる。
E97378-001 (Core i7 870のリテール品)
$ awk '/model name/{a[$0]+=1}END{for(n in a){print a[n],n}}' /proc/cpuinfo
8 model name : Intel(R) Core(TM) i7 CPU 870 @ 2.93GHz
■Core i7 870は第一世代の古いCPUで温度が上昇しやすい傾向はあるものの、
グリス寿命か純正品のファンコントローラの寿命を疑っていた。
時間が無かったので長いこと放置していたが、
せっかくCPUクーラを購入したので、グリスを塗布するだけの切り分けは今回は行わず、
素直にCPUクーラも交換するにした。
CPU温度について調べてみる。
http://labunix.hateblo.jp/entry/20181110/1541838190
CPUの温度上昇による無応答、シャットダウンに対応する。
http://labunix.hateblo.jp/entry/20181108/1541681890
■購入の基準はPWMのために4ピンであることという条件以外は特になかったので、
アルミ+銅はリテール品と同じ、風量と騒音値が良さそうだったのと、
単純に安かった以下を購入。
MONOCHROME PRO
https://kakaku.com/item/K0000572696/
若干リテール品よりも大きかったが、特に干渉することもなかったので、
仮設置して起動、問題なさそうだったのを確認してから、
バックプレートをつけるためにマザボを一度外して本設置とした。
■ファンクーラの寿命について
ファンクーラの寿命は40,000時間(5年にちょっと届かない程度)らしい。
この意味でもグリスを塗布するだけの切り分けは不要に思える。
$ echo 40000 | awk '{print $1/24/365"年"}'
4.56621年
■2018年11月10日までのログからすると、温度異常を検知したのは9862007回だった。
調べてはいないが、high 83°C ~ crit 99°Cの間の検知回数がTotal eventで、crit超えると電源OFFとなると推測。
$ ls -l --time-style '+%Y/%m/%d %H:%M:%S' /var/log/syslog*
-rw-r----- 1 root adm 25654 2019/04/28 20:17:01 /var/log/syslog
-rw-r----- 1 root adm 872748 2019/04/28 19:48:45 /var/log/syslog.1
-rw-r----- 1 root adm 3597 2018/11/10 00:09:08 /var/log/syslog.2.gz
-rw-r----- 1 root adm 59259 2018/11/09 00:09:57 /var/log/syslog.3.gz
-rw-r----- 1 root adm 4514 2018/11/08 00:08:46 /var/log/syslog.4.gz
-rw-r----- 1 root adm 12610 2018/11/07 00:08:39 /var/log/syslog.5.gz
-rw-r----- 1 root adm 52728 2018/11/06 00:07:14 /var/log/syslog.6.gz
-rw-r----- 1 root adm 9012 2018/11/05 00:08:52 /var/log/syslog.7.gz
$ sudo zcat /var/log/syslog.[2-7].gz | \
awk 'BEGIN{max=0}/temperature/&&/total events/{gsub("\\)","",$NF);if(max<$NF){max=$NF}}END{print max}'
9862007
■交換後、アイドル時は20~25°C前後、ピーク時でも45°C程度、GPUは35°C程度になった。
過去のsensors出力結果はアイドル時60~65°C、GPUもつられて65°C程度だったので、
十分改善されている。
$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +23.0°C (high = +83.0°C, crit = +99.0°C)
Core 1: +23.0°C (high = +83.0°C, crit = +99.0°C)
Core 2: +26.0°C (high = +83.0°C, crit = +99.0°C)
Core 3: +22.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: +35.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)
$ sensors -u
coretemp-isa-0000
Adapter: ISA adapter
Core 0:
temp2_input: 25.000
temp2_max: 83.000
temp2_crit: 99.000
temp2_crit_alarm: 0.000
Core 1:
temp3_input: 22.000
temp3_max: 83.000
temp3_crit: 99.000
temp3_crit_alarm: 0.000
Core 2:
temp4_input: 25.000
temp4_max: 83.000
temp4_crit: 99.000
temp4_crit_alarm: 0.000
Core 3:
temp5_input: 22.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: 35.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
■sysstat(sar)では取得されていない情報なので、
以下のように簡単なワンライナーを作成する。
$ /usr/bin/sensors | \
awk '{if($0 ~ /Core/){a[$1$2]=$3}else{if($1 ~ /temp1/){gsub("temp1","GPU",$1);a[$1]=$2}}} \
END{for(n in a){print n,a[n]}}'
GPU: +35.0°C
Core0: +25.0°C
Core1: +23.0°C
Core2: +27.0°C
Core3: +23.0°C
■上記を少し変形してsyslogに送るためにloggerを使う。
以下のsocatを使うような制限は無いので、素直にloggerを使う。
socatを使ってrsyslogに任意のログを記録する。
http://labunix.hateblo.jp/entry/20180429/1525006357
$ cat /etc/cron.hourly/mysensors
/usr/bin/sensors | \
awk '{if($0 ~ /Core/){a[$1$2]=$3}else{if($1 ~ /temp1/){gsub("temp1","GPU",$1);a[$1]=$2}}} \
END{for(n in a){printf "%s %s",n,a[n]","}print ""}' | logger
$ sudo chmod +x /etc/cron.hourly/mysensors
$ sudo /etc/cron.hourly/mysensors
$ sudo find /etc/cron* -type f | grep cron.hourly `xargs`
/etc/crontab:17 * * * * root cd / && run-parts --report /etc/cron.hourly
■毎時17分に実行され、rootユーザとして出力されているのがcron。それ以外は手動実行のログ。
$ sudo awk '/GPU/{gsub($4,"dummy-host",$4);print}' /var/log/syslog
Apr 28 21:10:06 dummy-host labunix: GPU: +35.0°C,Core0: +25.0°C,Core1: +22.0°C,Core2: +27.0°C,Core3: +22.0°C,
Apr 28 21:17:01 dummy-host root: GPU: +35.0°C,Core0: +26.0°C,Core1: +23.0°C,Core2: +27.0°C,Core3: +22.0°C,
Apr 28 21:17:10 dummy-host labunix: GPU: +36.0°C,Core0: +26.0°C,Core1: +23.0°C,Core2: +26.0°C,Core3: +22.0°C,
■sudoコマンドで実行しても実行元ユーザになる。
$ sudo /etc/cron.hourly/mysensors
$ sudo awk '/GPU/{gsub($4,"dummy-host",$4);print}' /var/log/syslog
Apr 28 21:10:06 dummy-host labunix: GPU: +35.0°C,Core0: +25.0°C,Core1: +22.0°C,Core2: +27.0°C,Core3: +22.0°C,
Apr 28 21:17:01 dummy-host root: GPU: +35.0°C,Core0: +26.0°C,Core1: +23.0°C,Core2: +27.0°C,Core3: +22.0°C,
Apr 28 21:17:10 dummy-host labunix: GPU: +36.0°C,Core0: +26.0°C,Core1: +23.0°C,Core2: +26.0°C,Core3: +22.0°C,
Apr 28 21:21:41 dummy-host labunix: GPU: +36.0°C,Core0: +26.0°C,Core1: +23.0°C,Core2: +27.0°C,Core3: +22.0°C,
■なので、5列目がrootでGPUを含むログを探せば過去の傾向を追えるようになる。
$ sudo awk '$5 ~ /root/&&/GPU/{print}' /var/log/syslog
■CSV化
$ sudo awk '/:17:/&&$5 ~/root/ \
{gsub($4,"dummy-host",$4);gsub($5,"",$0); \
gsub("°C","",$0);gsub(": \\+| *",",",$0);print $0}' /var/log/syslog /var/log/syslog.1 | sort -uV
Apr,30,00:17:01,dummy-host,GPU,42.0,Core0,40.0,Core1,38.0,Core2,39.0,Core3,35.0,
Apr,30,01:17:01,dummy-host,GPU,42.0,Core0,39.0,Core1,36.0,Core2,39.0,Core3,36.0,
Apr,30,02:17:02,dummy-host,GPU,41.0,Core0,39.0,Core1,36.0,Core2,39.0,Core3,34.0,
Apr,30,03:17:01,dummy-host,GPU,41.0,Core0,34.0,Core1,33.0,Core2,37.0,Core3,32.0,
Apr,30,04:17:01,dummy-host,GPU,39.0,Core0,36.0,Core1,33.0,Core2,36.0,Core3,31.0,
Apr,30,05:17:01,dummy-host,GPU,39.0,Core0,31.0,Core1,29.0,Core2,33.0,Core3,28.0,
Apr,30,06:17:01,dummy-host,GPU,39.0,Core0,29.0,Core1,27.0,Core2,30.0,Core3,26.0,
Apr,30,07:17:01,dummy-host,GPU,38.0,Core0,28.0,Core1,25.0,Core2,29.0,Core3,25.0,
Apr,30,08:17:01,dummy-host,GPU,38.0,Core0,29.0,Core1,26.0,Core2,29.0,Core3,25.0,
Apr,30,09:17:01,dummy-host,GPU,38.0,Core0,29.0,Core1,26.0,Core2,30.0,Core3,25.0,
Apr,30,10:17:01,dummy-host,GPU,38.0,Core0,29.0,Core1,25.0,Core2,29.0,Core3,25.0,
Apr,30,11:17:01,dummy-host,GPU,38.0,Core0,29.0,Core1,26.0,Core2,30.0,Core3,25.0,
Apr,30,12:17:01,dummy-host,GPU,39.0,Core0,30.0,Core1,27.0,Core2,31.0,Core3,26.0,
Apr,30,13:17:01,dummy-host,GPU,39.0,Core0,29.0,Core1,26.0,Core2,30.0,Core3,25.0,
Apr,30,14:17:01,dummy-host,GPU,39.0,Core0,30.0,Core1,27.0,Core2,30.0,Core3,26.0,
Apr,30,15:17:01,dummy-host,GPU,40.0,Core0,30.0,Core1,28.0,Core2,32.0,Core3,27.0,
Apr,30,16:17:01,dummy-host,GPU,39.0,Core0,30.0,Core1,26.0,Core2,30.0,Core3,26.0,
Apr,30,17:17:01,dummy-host,GPU,39.0,Core0,29.0,Core1,27.0,Core2,30.0,Core3,26.0,
Apr,30,18:17:01,dummy-host,GPU,39.0,Core0,30.0,Core1,26.0,Core2,30.0,Core3,26.0,
Apr,30,19:17:01,dummy-host,GPU,41.0,Core0,31.0,Core1,29.0,Core2,32.0,Core3,28.0,
Apr,30,20:17:01,dummy-host,GPU,40.0,Core0,27.0,Core1,27.0,Core2,30.0,Core3,27.0,
Apr,30,21:17:01,dummy-host,GPU,41.0,Core0,31.0,Core1,28.0,Core2,32.0,Core3,28.0,
Apr,30,22:17:01,dummy-host,GPU,39.0,Core0,30.0,Core1,27.0,Core2,31.0,Core3,26.0,
Apr,30,23:17:01,dummy-host,GPU,39.0,Core0,27.0,Core1,27.0,Core2,30.0,Core3,26.0,
May,1,00:17:01,dummy-host,GPU,39.0,Core0,28.0,Core1,26.0,Core2,31.0,Core3,26.0,
May,1,01:17:02,dummy-host,GPU,39.0,Core0,30.0,Core1,26.0,Core2,30.0,Core3,26.0,
May,1,02:17:01,dummy-host,GPU,39.0,Core0,29.0,Core1,26.0,Core2,30.0,Core3,26.0,
May,1,03:17:01,dummy-host,GPU,38.0,Core0,29.0,Core1,26.0,Core2,29.0,Core3,26.0,
May,1,04:17:01,dummy-host,GPU,39.0,Core0,28.0,Core1,27.0,Core2,30.0,Core3,25.0,
May,1,05:17:01,dummy-host,GPU,39.0,Core0,30.0,Core1,27.0,Core2,30.0,Core3,26.0,
May,1,06:17:01,dummy-host,GPU,39.0,Core0,29.0,Core1,26.0,Core2,29.0,Core3,25.0,
May,1,07:17:01,dummy-host,GPU,39.0,Core0,29.0,Core1,26.0,Core2,30.0,Core3,25.0,
May,1,08:17:01,dummy-host,GPU,39.0,Core0,28.0,Core1,26.0,Core2,30.0,Core3,25.0,
May,1,09:17:01,dummy-host,GPU,39.0,Core0,29.0,Core1,26.0,Core2,30.0,Core3,25.0,
May,1,10:17:01,dummy-host,GPU,39.0,Core0,30.0,Core1,26.0,Core2,30.0,Core3,25.0,
May,1,11:17:01,dummy-host,GPU,39.0,Core0,30.0,Core1,26.0,Core2,30.0,Core3,25.0,
May,1,12:17:01,dummy-host,GPU,39.0,Core0,31.0,Core1,27.0,Core2,31.0,Core3,27.0,
May,1,13:17:01,dummy-host,GPU,39.0,Core0,30.0,Core1,27.0,Core2,30.0,Core3,26.0,
May,1,14:17:01,dummy-host,GPU,40.0,Core0,31.0,Core1,27.0,Core2,30.0,Core3,26.0,
May,1,15:17:01,dummy-host,GPU,41.0,Core0,32.0,Core1,28.0,Core2,32.0,Core3,28.0,
May,1,16:17:01,dummy-host,GPU,40.0,Core0,30.0,Core1,28.0,Core2,31.0,Core3,27.0,
May,1,17:17:01,dummy-host,GPU,40.0,Core0,30.0,Core1,28.0,Core2,32.0,Core3,27.0,
May,1,18:17:01,dummy-host,GPU,39.0,Core0,31.0,Core1,27.0,Core2,31.0,Core3,26.0,
May,1,19:17:01,dummy-host,GPU,40.0,Core0,30.0,Core1,27.0,Core2,32.0,Core3,27.0,
May,1,20:17:01,dummy-host,GPU,40.0,Core0,29.0,Core1,28.0,Core2,30.0,Core3,27.0,