linuxでRyzenの温度センサーを動くようにする

Ryzenには温度監視機能があるのですが、本記事執筆現在、linuxのいわゆるupstream kernel(最新版は4.13)ではドライバが無いのでこの機能が使えません。温度監視をしたければWindowsFreeBSDを使うしかないという悲しい状況です。sensorsコマンドを実行しても次の通り、温度に関する情報は得られません。

$ sensors
asus-isa-0000
Adapter: ISA adapter
cpu_fan:        0 RPM

$ 

しかし、まだupstreamにマージされていないパッチを適用すれば、この機能を使えます。

AMD Zen Temperature Monitoring On Linux Is Working With Hwmon-Next - Phoronix

今使っているカーネルに関連パッチをcherry-pickしてきてもいいのですが、とりあえず試してみるだけなので、手間を省いて次のように関連パッチが入ったbranch, hwmon-nextをそのままビルドします。

$ cd ~/src/linux
$ git remote add staging git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
$ git fetch staging
...
$ git checkout staging/hwmon-next
...
$ cp /boot/config-$(uname -r) .config
$ make olddefconfig
...
$ make menuconfig                    # SENSORS_K10TEMP(Device Drivers -> Hardware Monitoring support -> AMD Family 10h+ temperature sensor)を選択
...
$ make -j$(grep -c processor /proc/cpuinfo)
...
$ 

できたカーネル上でsensorsコマンドを実行してみましょう(インストールとリブートの手順は省いています)。

$ sensors
k10temp-pci-00c3
Adapter: PCI adapter
temp1:        +31.0°C  (high = +70.0°C)                  # 温度情報が出力されている

asus-isa-0000
Adapter: ISA adapter
cpu_fan:        0 RPM

$ 

うまく動いているようです。よかったよかった。後はupstream kernelにパッチがマージされるまで待ちです。残念ながら4.14のマージウィンドウは逃しているので4.15以降です。

ちなみに関連パッチは次の3つです。4.13に以下3つのパッチをcherry-pickした状態で温度情報が採取できていることを確認済です。

  • 398f86f hwmon: (k10temp) Add support for temperature offsets
  • 3b7317cc hwmon: (k10temp) Add support for family 17h
  • 12dbb1a hwmon: (k10temp) Move chip specific code into probe function