web-dev-qa-db-ja.com

Ryzen / Threadripper温度センサー:どのセンサーがどのカーネルモジュールに関連しているか、およびそれらを有効にする方法

LinuxのASRockx399 TaichimoboのAMDThreadripper1950xで監視できるセンサー。これによると、昨年、温度監視が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でのコアごとの温度監視についての話はまったくありません。

ただし、他の情報源によると、マザーボードに基づいてモジュールを構築する必要があるかもしれません。これらの手順は、sensors-detectの出力に基づいて適切なカーネルドライバーを構築できることを示唆しているようです: https://linuxconfig.org/monitor-AMD-ryzen-temperatures-in-linux-with-latest- kernel-modules

センサーによると-nct6775を検出しましたが、適切なカーネルモジュールがあることを示す兆候が見つかりません(lsmodには表示されていませんが、他に確認する必要がある場所はありますか?)。残念ながら、リポジトリはgithubにないため、リポジトリからビルドできません。

だからこれらは私の質問です:

  1. どのドライバーとカーネルモジュールがどのような情報を提供しますか?具体的には、Windowsで利用できるコアごとの測定値を示すものはどれですか?

  2. LinuxでのRyzenの温度ドライバーのステータスはどうなっていますか:完全、不完全、一緒にハッキングされ、信頼性はありませんか?

  3. Nct6775をビルドできるとしたら、すでに持っているK10に加えて、何が得られますか?それらを構築するためのソースを入手するには、他にどこに行けばよいでしょうか?

  4. なぜこれはあまり文書化されていないのですか?コースのリリースパーから1年半後、これに関する明確な情報がありませんが、AMDは業界標準では異常に役に立たないのでしょうか?

1
Stonecraft

[OPによる回答の削除:]私はまだ知りたいです:nct6775を現在利用できるようにしているのは正確には何ですか?

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

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

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

ただし、このコマンドにはいくつかの前提があります。すべての場合に機能するとは限りません。コマンドが機能しない場合は、チェーン内の個々のリンクをチェックしてコマンドを絞り込みます。考えられるケースは3つあります。

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

    これは、ドライバーがカーネルに組み込まれていることを意味します。どちらがあなたの質問に答えるでしょう:-)。

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

  2. driverリンクはdeviceの下にすぐにありませんが、...

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

    deviceリンクをクリックすると、親デバイスに移動します。しかし、ドライバーが代わりに祖父母のデバイス上にある場合もあれば、さらに:-)。

  3. device(s)のいずれにもdriverリンクがないか、親deviceリンクがまったくありません。

    deviceリンクをクリックすると、親デバイスに移動します。たとえば、ネットワークデバイス/sys/class/wlan0があり、/sys/class/wlan0/devicewlan0を提供するPCIカードを指している場合があります。

    あなたの場合、標準のpciバスにデバイスのようなものがないことを想像できます。この場合、ドライバーは/sys/devices/platform/で独自のカスタムデバイスを定義するために想定されます。これはまさに私のIntelCPUのcoretempドライバーが行うことです。

    ただし、ドライバーがこれを間違えると、親のないデバイスが作成されるため、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センサー。これは実際には私のIntelWi-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 kernelを使用しますが、dnfは、インストールされたRPMファイルまたは使用可能なRPMのチェックサムを表示できないと思います。

1
sourcejedi