「AMDGPU」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎カーソルの破損: セクション名を修正)
(同期)
 
(2人の利用者による、間の9版が非表示)
1行目: 1行目:
[[Category:グラフィック]]
+
[[Category:グラフィック]]
 
[[Category:X サーバー]]
 
[[Category:X サーバー]]
 
[[de:AMDGPU]]
 
[[de:AMDGPU]]
32行目: 32行目:
 
[[#ビデオアクセラレーション|ビデオデコードのハードウェア支援]]のサポートは、VA-API に関しては {{Pkg|libva-mesa-driver}} と {{Pkg|lib32-libva-mesa-driver}} により提供されており、VDPAU に関しては {{Pkg|mesa-vdpau}} と {{Pkg|lib32-mesa-vdpau}} により提供されています。
 
[[#ビデオアクセラレーション|ビデオデコードのハードウェア支援]]のサポートは、VA-API に関しては {{Pkg|libva-mesa-driver}} と {{Pkg|lib32-libva-mesa-driver}} により提供されており、VDPAU に関しては {{Pkg|mesa-vdpau}} と {{Pkg|lib32-mesa-vdpau}} により提供されています。
   
=== 験的 ===
+
=== 験的 ===
   
一部のユーザーにとっては、mesa の上流の験的ビルドを使用して、標準の mesa パッケージに含まれていない AMD Navi の改善などの機能を有効にする価値があるかもしれません。
+
一部のユーザーにとっては、mesa の上流の験的ビルドを使用する価値があるかもしれません。
   
 
{{AUR|mesa-git}} パッケージをインストールしてください。これは 3D アクセラレーション用の DRI ドライバーを提供します。
 
{{AUR|mesa-git}} パッケージをインストールしてください。これは 3D アクセラレーション用の DRI ドライバーを提供します。
40行目: 40行目:
 
* 32 ビットアプリケーションのサポートに関しては、''mesa-git'' リポジトリ、または [[AUR]] から {{AUR|lib32-mesa-git}} もインストールしてください。
 
* 32 ビットアプリケーションのサポートに関しては、''mesa-git'' リポジトリ、または [[AUR]] から {{AUR|lib32-mesa-git}} もインストールしてください。
 
* ([[Xorg]] で 2D アクセラレーションを提供する) DDX ドライバに関しては、{{AUR|xf86-video-amdgpu-git}} パッケージをインストールしてください。
 
* ([[Xorg]] で 2D アクセラレーションを提供する) DDX ドライバに関しては、{{AUR|xf86-video-amdgpu-git}} パッケージをインストールしてください。
* 以下の ''mesa-git'' リポジトリを使用する [[Vulkan]] サポートに関しては、''vulkan-radeon-git'' パッケージをインストールしてください。任意で、32 ビットアプリケーションをサポートするために ''lib32-vulkan-radeon-git'' パッケージもインストールしてください。AUR から {{AUR|mesa-git}} をビルドする場合、これは必要ないはずです。
+
* ''mesa-git'' リポジトリを使用する [[Vulkan]] サポートに関しては、''vulkan-radeon-git'' パッケージをインストールしてください。任意で、32 ビットアプリケーションをサポートするために ''lib32-vulkan-radeon-git'' パッケージもインストールしてください。AUR から {{AUR|mesa-git}} をビルドする場合、これは必要ないはずです。
 
{{Note|X を起動するには、LibLLVM へのシンボリックリンクを作成する必要があるかもしれません。例: {{ic|ln -s /usr/lib/libLLVM-10git.so /usr/lib/libLLVM-10svn.so}}}}
 
   
 
{{Tip|{{AUR|mesa-git}} パッケージのコンパイルを行いたくない場合は、[[非公式ユーザーリポジトリ#mesa-git|mesa-git]] 非公式リポジトリを使用できます。}}
 
{{Tip|{{AUR|mesa-git}} パッケージのコンパイルを行いたくない場合は、[[非公式ユーザーリポジトリ#mesa-git|mesa-git]] 非公式リポジトリを使用できます。}}
80行目: 78行目:
 
{{ic|amdgpu}} が [[Mkinitcpio#MODULES]] 配列の1番目のモジュールとして設定されていることを確認してください。例えば、{{ic|1=MODULES=(amdgpu radeon)}}。
 
{{ic|amdgpu}} が [[Mkinitcpio#MODULES]] 配列の1番目のモジュールとして設定されていることを確認してください。例えば、{{ic|1=MODULES=(amdgpu radeon)}}。
   
===== modprobe.d でモジュールパラメータを設定 =====
+
===== カーネルモジュールパラメータを設定 =====
 
{{ic|/etc/modprobe.d/}} に [[modprobe]] 設定ファイルを作成してください。構文の詳細については、{{man|5|modprobe.d}} を参照してください。
 
   
Southern Islands (SI) の場合は {{ic|1=si_support=1}} オプションを、Sea Islands (CIK) の場合は {{ic|1=cik_support=1}} オプションを使用してください。例:
+
Southern Islands (SI) の場合は {{ic|1=si_support=1}} [[カーネルモジュールパラメータ]]を、Sea Islands (CIK) の場合は {{ic|1=cik_support=1}} を使用してください:
   
 
{{hc|/etc/modprobe.d/amdgpu.conf|2=
 
{{hc|/etc/modprobe.d/amdgpu.conf|2=
123行目: 119行目:
 
いくつかのベンチマークは [https://gist.github.com/pendingchaos/aba1e4c238cf039d17089f29a8c6aa63 GitHub] や Phoronix [https://www.phoronix.com/scan.php?page=article&item=radv-aco-llvm&num=1 (1)] [https://www.phoronix.com/scan.php?page=article&item=radv-aco-gcn10&num=1 (2)] [https://www.phoronix.com/scan.php?page=article&item=mesa20radv-aco-amdvlk&num=1 (3)] で見られます。
 
いくつかのベンチマークは [https://gist.github.com/pendingchaos/aba1e4c238cf039d17089f29a8c6aa63 GitHub] や Phoronix [https://www.phoronix.com/scan.php?page=article&item=radv-aco-llvm&num=1 (1)] [https://www.phoronix.com/scan.php?page=article&item=radv-aco-gcn10&num=1 (2)] [https://www.phoronix.com/scan.php?page=article&item=mesa20radv-aco-amdvlk&num=1 (3)] で見られます。
   
{{Pkg|mesa}} バージョン 20.2 以降、ACO コンパイラはデフォルトで有効になっています。
+
{{Pkg|mesa}} バージョン [https://docs.mesa3d.org/relnotes/20.2.0.html#new-features 20.2] から、ACO はデフォルトのシェーダコンパイラとなっています。
   
 
== ロード ==
 
== ロード ==
136行目: 132行目:
 
* [[カーネルモジュール#ブラックリスト|カーネルモジュールのブラックリスト]]で {{ic|amdgpu}} が無効になっていないことを確認してください。
 
* [[カーネルモジュール#ブラックリスト|カーネルモジュールのブラックリスト]]で {{ic|amdgpu}} が無効になっていないことを確認してください。
   
読み込むことはできるが、X サーバが必要とする時よりも後になってしまう場合:
+
読み込むことはできるが、X サーバが必要とする時よりも後になってしまう場合、[[カーネルモード設定#KMS の早期開始]] を見てください。
 
* [[カーネルモード設定#KMS の早期開始]] を見てください。
 
   
 
== Xorg の設定 ==
 
== Xorg の設定 ==
253行目: 247行目:
   
 
GPU の P-state を確認するには、以下を実行:
 
GPU の P-state を確認するには、以下を実行:
  +
 
$ cat /sys/class/drm/card0/device/pp_od_clk_voltage
 
$ cat /sys/class/drm/card0/device/pp_od_clk_voltage
  +
 
GPU をモニタリングするには、以下を実行:
 
GPU をモニタリングするには、以下を実行:
  +
$ watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info
 
  +
# watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info
  +
 
GPU 使用率を確認するには、以下を実行:
 
GPU 使用率を確認するには、以下を実行:
  +
 
$ cat /sys/class/drm/card0/device/gpu_busy_percent
 
$ cat /sys/class/drm/card0/device/gpu_busy_percent
  +
 
GPU のクロックを確認するには、以下を実行:
 
GPU のクロックを確認するには、以下を実行:
  +
 
$ cat /sys/class/drm/card0/device/pp_dpm_sclk
 
$ cat /sys/class/drm/card0/device/pp_dpm_sclk
  +
 
GPU 温度を確認するには、以下を実行:
 
GPU 温度を確認するには、以下を実行:
  +
 
$ cat /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input
 
$ cat /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input
  +
 
VRAM のクロックを確認するには、以下を実行:
 
VRAM のクロックを確認するには、以下を実行:
  +
 
$ cat /sys/class/drm/card0/device/pp_dpm_mclk
 
$ cat /sys/class/drm/card0/device/pp_dpm_mclk
  +
 
VRAM の使用率を確認するには、以下を実行:
 
VRAM の使用率を確認するには、以下を実行:
  +
 
$ cat /sys/class/drm/card0/device/mem_info_vram_used
 
$ cat /sys/class/drm/card0/device/mem_info_vram_used
  +
 
VRAM のサイズを確認するには、以下を実行:
 
VRAM のサイズを確認するには、以下を実行:
  +
 
$ cat /sys/class/drm/card0/device/mem_info_vram_total
 
$ cat /sys/class/drm/card0/device/mem_info_vram_total
   
 
=== オーバークロック ===
 
=== オーバークロック ===
   
Linux 4.17 以降、{{Ic|1=/sys/class/drm/card0/device/pp_od_clk_voltage}} を介してグラフィックカードのクロックと電圧を調整できます。
+
Linux 4.17 以降、以下の機能をブート時に有効化すると、{{Ic|1=/sys/class/drm/card0/device/pp_od_clk_voltage}} を介してグラフィックカードのクロックと電圧を調整できるようになります。
   
 
==== ブートパラメータ ====
 
==== ブートパラメータ ====
284行目: 293行目:
   
 
{{Note|sysfs では、{{Ic|1=/sys/class/drm/...}} のようなパスはただのシンボリックリンクで、起動するごとに変化するかもしれません。永続的なパスは {{Ic|1=/sys/devices/}} にあります (例: {{Ic|1=/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/}})。信頼性の高い結果を得るには、コマンドを適宜調整してください。}}
 
{{Note|sysfs では、{{Ic|1=/sys/class/drm/...}} のようなパスはただのシンボリックリンクで、起動するごとに変化するかもしれません。永続的なパスは {{Ic|1=/sys/devices/}} にあります (例: {{Ic|1=/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/}})。信頼性の高い結果を得るには、コマンドを適宜調整してください。}}
  +
  +
利用可能なオプションに関する詳細は、カーネルドキュメントの [https://docs.kernel.org/gpu/amdgpu/thermal.html#pp-od-clk-voltage amdgpu サーマルコントロール]に関する部分を読んでください。
   
 
例えば、Polaris GPU で最大 P-state 7 で GPU クロックを 1209MHz、電圧を 900mV に設定するには、以下を実行してください:
 
例えば、Polaris GPU で最大 P-state 7 で GPU クロックを 1209MHz、電圧を 900mV に設定するには、以下を実行してください:
307行目: 318行目:
 
# echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage
 
# echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage
   
ドライバ特定の P-state へ切り替えを禁止することも可能です (例: チラツキやスタッタリングなどのディープ省電力 P-state での問題を回避する)Polaris RX 5xx カードで最も高い VRAM P-state を強制し、GPU 自体は低いクロックで動作を許可するには:
+
例えば、超省電力 P-state における (画面のちらつきやカクつきなどの) 問題を回避した場合などは、ドライバ特定の P-state へ切り替えるのを禁止することも可能です。最も高い VRAM P-state を強制し、GPU 自体は引き続き低いクロックで動作できるようにするには、まず利用可能な最も高い P-state を調べ、それを設定してください:
  +
  +
{{hc|# cat /sys/class/drm/card0/device/pp_dpm_mclk|
  +
0: 96Mhz *
  +
1: 456Mhz
  +
2: 675Mhz
  +
3: 1000Mhz
  +
}}
   
 
# echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level
 
# echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level
# echo "2" > /sys/class/drm/card0/device/pp_dpm_mclk
+
# echo "3" > /sys/class/drm/card0/device/pp_dpm_mclk
   
 
上位3つの GPU P-state のみを許可するには:
 
上位3つの GPU P-state のみを許可するには:
338行目: 356行目:
 
==== ブート時のスタートアップ ====
 
==== ブート時のスタートアップ ====
   
起動時に設定を自動的に適用したい場合、起動時に設定を構成・適用することに関するこの [https://www.reddit.com/r/Amd/comments/agwroj/how_to_overclock_your_amd_gpu_on_linux/ Reddit スレッド]を見てみることを検討してください。
+
方法としては、一つは systemd ユニットを使うことです。起動時に設定を自動的に適用したい場合、起動時に設定を構成・適用することに関するこの [https://www.reddit.com/r/Amd/comments/agwroj/how_to_overclock_your_amd_gpu_on_linux/ Reddit スレッド]を見てみることを検討してください。
  +
  +
もう一つの方法は udev ルールです。例えば、パフォーマンスレベルを落とす値を設定して電力消費量を削減するには:
  +
  +
{{hc|/etc/udev/rules.d/30-amdgpu-low-power.rules|2=
  +
SUBSYSTEM=="pci", DRIVER=="amdgpu", ATTR{power_dpm_force_performance_level}="low"
  +
}}
  +
  +
=== パフォーマンスレベル ===
  +
  +
AMDGPU にはいくつかのパフォーマンスレベルがあります。このレベルは power_dpm_force_performance_level ファイルで調整/確認することができます。以下のレベルから選択できます:
  +
  +
* '''auto''': 現在の条件に合わせて、ドライバー内で最適な電源プロファイルを動的に選択します。
  +
* '''low''': クロック数は最低のパワーステートに強制されます。
  +
* '''high''': クロック数は最高のパワーステートに強制されます。
  +
* '''manual''': ユーザーは、各クロックドメインに対してどのパワーステートを有効化するかを手動で選択することができます ([[#電源プロファイル]]を設定する際に使用します)。
  +
* '''profile_standard'''、'''profile_min_sclk'''、'''profile_min_mclk'''、'''profile_peak''': クロックとパワーのゲーティングが無効化され、クロックはそれぞれのプロファイルに応じて設定されます。このモードは、特定のワークロードに対してプロファイルする際に推奨されます。
  +
  +
以下のコマンドを実行すると、AMDGPU デバイスをパフォーマンスレベル low に設定します:
  +
  +
# echo "low" > /sys/class/drm/card0/device/power_dpm_force_performance_level
  +
  +
{{Note|パフォーマンスレベルは起動のたびに再設定する必要があります。設定を自動化する方法は [[#ブート時のスタートアップ]] を見てください。}}
   
 
=== 電源プロファイル ===
 
=== 電源プロファイル ===
379行目: 419行目:
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
  +
  +
=== モジュールパラメータ ===
  +
  +
amdgpu モジュールは、いくつかの設定パラメータ ({{ic|modinfo amdgpu {{!}} grep mask}}) を[https://raw.githubusercontent.com/torvalds/linux/master/drivers/gpu/drm/amd/include/amd_shared.h カーネルのソースコード]でしかドキュメント化していないマスク内に隠しています。
   
 
=== Xorg やアプリケーションが起動しない ===
 
=== Xorg やアプリケーションが起動しない ===
411行目: 455行目:
 
{{ic|KERNEL}} の名前を判断するには以下を実行してください:
 
{{ic|KERNEL}} の名前を判断するには以下を実行してください:
   
$ udevadm info --attribute-walk /sys/class/drm/card0 | grep "KERNEL="
+
$ find /sys/class/drm/ -regextype awk -regex '.+/card[0-9]+' -printf '%f\n'
   
 
GUI を用いる解決策もあります [https://github.com/marazmista/radeon-profile]: {{aur|radeon-profile-git}} と {{aur|radeon-profile-daemon-git}} で "power_dpm" を管理できます。
 
GUI を用いる解決策もあります [https://github.com/marazmista/radeon-profile]: {{aur|radeon-profile-git}} と {{aur|radeon-profile-daemon-git}} で "power_dpm" を管理できます。
417行目: 461行目:
 
==== Chromium でアーティファクト ====
 
==== Chromium でアーティファクト ====
   
[[Chromium]] でアーティファクトが現れる場合、vulkan ベースのバックエンドの使用を強制すると解決するかもしれません。{{ic|chrome://flags}} を開き、{{ic|#ignore-gpu-blacklist}} と {{ic|#enable-vulkan}} を ''enable'' にしてください。
+
[[Chromium]] でアーティファクトが現れる場合、vulkan ベースのバックエンドの使用を強制すると解決するかもしれません。{{ic|chrome://flags}} を開き、{{ic|#ignore-gpu-blocklist}} と {{ic|#enable-vulkan}} を ''enable'' にしてください。
   
 
=== R9 390 シリーズで悪いパフォーマンス/不安定 ===
 
=== R9 390 シリーズで悪いパフォーマンス/不安定 ===
428行目: 472行目:
   
 
GPU が大量の処理を行っている最中にフリーズやカーネルのクラッシュが発生して、"[drm] IP block:gmc_v8_0 is hung!" カーネルエラーが発生する場合 [https://gitlab.freedesktop.org/drm/amd/issues/226]、回避策は [[カーネルパラメータ]] {{ic|1=amdgpu.vm_update_mode=3}} を設定して GPUVM ページテーブルの更新を CPU を用いて行うように強制することです。デメリットはここにリストされています: [https://gitlab.freedesktop.org/drm/amd/-/issues/226#note_308665]。
 
GPU が大量の処理を行っている最中にフリーズやカーネルのクラッシュが発生して、"[drm] IP block:gmc_v8_0 is hung!" カーネルエラーが発生する場合 [https://gitlab.freedesktop.org/drm/amd/issues/226]、回避策は [[カーネルパラメータ]] {{ic|1=amdgpu.vm_update_mode=3}} を設定して GPUVM ページテーブルの更新を CPU を用いて行うように強制することです。デメリットはここにリストされています: [https://gitlab.freedesktop.org/drm/amd/-/issues/226#note_308665]。
 
=== カーソルがおかしい ===
 
 
マウスカーソルが時々正しくレンダリングされない問題が発生する場合、{{ic|/etc/X11/xorg.conf.d/20-amdgpu.conf}} 設定ファイルの {{ic|"OutputClass"}} セクションで {{ic|Option "SWCursor" "True"}} を設定してください。Wayland においては、グローバルな環境変数 {{ic|1=KWIN_FORCE_SW_CURSOR=1}} を設定してください。
 
 
スケーリングに {{ic|xrandr}} を使用していて、カーソルがチラついたり消えたりする場合、{{ic|TearFree}} プロパティを設定することで修正できる場合があります: {{ic|xrandr --output HDMI-A-0 --set TearFree on}}。
 
   
 
=== KDE の使用時に画面のちらつき ===
 
=== KDE の使用時に画面のちらつき ===
453行目: 491行目:
 
=== ディスクリート amdgpu グラフィックカードにおける電源管理/動的再アクティブ化の問題 ===
 
=== ディスクリート amdgpu グラフィックカードにおける電源管理/動的再アクティブ化の問題 ===
   
[https://gitlab.freedesktop.org/drm/amd/-/issues/1820] に似た問題が発生する場合、[[カーネルパラメータ]] {{ic|1=amdgpu.runpm=0}} を設定することでこの問題を回避できます。このカーネルパラメータは、dGPU が実行時に動的にオフになることを防止します。
+
カーネルドライバはロードされたが、ゲームでディスクリートグラフィックカードを利用できない、または使用中に無効化されてしまう問題が発生する場合 ([https://gitlab.freedesktop.org/drm/amd/-/issues/1820] に似た問題)、[[カーネルパラメータ]] {{ic|1=amdgpu.runpm=0}} を設定することでこの問題を回避できます。このカーネルパラメータは、dGPU が実行時に動的にオフになることを防止します。
   
 
=== kfd: amdgpu: TOPAZ not supported in kfd ===
 
=== kfd: amdgpu: TOPAZ not supported in kfd ===
460行目: 498行目:
 
kfd: amdgpu: TOPAZ not supported in kfd
 
kfd: amdgpu: TOPAZ not supported in kfd
 
[[GPGPU#ROCm|Radeon Open Compute]] を使用するつもりでないならば、これは安全に無視できます。古い GPU であるため、TOPAZ ではサポートされていません。[https://github.com/RadeonOpenCompute/ROCm/issues/1148#issuecomment-747849592] [https://www.reddit.com/r/linuxquestions/comments/yhbbiz/kfd_kfd_amdgpu_topaz_not_supported_in_kfd/]
 
[[GPGPU#ROCm|Radeon Open Compute]] を使用するつもりでないならば、これは安全に無視できます。古い GPU であるため、TOPAZ ではサポートされていません。[https://github.com/RadeonOpenCompute/ROCm/issues/1148#issuecomment-747849592] [https://www.reddit.com/r/linuxquestions/comments/yhbbiz/kfd_kfd_amdgpu_topaz_not_supported_in_kfd/]
  +
  +
=== MCLK が MAX (1000Mhz) に固定されてアイドル時に高い電力消費、または MIN (96MHz) に固定されてゲームのパフォーマンスが悪化 (カーネル 6.4) ===
  +
  +
高解像度かつ高リフレッシュレートの場合、MCLK (vram / メモリのクロック) が最も高いクロックレート (1000MHz) に固定されてしまい [https://gitlab.freedesktop.org/drm/amd/-/issues/1403] [https://gitlab.freedesktop.org/drm/amd/-/issues/2646]、アイドル時に GPU の電力消費が増加してしまう場合があります。Linux カーネル 6.4.x では、MCLK クロックが最低値 (96MHz) になって、ゲームのパフォーマンスが低下してしまいます [https://gitlab.freedesktop.org/drm/amd/-/issues/2657] [https://gitlab.freedesktop.org/drm/amd/-/issues/2611]。
  +
  +
これは、モニタが Coordinated Video Timings (CVT) を使用しておらず、影響を受ける解像度とリフレッシュレートに対する V-Blank 値が低いことが原因である可能性があります。回避策は[https://gist.github.com/Rend0e/3bddac4285dc1f4fbe303f326f36f6cc この gist] を見てください。
  +
  +
=== Suspend to RAM に失敗する ===
  +
  +
十分にリフレッシュされない VRAM のデータ消失を防ぐために、{{ic|amdgpu}} カーネルモジュールはシステムが S3 スリープに入るときに VRAM の内容を RAM 内に保存します。
  +
  +
大量の VRAM を使用していて RAM に十分な空き容量がない場合、たとえ十分なスワップメモリが存在していたとしても、[https://gitlab.freedesktop.org/drm/amd/-/issues/2125 このプロセスが失敗する可能性があります] (IO サブシステムがすでにサスペンドされているかもしれないため)。
  +
  +
このとき、以下のようなメッセージが出力されます:
  +
  +
kernel: systemd-sleep: page allocation failure: order:0, mode:0x100c02(GFP_NOIO|__GFP_HIGHMEM|__GFP_HARDWALL), nodemask=(null),cpuset=/,mems_allowed=0
  +
kernel: Call Trace:
  +
kernel: <TASK>
  +
kernel: dump_stack_lvl+0x47/0x60
  +
kernel: warn_alloc+0x165/0x1e0
  +
kernel: __alloc_pages_slowpath.constprop.0+0xd7d/0xde0
  +
kernel: __alloc_pages+0x32d/0x350
  +
kernel: ttm_pool_alloc+0x19f/0x600 [ttm 0bd92a9d9dccc3a4f19554535860aaeda76eb4f4]
  +
  +
回避策としては、システムがサスペンドする前に十分な RAM 領域をスワップアウトして VRAM を格納できるのに十分な空き領域を RAM に確保しておく[https://git.dolansoft.org/lorenz/memreserver ユーザー空間のサービス]を使うというものがります。
  +
  +
=== シャットダウンとサスペンドに失敗する ===
  +
  +
カーネルモジュールの ''hid_sensor_*_3d'' グループは、ブート時、シャットダウン時、サスペンド時にシステムがフリーズする問題を引き起こすことがあります。プロセスリストには複数の {{ic|udev-worker}} インスタンスが現れ、システムのスリープ時にフリーズしてしまいます。
  +
  +
このとき、以下のように出力されます:
  +
  +
kernel: PM: suspend entry (deep)
  +
kernel: Filesystems sync: 0.002 seconds
  +
kernel: Freezing user space processes
  +
kernel: Freezing user space processes failed after 20.004 seconds (1 tasks refusing to freeze, wq_busy=0):
  +
kernel: task:(udev-worker) state:D stack:0 pid:479 tgid:479 ppid:422 flags:0x00004006
  +
kernel: Call Trace:
  +
kernel: <TASK>
  +
kernel: __schedule+0x3db/0x1520
  +
kernel: ? srso_alias_return_thunk+0x5/0xfbef5
  +
kernel: ? __wake_up_common+0x78/0xa0
  +
kernel: ? srso_alias_return_thunk+0x5/0xfbef5
  +
  +
この問題の回避策は、例えば以下のような {{ic|/etc/modprobe.d/blacklist-hid_sensors.conf}} を作成するなどして、問題のあるモジュールをブラックリスト化することです:
  +
  +
blacklist hid_sensor_accel_3d
  +
blacklist hid_sensor_gyro_3d
  +
blacklist hid_sensor_magn_3d
   
 
== 参照 ==
 
== 参照 ==
465行目: 552行目:
 
* [[Gentoo:AMDGPU]]
 
* [[Gentoo:AMDGPU]]
   
{{TranslationStatus|AMDGPU|2023-06-07|780243}}
+
{{TranslationStatus|AMDGPU|2024-10-10|818012}}

2024年10月10日 (木) 14:49時点における最新版

関連記事

AMDGPUGraphics Core Next ファミリの AMD Radeon グラフィックカード向けのオープンソースグラフィックドライバです。

目次

適切なドライバーの選択

お持ちのカードに応じて、Xorg#AMD で適切なドライバーを見つけてください。 このドライバは Southern Islands (SI) 及びそれ以降のカードをサポートしています。AMD には GCN より前の GPU をサポートする計画はありません。 サポートされない GPU については、オープンソースの ATI ドライバを使用できます。

インストール

mesa パッケージをインストールしてください。3D アクセラレーションのための DRI ドライバーが含まれています。

  • 32ビットアプリケーションのサポートに関しては、multilib リポジトリから lib32-mesa パッケージもインストールしてください。
  • (Xorg での 2D アクセラレーションを提供する) DDX ドライバに関しては、xf86-video-amdgpu パッケージをインストールしてください。
  • Vulkan のサポートに関しては:
    • まず vulkan-radeon のみでテストしてください: このパッケージは、(アルファベット順における位置により) vulkan-driver の1番目のプロバイダではありませんが、amdvlk に関して繰り返し報告されている一部の問題を回避できます。
    • amdvlk パッケージがインストールされている場合、このパッケージは自身をデフォルトの Vulkan ドライバとして設定します。もし両方のドライバをインストールしておく必要がある場合は (例: vulkan-radeon問題が起こる場合)、Vulkan#環境変数で選択する を見てください。
    • 任意で、32 ビットアプリケーションサポートのために、インストールされているネイティブなパッケージに合わせて lib32-vulkan-radeonlib32-amdvlk パッケージをインストールしてください。

ビデオデコードのハードウェア支援のサポートは、VA-API に関しては libva-mesa-driverlib32-libva-mesa-driver により提供されており、VDPAU に関しては mesa-vdpaulib32-mesa-vdpau により提供されています。

試験的

一部のユーザーにとっては、mesa の上流の試験的ビルドを使用する価値があるかもしれません。

mesa-gitAUR パッケージをインストールしてください。これは 3D アクセラレーション用の DRI ドライバーを提供します。

  • 32 ビットアプリケーションのサポートに関しては、mesa-git リポジトリ、または AUR から lib32-mesa-gitAUR もインストールしてください。
  • (Xorg で 2D アクセラレーションを提供する) DDX ドライバに関しては、xf86-video-amdgpu-gitAUR パッケージをインストールしてください。
  • mesa-git リポジトリを使用する Vulkan サポートに関しては、vulkan-radeon-git パッケージをインストールしてください。任意で、32 ビットアプリケーションをサポートするために lib32-vulkan-radeon-git パッケージもインストールしてください。AUR から mesa-gitAUR をビルドする場合、これは必要ないはずです。
ヒント: mesa-gitAUR パッケージのコンパイルを行いたくない場合は、mesa-git 非公式リポジトリを使用できます。

Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化

linux パッケージでは、Southern Islands (HD 7000 Series、SI、つまり GCN 1) と Sea Islands (HD 8000 Series、CIK、つまり GCN 2) カードの AMDGPU サポートが有効化されています。amdgpu カーネルドライバは radeon ドライバより前にロードされる必要があります。どのカーネルドライバがロードされているかは lspci -k で確認できます。以下のように出力されるはずです:

$ lspci -k | grep -A 3 -E "(VGA|3D)"
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Curacao PRO [Radeon R7 370 / R9 270/370 OEM]
	Subsystem: Gigabyte Technology Co., Ltd Device 226c
	Kernel driver in use: amdgpu
	Kernel modules: radeon, amdgpu

amdgpu ドライバが使用されていない場合、次のセクションの指示に従ってください。

amdgpu ドライバをロード

amdgpu モジュールと radeon モジュールの両方のモジュールパラメータcik_support=si_support= です。

これらは、カーネルパラメータまたは modprobe 設定ファイルで設定する必要があり、カードの GCN バージョンによって異なります。

どのカーネルカードを使用しているか不確かな場合は、両方のパラメータを使うことができます。

ヒント: dmesg は、使用すべき正しい方のカーネルパラメータを示してくれる場合があります: [..] amdgpu 0000:01:00.0: Use radeon.cik_support=0 amdgpu.cik_support=1 to override
カーネルコマンドラインでモジュールパラメータを設定

次のいずれかのカーネルパラメータを設定してください:

  • Southern Islands (SI): radeon.si_support=0 amdgpu.si_support=1
  • Sea Islands (CIK): radeon.cik_support=0 amdgpu.cik_support=1

正しいモジュール順序を指定

amdgpuMkinitcpio#MODULES 配列の1番目のモジュールとして設定されていることを確認してください。例えば、MODULES=(amdgpu radeon)

カーネルモジュールパラメータを設定

Southern Islands (SI) の場合は si_support=1 カーネルモジュールパラメータを、Sea Islands (CIK) の場合は cik_support=1 を使用してください:

/etc/modprobe.d/amdgpu.conf
options amdgpu si_support=1
options amdgpu cik_support=1
/etc/modprobe.d/radeon.conf
options radeon si_support=0
options radeon cik_support=0

modconf/etc/mkinitcpio.confHOOKS 配列にあることを確認し、initramfs を再生成してください。

amdgpu ドライバをサポートするカーネルをコンパイル

カーネルをビルド/コンパイルする場合、CONFIG_DRM_AMDGPU_SI=YCONFIG_DRM_AMDGPU_CIK=Y の一方/両方を config で設定する必要があります。

起動時の radeon のロードを完全に無効化

特定のグラフィックチップによっては、カーネルが依然として radeon モジュールをプローブ・ロードする場合があります。しかし、amdgpu が期待通りに動作することが確認できたならば、radeon モジュールをロードする必要はありません。以下の手順では、各ステップの後に再起動して、うまく行っていることを確認してください:

  1. カーネルコマンドラインの方法でモジュールパラメータを使って、amdgpu が期待通りに機能することを確認してください
  2. MODULES=(amdgpu) mkinitcpio の方法を使ってください。ただし、radeon を設定に追加しないでください。
  3. デスクトップにログインし、modprobe -r radeon を実行して、対応するカーネルモジュールがきれいに削除されることをテストしてください。
  4. radeon モジュールをブラックリスト化して、ブートの第2ステージでモジュールがカーネルによってプローブされないようにしてください:
/etc/modprobe.d/radeon.conf
blacklist radeon

これで、lsmoddmesg の出力で、amdgpu ドライバのみがロードされていて、radeon は存在しないと表示されるはずです。/sys/module/radeon ディレクトリは存在しないはずです。

ACO コンパイラ

ACO コンパイラはオープンソースのシェーダコンパイラであり、LLVM コンパイラAMDVLK ドライバWindows 10 に直接対抗するために Valve Corporation によって作成・開発されています。LLVM と AMDVLK よりも短いコンパイル時間と、ゲームでのより良いパフォーマンスを提供します。

いくつかのベンチマークは GitHub や Phoronix (1) (2) (3) で見られます。

mesa バージョン 20.2 から、ACO はデフォルトのシェーダコンパイラとなっています。

ロード

amdgpu カーネルモジュールはシステムの起動時に自動的にロードされることになっています。

ロードされない場合:

読み込むことはできるが、X サーバが必要とする時よりも後になってしまう場合、カーネルモード設定#KMS の早期開始 を見てください。

Xorg の設定

Xorg は自動的にドライバをロードし、モニタの EDID を使ってネイティブの解像度を設定してくれます。設定が必要になるのは、ドライバをチューニングする場合のみです。

手動で設定したい場合、/etc/X11/xorg.conf.d/20-amdgpu.conf を作成して、以下を記述してください:

/etc/X11/xorg.conf.d/20-amdgpu.conf
Section "OutputClass"
     Identifier "AMD"
     MatchDriver "amdgpu"
     Driver "amdgpu"
EndSection

このセクションを使って、機能を有効化したりドライバの設定を調整したりできます。ドライバオプションを設定する前に、まず amdgpu(4) を見てください。

TearFree レンダリング

TearFree は、ハードウェアのページフリッピング機構を使ってティアリング防止を制御します。デフォルトでは、TearFree は、回転された出力、RandR 変換が適用された出力、RandR 1.4 スレーブ出力に対してオンになり、それら以外ではオフになります。truefalse を指定することで、常にオンにしたり、常にオフにしたりもできます。

Option "TearFree" "true"

xrandr を使用して TearFree を一時的に有効にすることもできます:

$ xrandr --output output --set TearFree on

outputDisplayPort-0HDMI-A-0 のような形式である必要があります。この値は xrandr -q で取得できます。

DRI レベル

DRI は、有効にする DRI の最大レベルを設定します。有効な値は、DRI2 の場合は 2、 DRI3 の場合は 3 です。 Xorg バージョンが 1.18.3 以降の場合、DRI3 のデフォルトは 3 です。それ以外の場合、 DRI2 が使用されます:

Option "DRI" "3"

可変リフレッシュレート

可変リフレッシュレート を参照してください。

10 ビットカラー

警告: 10 ビットカラーを有効化すると、多くのアプリケーションでグラフィックの乱れやクラッシュを引き起こす場合があります。これには特に Steam が含まれ、X Error によりクラッシュします。

新しい AMD カードは 10bpc カラーをサポートしていますが、デフォルトは 24 ビットカラーであり、30 ビットカラーは明示的に有効にする必要があります。アプリケーションがこれもサポートしている場合、これを有効にすると、グラデーションの目に見えるバンディング/グラフィックの乱れを減らすことができます。モニターがサポートしているかどうかを確認するには、Xorg ログファイルEDID を検索してください (例:/var/log/Xorg.0.log または ~/.local/share/xorg/Xorg.0.log):

[   336.695] (II) AMDGPU(0): EDID for output DisplayPort-0
[   336.695] (II) AMDGPU(0): EDID for output DisplayPort-1
[   336.695] (II) AMDGPU(0): Manufacturer: DEL  Model: a0ec  Serial#: 123456789
[   336.695] (II) AMDGPU(0): Year: 2018  Week: 23
[   336.695] (II) AMDGPU(0): EDID Version: 1.4
[   336.695] (II) AMDGPU(0): Digital Display Input
[   336.695] (II) AMDGPU(0): 10 bits per channel

現在有効になっているかどうかを確認するには、Depth を検索してください:

[   336.618] (**) AMDGPU(0): Depth 30, (--) framebuffer bpp 32
[   336.618] (II) AMDGPU(0): Pixel depth = 30 bits stored in 4 bytes (32 bpp pixmaps)

デフォルトの設定では、24 であると表示されます (24 ビットが 4 バイトに格納されている)。

10ビットが機能するかどうかを確認するには、Xorg を実行している場合は終了し、白黒の縞模様を表示する Xorg -retro を実行し、Ctrl-Alt-F1Ctrl-C を押して X を終了し、Xorg -depth 30 -retro を実行してください。これが正常に機能する場合は、10ビットが機能しています。

startx を介して10ビットで起動するには、startx -- -depth 30 を使用してください。永続的に有効にするには、以下を作成または追加してください:

/etc/X11/xorg.conf.d/20-amdgpu.conf
Section "Screen"
	Identifier "asdf"
	DefaultDepth 30
EndSection

出力のレイテンシを減らす

レイテンシを最小化したい場合、ページフリッピングや TearFree を無効化できます:

/etc/X11/xorg.conf.d/20-amdgpu.conf
Section "OutputClass"
     Identifier "AMD"
     MatchDriver "amdgpu"
     Driver "amdgpu"
     Option "EnablePageFlip" "off"
     Option "TearFree" "false"
EndSection

レイテンシを更に減らしたい場合は ゲーム#DRI の遅延を軽減する を見てください。

ノート: これらのオプションを設定すると、ティアリングや短時間のアーティファクトが発生する場合があります。

機能

ビデオアクセラレーション

ハードウェアビデオアクセラレーション を見てください。

モニタリング

GPU の温度や P-state を確認したい場合に GPU のモニタリングはしばしば行われます。

CLI

  • amdgpu_top — AMDGPU の使用率を表示するツール
https://github.com/Umio-Yasuno/amdgpu_top || amdgpu_topAUR
  • nvtop — AMD、Intel、NVIDIA で GPU プロセスをモニタリングします。
https://github.com/Syllo/nvtop || nvtop
  • radeontop — 合計のアクティビティ率と個々のブロック両方の GPU 使用率ビュアー。
https://github.com/clbr/radeontop || radeontop

GUI

  • amdgpu_top — AMDGPU の使用率を表示するツール
https://github.com/Umio-Yasuno/amdgpu_top || amdgpu_topAUR
  • AmdGuid — 完全に Rust で書かれた、基本的なファンコントロール GUI。
https://github.com/Eraden/amdgpud || amdguid-wayland-binAUR, amdguid-glow-binAUR
  • TuxClocker — Qt5 のモニタリング・オーバークロックツール。
https://github.com/Lurkki14/tuxclocker || tuxclockerAUR

手動

GPU の P-state を確認するには、以下を実行:

$ cat /sys/class/drm/card0/device/pp_od_clk_voltage

GPU をモニタリングするには、以下を実行:

  1. watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info

GPU 使用率を確認するには、以下を実行:

$ cat /sys/class/drm/card0/device/gpu_busy_percent

GPU のクロックを確認するには、以下を実行:

$ cat /sys/class/drm/card0/device/pp_dpm_sclk

GPU 温度を確認するには、以下を実行:

$ cat /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input

VRAM のクロックを確認するには、以下を実行:

$ cat /sys/class/drm/card0/device/pp_dpm_mclk

VRAM の使用率を確認するには、以下を実行:

$ cat /sys/class/drm/card0/device/mem_info_vram_used

VRAM のサイズを確認するには、以下を実行:

$ cat /sys/class/drm/card0/device/mem_info_vram_total

オーバークロック

Linux 4.17 以降、以下の機能をブート時に有効化すると、/sys/class/drm/card0/device/pp_od_clk_voltage を介してグラフィックカードのクロックと電圧を調整できるようになります。

ブートパラメータ

amdgpu.ppfeaturemask=0xffffffff カーネルパラメータ を追加して、sysfs でクロックと電圧を調整するアクセスをアンロックする必要があります。

すべてのビットが定義されているわけではありません。今後、新しい機能が追加されるかもしれません。32ビットすべてを設定すると、不安定な機能が有効化され、画面のチラツキやサスペンドからの復帰に失敗するなどの問題が発生する場合があります。デフォルトの ppfeaturemask と共に PP_OVERDRIVE_MASK ビット (0x4000) を設定すれば十分なはずです。あなたのシステムにおいて適切なパラメータを計算するには、以下を実行してください:

$ printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask) | 0x4000))"

手動 (デフォルト)

ノート: sysfs では、/sys/class/drm/... のようなパスはただのシンボリックリンクで、起動するごとに変化するかもしれません。永続的なパスは /sys/devices/ にあります (例: /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/)。信頼性の高い結果を得るには、コマンドを適宜調整してください。

利用可能なオプションに関する詳細は、カーネルドキュメントの amdgpu サーマルコントロールに関する部分を読んでください。

例えば、Polaris GPU で最大 P-state 7 で GPU クロックを 1209MHz、電圧を 900mV に設定するには、以下を実行してください:

# echo "s 7 1209 900" > /sys/class/drm/card0/device/pp_od_clk_voltage

同じ手順を VRAM に対しても適用できます (例えば、Polaris 5xx シリーズカードでの最大 P-state 2):

# echo "m 2 1850 850" > /sys/class/drm/card0/device/pp_od_clk_voltage
警告: 入力した値をダブルチェックしてください。間違うと即座にハードウェアに深刻なダメージを引き起こすかもしれません!

適用するには:

# echo "c" > /sys/class/drm/card0/device/pp_od_clk_voltage

機能していることを確認するには、3D の負荷をかけている状態で、クロックと電圧を見てください:

# watch -n 0.5  cat /sys/kernel/debug/dri/0/amdgpu_pm_info

以下でデフォルトの値にリセットできます:

# echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage

例えば、超省電力 P-state における (画面のちらつきやカクつきなどの) 問題を回避した場合などは、ドライバが特定の P-state へ切り替えるのを禁止することも可能です。最も高い VRAM P-state を強制し、GPU 自体は引き続き低いクロックで動作できるようにするには、まず利用可能な最も高い P-state を調べ、それを設定してください:

# cat /sys/class/drm/card0/device/pp_dpm_mclk
0: 96Mhz *
1: 456Mhz 
2: 675Mhz 
3: 1000Mhz 
# echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level
# echo "3" >  /sys/class/drm/card0/device/pp_dpm_mclk

上位3つの GPU P-state のみを許可するには:

# echo "5 6 7" >  /sys/class/drm/card0/device/pp_dpm_sclk

GPU の最大電力消費量を設定するには (例えば 50 ワット):

# echo 50000000 > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap
ノート: 上記の手順は Polaris RX 560 カードでテストされました。別の GPU では、異なる挙動やバグが存在するかもしれません。

アシスト付き

GPU を手動でオーバークロックしたくない場合、AMD GPU のオーバークロックやモニタリングをアシストするいくつかのツールがコミュニティによって提供されています。

CLI ツール
  • amdgpu-clocks — AMD GPU のモニタリングやカスタムの P-state を設定するために使用できるスクリプト。起動時に自動的に設定を適用する systemd サービスもあります。
https://github.com/sibradzic/amdgpu-clocks || amdgpu-clocks-gitAUR
GUI ツール
  • TuxClocker — Qt5 のモニタリング・オーバークロックツール
https://github.com/Lurkki14/tuxclocker || tuxclockerAUR
  • CoreCtrl — アプリケーション毎のプロファイルをサポートする、WattMan ライクな UI の GUI オーバークロックツール。
https://gitlab.com/corectrl/corectrl || corectrl
  • LACT — AMD GPU の情報を表示し、制御する GTK ツール。
https://github.com/ilya-zlobintsev/LACT || lactAUR

ブート時のスタートアップ

方法としては、一つは systemd ユニットを使うことです。起動時に設定を自動的に適用したい場合、起動時に設定を構成・適用することに関するこの Reddit スレッドを見てみることを検討してください。

もう一つの方法は udev ルールです。例えば、パフォーマンスレベルを落とす値を設定して電力消費量を削減するには:

/etc/udev/rules.d/30-amdgpu-low-power.rules
SUBSYSTEM=="pci", DRIVER=="amdgpu", ATTR{power_dpm_force_performance_level}="low"

パフォーマンスレベル

AMDGPU にはいくつかのパフォーマンスレベルがあります。このレベルは power_dpm_force_performance_level ファイルで調整/確認することができます。以下のレベルから選択できます:

  • auto: 現在の条件に合わせて、ドライバー内で最適な電源プロファイルを動的に選択します。
  • low: クロック数は最低のパワーステートに強制されます。
  • high: クロック数は最高のパワーステートに強制されます。
  • manual: ユーザーは、各クロックドメインに対してどのパワーステートを有効化するかを手動で選択することができます (#電源プロファイルを設定する際に使用します)。
  • profile_standardprofile_min_sclkprofile_min_mclkprofile_peak: クロックとパワーのゲーティングが無効化され、クロックはそれぞれのプロファイルに応じて設定されます。このモードは、特定のワークロードに対してプロファイルする際に推奨されます。

以下のコマンドを実行すると、AMDGPU デバイスをパフォーマンスレベル low に設定します:

# echo "low" > /sys/class/drm/card0/device/power_dpm_force_performance_level
ノート: パフォーマンスレベルは起動のたびに再設定する必要があります。設定を自動化する方法は #ブート時のスタートアップ を見てください。

電源プロファイル

AMDGPU は電源プロファイルによるいくつかの最適化を提供します。最も一般的に使用されるのは、OpenCL を多用するアプリケーションのためのコンピュートモードです。利用可能な電源プロファイルは以下のように一覧表示できます:

cat /sys/class/drm/card0/device/pp_power_profile_mode
NUM        MODE_NAME     SCLK_UP_HYST   SCLK_DOWN_HYST SCLK_ACTIVE_LEVEL     MCLK_UP_HYST   MCLK_DOWN_HYST MCLK_ACTIVE_LEVEL
  0   BOOTUP_DEFAULT:        -                -                -                -                -                -
  1   3D_FULL_SCREEN:        0              100               30                0              100               10
  2     POWER_SAVING:       10                0               30                -                -                -
  3            VIDEO:        -                -                -               10               16               31
  4               VR:        0               11               50                0              100               10
  5        COMPUTE *:        0                5               30               10               60               25
  6           CUSTOM:        -                -                -                -                -                -
ノート: card0 はマシンの特定の GPU を示します。複数の GPU が搭載されている場合、正しい GPU を選ぶように気をつけてください。

特定の電源プロファイルを使用するには、まず GPU のマニュアルコントロールを有効化する必要があります:

# echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level

その後、電源プロファイルを選択するには、そのプロファイルと関連付けられた NUM の値を書き込みます。例えば、COMPUTE を有効化するには:

# echo "5" > /sys/class/drm/card0/device/pp_power_profile_mode
ノート: 電源プロファイルの変更は起動するたびに適用する必要があります。これを自動化するには #ブート時のスタートアップ を見てください。

GPU ディスプレイスケーリングを有効化

モニタのネイティブ解像度を使用しない場合、ディスプレイに内蔵されているスケーラを用いずに、GPU 自体のスケーラを使うには、以下を実行してください:

$ xrandr --output output --set "scaling mode" scaling_mode

"scaling mode" に利用できる値は: None, Full, Center, Full aspect

  • 利用可能な出力と設定を表示するには:
$ xrandr --prop
  • 利用可能な出力全てに対してだけ scaling mode = Full aspect を設定するには:
$ for output in $(xrandr --prop | grep -E -o -i "^[A-Z\-]+-[0-9]+"); do xrandr --output "$output" --set "scaling mode" "Full aspect"; done

トラブルシューティング

モジュールパラメータ

amdgpu モジュールは、いくつかの設定パラメータ (modinfo amdgpu | grep mask) をカーネルのソースコードでしかドキュメント化していないマスク内に隠しています。

Xorg やアプリケーションが起動しない

  • glxgears を開いた後に "(EE) AMDGPU(0): [DRI2] DRI2SwapBuffers: drawable has no back or front?" エラー。Xorg サーバを開くことはできるが、OpenGL アプリケーションはクラッシュする。
  • "(EE) AMDGPU(0): Given depth (32) is not supported by amdgpu driver" エラー。Xorg が起動しない。

Xorg でスクリーンの色深度を 16 か 32 に設定すると問題/クラッシュを引き起こします。これを防ぐには、"screen" セクションに以下を追加して標準的なスクリーン色深度である 24 を使う必要があります:

/etc/X11/xorg.conf.d/10-screen.conf
Section "Screen"
       Identifier     "Screen"
       DefaultDepth    24
       SubSection      "Display"
               Depth   24
       EndSubSection
EndSection

スクリーンのアーティファクトと周波数の問題

動的電源管理は、(60Hz以上の) 高いリフレッシュレートでモニタを表示させた際にスクリーンのアーティファクトを発生させる場合があります。GPU のクロック速度の管理法に問題があるためです [1][2]

回避策 [3]/sys/class/drm/card0/device/power_dpm_force_performance_levelhighlow を書き込むことです。

これを永続化するには、udev ルールを作成することにより可能です:

/etc/udev/rules.d/30-amdgpu-pm.rules
KERNEL=="card0", SUBSYSTEM=="drm", DRIVERS=="amdgpu", ATTR{device/power_dpm_force_performance_level}="high"

KERNEL の名前を判断するには以下を実行してください:

$ find /sys/class/drm/ -regextype awk -regex '.+/card[0-9]+' -printf '%f\n'

GUI を用いる解決策もあります [4]: radeon-profile-gitAURradeon-profile-daemon-gitAUR で "power_dpm" を管理できます。

Chromium でアーティファクト

Chromium でアーティファクトが現れる場合、vulkan ベースのバックエンドの使用を強制すると解決するかもしれません。chrome://flags を開き、#ignore-gpu-blocklist#enable-vulkanenable にしてください。

R9 390 シリーズで悪いパフォーマンス/不安定

AMD R9 390 シリーズのグラフィックカードで問題[5]が発生する場合、次のカーネルパラメータを設定して、radeon ではなく amdgpu ドライバの使用を強制してください: radeon.cik_support=0 radeon.si_support=0 amdgpu.cik_support=1 amdgpu.si_support=1 amdgpu.dc=1

これがうまく行かない場合、DPM を無効化すると解決するかもしれません。次をカーネルパラメータに追加してください: radeon.cik_support=0 radeon.si_support=0 amdgpu.cik_support=1 amdgpu.si_support=1

"[drm] IP block:gmc_v8_0 is hung!" カーネルエラーでフリーズ

GPU が大量の処理を行っている最中にフリーズやカーネルのクラッシュが発生して、"[drm] IP block:gmc_v8_0 is hung!" カーネルエラーが発生する場合 [6]、回避策は カーネルパラメータ amdgpu.vm_update_mode=3 を設定して GPUVM ページテーブルの更新を CPU を用いて行うように強制することです。デメリットはここにリストされています: [7]

KDE の使用時に画面のちらつき

解像度を変更したり外部モニタに接続したりしたときに、画面がちらつく、あるいは白くなったままになる場合、カーネルパラメータ amdgpu.sg_display=0 を追加してください。

Vega カード上でのゲーム中にシステムのフリーズ/クラッシュ

動的電源管理は、ゲーム中にシステムの完全なフリーズを発生させる場合があります。GPU のクロック速度の管理法に問題があるためです [8]。回避策は動的電源管理を無効化することです。詳細は ATI#動的電源管理 を見てください。

WebRenderer (Firefox) の破損

WebRenderer がユーザによって強制的に有効化されている場合、アーティファクトやその他の異常が発生する場合があります(例: 拡張機能のオプションを選択できないなど)。回避策は OpenGL コンポジットにフォールバックすることです。

4K@60Hz のデバイスが接続されると音声の速度が2倍になる/音が高くなる/無音

これは、AMDGPU デバイスと、HDMI で接続された 4K ディスプレイとの間の通信の問題により時々発生します。利用可能な回避策は、ディスプレイの組み込み設定から HDR か "Ultra HD Deep Color" を有効化することです。多くの Android ベースのテレビでは、これは "Optimal" ではなく "Standard" を設定することを意味します。

ディスクリート amdgpu グラフィックカードにおける電源管理/動的再アクティブ化の問題

カーネルドライバはロードされたが、ゲームでディスクリートグラフィックカードを利用できない、または使用中に無効化されてしまう問題が発生する場合 ([9] に似た問題)、カーネルパラメータ amdgpu.runpm=0 を設定することでこの問題を回避できます。このカーネルパラメータは、dGPU が実行時に動的にオフになることを防止します。

kfd: amdgpu: TOPAZ not supported in kfd

システムのジャーナルやカーネルメッセージキーリングに以下の critical レベルのエラーメッセージが出力される場合があります:

kfd: amdgpu: TOPAZ not supported in kfd

Radeon Open Compute を使用するつもりでないならば、これは安全に無視できます。古い GPU であるため、TOPAZ ではサポートされていません。[10] [11]

MCLK が MAX (1000Mhz) に固定されてアイドル時に高い電力消費、または MIN (96MHz) に固定されてゲームのパフォーマンスが悪化 (カーネル 6.4)

高解像度かつ高リフレッシュレートの場合、MCLK (vram / メモリのクロック) が最も高いクロックレート (1000MHz) に固定されてしまい [12] [13]、アイドル時に GPU の電力消費が増加してしまう場合があります。Linux カーネル 6.4.x では、MCLK クロックが最低値 (96MHz) になって、ゲームのパフォーマンスが低下してしまいます [14] [15]

これは、モニタが Coordinated Video Timings (CVT) を使用しておらず、影響を受ける解像度とリフレッシュレートに対する V-Blank 値が低いことが原因である可能性があります。回避策はこの gist を見てください。

Suspend to RAM に失敗する

十分にリフレッシュされない VRAM のデータ消失を防ぐために、amdgpu カーネルモジュールはシステムが S3 スリープに入るときに VRAM の内容を RAM 内に保存します。

大量の VRAM を使用していて RAM に十分な空き容量がない場合、たとえ十分なスワップメモリが存在していたとしても、このプロセスが失敗する可能性があります (IO サブシステムがすでにサスペンドされているかもしれないため)。

このとき、以下のようなメッセージが出力されます:

kernel: systemd-sleep: page allocation failure: order:0, mode:0x100c02(GFP_NOIO|__GFP_HIGHMEM|__GFP_HARDWALL), nodemask=(null),cpuset=/,mems_allowed=0
kernel: Call Trace:
kernel:  <TASK>
kernel:  dump_stack_lvl+0x47/0x60
kernel:  warn_alloc+0x165/0x1e0
kernel:  __alloc_pages_slowpath.constprop.0+0xd7d/0xde0
kernel:  __alloc_pages+0x32d/0x350
kernel:  ttm_pool_alloc+0x19f/0x600 [ttm 0bd92a9d9dccc3a4f19554535860aaeda76eb4f4]

回避策としては、システムがサスペンドする前に十分な RAM 領域をスワップアウトして VRAM を格納できるのに十分な空き領域を RAM に確保しておくユーザー空間のサービスを使うというものがります。

シャットダウンとサスペンドに失敗する

カーネルモジュールの hid_sensor_*_3d グループは、ブート時、シャットダウン時、サスペンド時にシステムがフリーズする問題を引き起こすことがあります。プロセスリストには複数の udev-worker インスタンスが現れ、システムのスリープ時にフリーズしてしまいます。

このとき、以下のように出力されます:

kernel: PM: suspend entry (deep)
kernel: Filesystems sync: 0.002 seconds
kernel: Freezing user space processes
kernel: Freezing user space processes failed after 20.004 seconds (1 tasks refusing to freeze, wq_busy=0):
kernel: task:(udev-worker)   state:D stack:0     pid:479   tgid:479   ppid:422    flags:0x00004006
kernel: Call Trace:
kernel:  <TASK>
kernel:  __schedule+0x3db/0x1520
kernel:  ? srso_alias_return_thunk+0x5/0xfbef5
kernel:  ? __wake_up_common+0x78/0xa0
kernel:  ? srso_alias_return_thunk+0x5/0xfbef5

この問題の回避策は、例えば以下のような /etc/modprobe.d/blacklist-hid_sensors.conf を作成するなどして、問題のあるモジュールをブラックリスト化することです:

blacklist hid_sensor_accel_3d
blacklist hid_sensor_gyro_3d
blacklist hid_sensor_magn_3d

参照

翻訳ステータス: このページは en:AMDGPU の翻訳バージョンです。最後の翻訳日は 2024-10-10 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。