刹那(せつな)の瞬き

Willkömmen! Ich heiße Setsuna. Haben Sie etwas Zeit für mich?

Ryzen5 2600X / B450でsensorsの出力結果が思ってたのと違う

少し前に、Kernel 5.7 で Thermal Pressure が導入されてた事を知り、直接は関係ないのですが、私の PC でも温度センサを確認してみたくなりました。

今まで PC の温度センサについては無頓着だったので、これを機に調べてみました。
そしたら、思ってたより根が深かったので、備忘録として残しておきます。

....

現在、私が Ubuntu 20.04 LTS で使用しているハード構成は、

ですが、sudo apt install linux-generic-hwe-20.04-edgeを実行済みなので、

$ uname -r
5.8.0-25-generic

カーネルは kernel 5.8 系になってます。
※追記: 後述する内容は kernel 5.4 系のままでも同様でした。

....

まずは lm-sensors を導入します。

$ sudo apt install lm-sensors

すぐに sensors を実行するとこんな感じです。

$ sensors
k10temp-pci-00c3
Adapter: PCI adapter
Vcore:       788.00 mV 
Vsoc:        925.00 mV 
Tctl:         +26.8°C  
Tdie:         +26.8°C  
Icore:         4.00 A  
Isoc:          6.25 A  

iwlwifi_1-virtual-0
Adapter: Virtual device
temp1:            N/A  

思ってたのと随分違ってます。CPU コアの温度が出力されてません。

◆ とりあえず調べてみる

$ sudo sensors-detect --auto
# sensors-detect version 3.6.0
# System: Gigabyte Technology Co., Ltd. B450 AORUS PRO WIFI [Default string]
# Board: Gigabyte Technology Co., Ltd. B450 AORUS PRO WIFI-CF
# Kernel: 5.8.0-25-generic x86_64
# Processor: AMD Ryzen 5 2600X Six-Core Processor (23/8/2)
 〜(ざっくり省略)〜

Now follows a summary of the probes I have just done.

Driver `k10temp' (autoloaded):
  * Chip `AMD Family 17h thermal sensors' (confidence: 9)

Driver `to-be-written':
  * ISA bus, address 0xa40
    Chip `ITE IT8686E Super IO Sensors' (confidence: 9)

Driver `it87':
  * ISA bus, address 0xa60
    Chip `ITE IT8792E Super IO Sensors' (confidence: 9)

Note: there is no driver for ITE IT8686E Super IO Sensors yet.
Check https://hwmon.wiki.kernel.org/device_support_status for updates.

To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
it87
#----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)

Unloading cpuid... OK

出力結果を鑑みるに、まずは it87 モジュールを入れれば良さそうです。

ITE IT8686Eや /etc/modues に it87 を追記するのは後回し。
その前に it87 モジュールをロードして、sensors を実行してみます。

$ sudo modprobe it87
$ sensors
it8792-isa-0a60
Adapter: ISA adapter
in0:         774.00 mV (min =  +0.00 V, max =  +2.78 V)
in1:           1.08 V  (min =  +0.00 V, max =  +2.78 V)
in2:           1.12 V  (min =  +0.00 V, max =  +2.78 V)
+3.3V:         1.68 V  (min =  +0.00 V, max =  +2.78 V)
in4:           1.30 V  (min =  +0.00 V, max =  +2.78 V)
in5:           1.17 V  (min =  +0.00 V, max =  +2.78 V)
in6:           2.78 V  (min =  +0.00 V, max =  +2.78 V)  ALARM
3VSB:          1.67 V  (min =  +0.00 V, max =  +2.78 V)
Vbat:          1.69 V  
fan1:           0 RPM  (min =    0 RPM)
fan2:           0 RPM  (min =    0 RPM)
fan3:           0 RPM  (min =    0 RPM)
temp1:        +28.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp2:        +33.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp3:        +34.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
intrusion0:  ALARM

k10temp-pci-00c3
Adapter: PCI adapter
Vcore:       788.00 mV 
Vsoc:        931.00 mV 
Tctl:         +27.0°C  
Tdie:         +27.0°C  
Icore:         7.00 A  
Isoc:          6.00 A  

iwlwifi_1-virtual-0
Adapter: Virtual device
temp1:            N/A  

それっぽい出力結果になりましたが、まだ何か違ってます。
CPU コア 6 個分の温度表示が無いし、FAN の回転数も得られてません。

◆ it87 モジュールを最新にしてみる

前述した sensors-detect の出力結果からChip `ITE IT8686E Super IO Sensors'が解決できてない件について調べたところ「it87 モジュールを最新にすれば良い」との事なので、試してみます。

$ cd ~/work
$ git clone https://github.com/a1wong/it87.git
Cloning into 'it87'...
remote: Enumerating objects: 458, done.
remote: Total 458 (delta 0), reused 0 (delta 0), pack-reused 458
Receiving objects: 100% (458/458), 200.04 KiB | 388.00 KiB/s, done.
Resolving deltas: 100% (277/277), done.
$ cd it87
$ sudo make dkms

Creating symlink /var/lib/dkms/it87/v1.0-48-g40bec4b/source ->
                 /usr/src/it87-v1.0-48-g40bec4b

DKMS: add completed.

Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
cleaning build area...
make -j12 KERNELRELEASE=5.8.0-25-generic TARGET=5.8.0-25-generic...
Signing module:
 - /var/lib/dkms/it87/v1.0-48-g40bec4b/5.8.0-25-generic/x86_64/module/it87.ko
Secure Boot not enabled on this system.
cleaning build area...

DKMS: build completed.

it87.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.8.0-25-generic/updates/dkms/

depmod..........

DKMS: install completed.

正常終了したら、一旦 it87 モジュールを解除して、再度ロードします。
最新モジュールにしたら sensors を実行確認します。

$ sudo modprobe -r it87
$ sudo modprobe it87
$ sensors
it8686-isa-0a40
Adapter: ISA adapter
in0:         768.00 mV (min =  +0.00 V, max =  +3.06 V)
in1:           2.00 V  (min =  +0.00 V, max =  +3.06 V)
in2:           2.00 V  (min =  +0.00 V, max =  +3.06 V)
in3:           2.02 V  (min =  +0.00 V, max =  +3.06 V)
in4:         924.00 mV (min =  +0.00 V, max =  +3.06 V)
in5:         888.00 mV (min =  +0.00 V, max =  +3.06 V)
in6:           1.20 V  (min =  +0.00 V, max =  +3.06 V)
3VSB:          3.26 V  (min =  +0.00 V, max =  +6.12 V)
Vbat:          3.26 V  
fan1:         385 RPM  (min =    0 RPM)
fan2:           0 RPM  (min =    0 RPM)
fan3:           0 RPM  (min =    0 RPM)
fan4:           0 RPM  (min =    0 RPM)
fan5:           0 RPM  (min =    0 RPM)
temp1:        +29.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp2:        +32.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp3:        +31.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = AMD AMDSI
temp4:        +31.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp5:        +35.0°C  (low  =  +0.0°C, high = -120.0°C)  sensor = thermistor
temp6:        +41.0°C  (low  =  +0.0°C, high = -120.0°C)  sensor = thermistor
intrusion0:  ALARM

k10temp-pci-00c3
Adapter: PCI adapter
Vcore:       788.00 mV 
Vsoc:        925.00 mV 
Tctl:         +31.6°C  
Tdie:         +31.6°C  
Icore:         7.00 A  
Isoc:          7.75 A  

it8792-isa-0a60
Adapter: ISA adapter
in0:         414.00 mV (min =  +0.00 V, max =  +2.78 V)
in1:         948.00 mV (min =  +0.00 V, max =  +2.78 V)
in2:           1.08 V  (min =  +0.00 V, max =  +2.78 V)
+3.3V:         3.36 V  (min =  +0.00 V, max =  +5.56 V)
in4:           1.30 V  (min =  +0.00 V, max =  +2.78 V)
in5:           1.17 V  (min =  +0.00 V, max =  +2.78 V)
in6:           2.78 V  (min =  +0.00 V, max =  +2.78 V)  ALARM
3VSB:          3.33 V  (min =  +0.00 V, max =  +5.56 V)
Vbat:          3.38 V  
fan1:           0 RPM  (min =    0 RPM)
fan2:           0 RPM  (min =    0 RPM)
fan3:           0 RPM  (min =    0 RPM)
temp1:        +28.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp2:        +33.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp3:        +34.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
intrusion0:  ALARM

iwlwifi_1-virtual-0
Adapter: Virtual device
temp1:            N/A  

ようやく思ってたような出力結果が得られました。

最後に /etc/modules へ it87 を追記すれば作業完了です。

再起動して sensors を実行したところ、期待通りの出力結果になりました。

◆ 参考にしたサイト

※追記 2023-10-22

先日 BIOS を F64e まで更新し、OS のアップデートを実行しました。
その後、sensors を実行すると温度が正常に表示されません。

$ sensors
iwlwifi_1-virtual-0
Adapter: Virtual device
temp1:            N/A  

acpitz-acpi-0
Adapter: ACPI interface
temp1:        +16.8°C  (crit = +20.8°C)

k10temp-pci-00c3
Adapter: PCI adapter
Tctl:         +49.5°C  

対策として、/etc/modprobe.d/it87.confを用意します。

・ファイル: /etc/modprobe.d/it87.conf

options it87 ignore_resource_conflict=1

後は PC を再起動して、sensors を実行すると元通り表示されるはずです。