Ryzen / Threadripper温度センサー:どのセンサーがどのカーネルモジュールに関連付けられており、それを有効にするか

Ryzen / Threadripper温度センサー:どのセンサーがどのカーネルモジュールに関連付けられており、それを有効にするか

Linux環境では、ASRock x399 TaichiマザーボードのAMD Threadripper 1950xでどのセンサーを監視できますか?次のように、昨年はRyzenプロセッサの温度モニタリングが発表されており、この機能は4.15カーネルに含まれていたそうです。https://www.phoronix.com/scan.php?page=news_item&px=AMD-Zen-Temps-Hwmon-Next。しかし、温度変化があるようで、カーネル4.18.6で次のように修正されました。https://www.phoronix.com/scan.php?page=news_item&px=Linux-4.18.6-k10temp-正しい

私が知る限り、Windowsのように、Linuxではコア固有の温度監視はまったくありません。

しかし、他のソースによると、私のマザーボードに基づいてモジュールを特別に作成する必要があるかもしれません。このガイドラインは、センサー検出の出力に基づいて適切なカーネルドライバを構築できることを示しているようです。https://linuxconfig.org/monitor-amd-ryzen-temporals-in-linux-with-latest-kernel-modules

センサーの検出によると、nct6775がありますが、適切なカーネルモジュールがあることを示すマークが見つかりません(lsmodを使用すると表示されません。見つける必要がある他の場所はありますか?)。残念ながら、リポジトリがgithubになくなったため、リポジトリからビルドできません。

だから私の質問は次のとおりです。

  1. どのドライバとカーネルモジュールがどのような情報を提供しますか?具体的には、どれがWindowsで利用可能なコアあたりの読み取り値を提供しますか?

  2. Linuxでは、Ryzen温度ドライバの状態は何ですか:完全性、不完全さ、パッチワーク、永遠に信頼できない?

  3. nct6775を作ることができれば、すでに持っているK10以外に何が得られますか?ビルドに必要なソースコードはどこで入手できますか?

  4. なぜこれがあまりよく文書化されていないのですか?リリース後1年半の間、この問題に関する明確な情報がないAMDは、業界標準に比べて非常に無力なのでしょうか。

答え1

[OP 削除された回答:] まだ気になります。なぜnct6775を使用できるのですか?

次のリンクには、一般的な質問に答えるための多くの試みがあります。残念ながら、それらのどれも包括的ではないので、改善するよう努めます。 Linux:デバイスが使用するデバイスドライバを見つける方法は?

あなたの場合、センサーデバイスはに表示されているリンクの1つとして見つけることができますls -l /sys/class/hwmon/*。コマンドを展開して、すぐにカーネルモジュールを見つけることができます。

ls -l /sys/class/hwmon/*/device/driver/module

しかし、順序にはいくつかの仮定があります。すべての状況で動作するわけではありません。そのコマンドが機能しない場合は、チェーン内の個々のリンクを確認して範囲を絞り込みます。 3つの可能な状況があります。

  1. driverリンクはありますが、moduleリンクはありません。

    これはドライバがカーネルに組み込まれていることを意味します!これはあなたの質問に答えることができます:-).

    ls -lリンクも同じですdriver。つまり、ドライバ名を表示するには、上記のコマンドを変更してその/module部分を削除します。通常、ドライバ名はロード可能なモジュール名と同じですが、時には異なる場合があります。

  2. リンクdriverではないまもなくdeviceは、しかし...

    上記のコマンドが機能しない場合は、等deviceに置き換える必要があります。device/device

    このdeviceリンクをクリックすると、親デバイスに移動します。しかし、時にはドライバが親デバイスにあるか、それ以上であることがあります。 :-).

  3. device親リンクがないか、driver親リンクがまったくありません。device

    このdeviceリンクをクリックすると、親デバイスに移動します。たとえば、ネットワークデバイスがあり、プロバイダを指すことができます/sys/class/wlan0/sys/class/wlan0/devicewlan0

    あなたの場合は、標準バスにデバイスのようなものがないと想像することができますpci。この場合、運転者はしなければならないでカスタムデバイスを定義します/sys/devices/platform/。これがcoretemp私のIntel CPUドライバが行うことです。

    ただし、ドライバでエラーが発生すると、親デバイスなしでデバイスが作成されるため、deviceリンクも生成されません。センサー(hwmonデバイス)は、最もよく知られていないサブデバイスの1つです。以前でも、これが何度も発生しました。見てみるとls /sys/devices/virtual/*、このエラーが発生するデバイスが3つあるようですが、すべてデバイスhwmonです。

    「本文」/親がなければ、device一つもありませんdriver。これは、ループバック(lo)やbridgeネットワークデバイスなどの実際の仮想デバイスで予想される動作です。これはLinuxカーネルのデバイスモデルを反映しています。物理デバイスからバインドされたドライバを削除し、他のドライバをバインドすることもできます。物理デバイスなしでこれをサポートすることは意味がありません。仮想デバイスを実装するモジュールを見つけるための同様の方法がないので、残念です。


コンテンツ:

  1. /sysで検索結果の例
  2. モジュール名が見つかりました。

1. /sysでサンプル結果を探す

$ cd /sys/class/hwmon/
$ ls -l *
total 0
lrwxrwxrwx. 1 root root 0 Dec  2 17:50 hwmon0 -> ../../devices/virtual/thermal/thermal_zone0/hwmon0
lrwxrwxrwx. 1 root root 0 Dec  2 17:50 hwmon1 -> ../../devices/virtual/hwmon/hwmon1
lrwxrwxrwx. 1 root root 0 Dec  2 17:50 hwmon2 -> ../../devices/virtual/thermal/thermal_zone8/hwmon2
lrwxrwxrwx. 1 root root 0 Dec  2 17:50 hwmon3 -> ../../devices/platform/coretemp.0/hwmon/hwmon3

$ ls -l hwmon3/device/driver/module
lrwxrwxrwx. 1 root root 0 Dec  2 18:32 /sys/class/hwmon/hwmon3/device/driver/module -> ../../../../module/coretemp

しかし、他の結果はあまり役に立たないようです:-)。何ですかvirtual/thermal/thermal_zone0/hwmon0

hwmonデバイス(および他の種類)にもnameセンサーがあります。iwlwifiこれは実際に私のIntel Wi-Fiカードで利用できます。ところが、ドライバに欠陥があるため、仮想デバイスと宣言します。

$ head */name
==> hwmon0/name <==
acpitz

==> hwmon1/name <==
dell_smm

==> hwmon2/name <==
iwlwifi

==> hwmon3/name <==
coretemp

これはドライバが「祖父母」にある別のデバイスです。

$ ls -l */device/device/driver
lrwxrwxrwx. 1 root root 0 Dec  2 18:33 /sys/class/hwmon/hwmon0/device/device/driver -> ../../../../bus/acpi/drivers/thermal

また、ドライバがカーネルに組み込まれているため、このドライバのモジュールはありません。カーネルビルド構成でそのオプションが見つかった場合は、それを確認できます。ただし、これは必ずしもモジュールの命名と同じではありません。

$ ls -l */device/device/driver/module
ls: cannot access '*/device/device/driver/module': No such file or directory

$ grep CORETEMP= /boot/config-$(uname -r)
CONFIG_SENSORS_CORETEMP=m
$ grep ACPI_THERMAL= /boot/config-$(uname -r)
CONFIG_ACPI_THERMAL=y

2.モジュール名が見つかりましたが...

あなたは自分がしたことが100%確かではないと言いました。モジュール名が見つかりましたが、不明なWebサイトからインストールされたことを覚えておらず、心配な場合は、次の点を確認してください。

モジュールを再ロードし、モジュールが再ロードされるパスを確認できます。

$ modprobe --remove coretemp

$ modprobe -v coretemp
insmod /lib/modules/4.19.4-200.fc28.x86_64/kernel/drivers/hwmon/coretemp.ko.xz

その後、パッケージマネージャに問い合わせて、モジュールファイルがデプロイカーネルパッケージからのものかどうかを確認できます。たとえば、RPMの場合:

$ rpm -q --whatprovides /lib/modules/4.19.4-200.fc28.x86_64/kernel/drivers/hwmon/coretemp.ko.xz
kernel-core-4.19.4-200.fc28.x86_64

$ rpm -q --whatprovides /boot/vmlinuz-$(uname -r)
kernel-core-4.19.4-200.fc28.x86_64

また、パッケージマネージャを使用すると、インストールされているパッケージファイルが変更されていないことを確認できます。

パッケージのソースを確認するのはそれほど簡単ではありません:-).通常、パッケージ名を見て推測します:-)。たとえば、利用可能なパッケージのリストとそのパッケージのソースを取得できますが、dnf info kerneldnfがインストールされているRPMファイルや利用可能なRPMのチェックサムを表示することはできません。

関連情報