先日、Linux自作PC(Debian 9.3 stretch)にCPUクーラーとケースファンの増設を行いました。

ファンの速度はBIOSから設定し、Linuxのターミナルからも現在値を確認しようと設定を施したのですが、どうにもうまくいかなかったので状況をまとめておきます。

対象の環境

以下の記事で作成したLinux自作PCが今回の検証環境です。

  • CPU: i3 7100
  • CPU cooler: Scythe 虎徹MarkII SCKTT-2000
  • GPU: EVGA GTX1070 FTW2 iCX
  • MB: MSI H270 PC Mate
  • Mem: CFD Crucial W4U2400CM-8G DDR4-2400 8GBx2
  • Case: Fractal Design Define C
    • ENERMAX T.B.Silence PWM UCTB14P: 1基増設
  • HDD: WD Red WD20EFRX
  • Power: Corsair CMPSU650HXJP

sensorsコマンドによる温度取得

Debianでは、lm-sensorパッケージのsensorsコマンドによりCPUの温度やファン速度の取得ができます。

本環境でsensorsコマンドを実行した際のログを以下に示します。

$ sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:        +27.8°C  (crit = +119.0°C)
temp2:        +29.8°C  (crit = +119.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +37.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:         +36.0°C  (high = +80.0°C, crit = +100.0°C)
Core 1:         +37.0°C  (high = +80.0°C, crit = +100.0°C)

どうやらファン速度が取得できていないようです。

sensors-detectの再確認

lm-sensorsの初期設定時に、温度センサーの設定が適切に出来ていなかったことが原因かと考え、再度確認を行いました。

$ sudo sensors-detect
# sensors-detect revision 6284 (2015-05-31 14:00:33 +0200)
# System: MSI MS-7A72 [1.0]
# Board: MSI H270 PC MATE (MS-7A72)
# Kernel: 4.9.0-6-amd64 x86_64
# Processor: Intel(R) Core(TM) i3-7100 CPU @ 3.90GHz (6/158/9)
...

Driver `coretemp':
  * Chip `Intel digital thermal sensor' (confidence: 9)

...

Trying family `VIA/Winbond/Nuvoton/Fintek'...               Yes
Found unknown chip with ID 0xd352

...

To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
coretemp
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!

Do you want to add these lines automatically to /etc/modules? (yes/NO)yes
Successful!

Monitoring programs won't work until the needed modules are
loaded. You may want to run '/etc/init.d/kmod start'
to load them.

Unloading i2c-dev... OK
Unloading cpuid... OK

推測その1: /etc/modulesへの追加

まずは以下の記事にあるように、/etc/modulesへの追加が正常に行えていなかったのではないかと推測しました。

そこで、Do you want to add these lines automatically to /etc/modules? (yes/NO)でyesを選択し、設定を反映した後再起動しました。

$ sudo /etc/init.d/kmod start
$ sudo shutdown -r now
...
$ sensors

これだけではsensorsの温度取得はできませんでした。

推測その2: Grubの追加設定

上記サイトでGrubの追加設定も行われていたので、こちらでも試してみました。

/etc/default/grubを編集します。

GRUB_CMDLINE_LINUX=""
↓
GRUB_CMDLINE_LINUX="acpi_enforce_resources=lax"

これでgrubに設定を反映させますが、ファン速度の取得は相変わらずできませんでした。

$ sudo update-grub
$ sudo shutdown -r now

推測その3: 温度センサードライバが見つかっていない

detect-sensorのログに以下の行がありました。

Trying family `VIA/Winbond/Nuvoton/Fintek'...               Yes
Found unknown chip with ID 0xd352

これを中心にログを核にいしてみると、どうやらcoretempでCPU温度用のドライバは読み込めていても、super IOのchipの検出がされていないように見受けられます。

状況としては、下記のGithub Issueで上がっている状況に近いでしょうか。

どうやら0xd352はNCT6795Dに対応しているようですが、そのドライバが見つからないということのようです。

ひとまずmodprobe nct6775 force_id=0xd120を実行してやればセンサー値の読み込みはできるようです。

むりやりNCT6775で読み込んでいるため、完全にデータが一致しているとは限らないようですが。

$ sudo modprobe nct6775 force_id=0xd120
$ sensors
nct6793-isa-0a20
Adapter: ISA adapter
in0:                    +0.76 V  (min =  +0.00 V, max =  +1.74 V)
in1:                    +1.03 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in2:                    +3.42 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in3:                    +3.41 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in4:                    +1.02 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in5:                    +0.15 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in6:                    +1.13 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in7:                    +3.41 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in8:                    +3.14 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in9:                    +1.02 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in10:                   +1.06 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in11:                   +0.00 V  (min =  +0.00 V, max =  +0.00 V)
in12:                   +1.00 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in13:                   +0.61 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in14:                   +1.53 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
fan1:                     0 RPM  (min =    0 RPM)
fan2:                   521 RPM  (min =    0 RPM)
fan3:                   773 RPM  (min =    0 RPM)
fan4:                   731 RPM  (min =    0 RPM)
fan5:                     0 RPM  (min =    0 RPM)
SYSTIN:                 +36.0°C  (high =  +0.0°C, hyst =  +0.0°C)  ALARM  sensor = CPU diode
CPUTIN:                 +29.5°C  (high = +114.0°C, hyst = +87.0°C)  sensor = thermistor
AUXTIN0:                +19.0°C    sensor = thermistor
AUXTIN1:                +22.0°C    sensor = thermistor
AUXTIN2:               -128.0°C    sensor = thermistor
AUXTIN3:                 -2.0°C    sensor = thermistor
PECI Agent 0:           +28.0°C
PCH_CHIP_CPU_MAX_TEMP:   +0.0°C
PCH_CHIP_TEMP:           +0.0°C
PCH_CPU_TEMP:            +0.0°C
intrusion0:            ALARM
intrusion1:            ALARM
beep_enable:           disabled

acpitz-virtual-0
Adapter: Virtual device
temp1:        +27.8°C  (crit = +119.0°C)
temp2:        +29.8°C  (crit = +119.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +32.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:         +32.0°C  (high = +80.0°C, crit = +100.0°C)
Core 1:         +29.0°C  (high = +80.0°C, crit = +100.0°C)

ちなみにnct6775のアンロードは次で行えます。

$ sudo modprobe -r nct6775

確かにこれで表示されるようにはなりましたが、ファン速度の取得が正常なのかは疑問です。

例えばfan1が0%ですが、これはCPUファンが停止しているということでしょうか。

現状では、ファンの制御はBIOSから行ったほうがよさそうです。

とりあえずは温度を注視していれば大きな問題にはならないと考えて、カーネルの自前ビルドとかは今回はパスということで。

まとめ

  • Debian9.3 + MSI H270 PC Mateでファン速度を取得できない
  • 原因はsuper IOのドライバが読み込めないため
  • 別のドライバで無理やり読み込めるが、正しい値かは不明
  • カーネルのリビルドという手もあるが、今回は温度のみ監視で代用することにする