「AMDGPU」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
 
(3人の利用者による、間の11版が非表示)
1行目: 1行目:
[[Category:グラフィック]]
+
[[Category:グラフィック]]
 
[[Category:X サーバー]]
 
[[Category:X サーバー]]
 
[[de:AMDGPU]]
 
[[de:AMDGPU]]
15行目: 15行目:
 
== 適切なドライバーの選択 ==
 
== 適切なドライバーの選択 ==
   
お持ちのカードに応じて、[[Xorg#AMD]] で適切なドライバーを見つけてください。
+
お持ちのカードに応じて、[[Xorg#AMD]] で適切なドライバーを見つけてください。このドライバは [https://www.x.org/wiki/RadeonFeature/ Southern Islands] (GCN 1。2012年リリース。) 及びそれ以降のカードをサポートしています。AMD には GCN より前の GPU をサポートする計画はありません
  +
このドライバは [https://www.x.org/wiki/RadeonFeature/ Southern Islands (SI)] 及びそれ以降のカードをサポートしています。AMD には GCN より前の GPU をサポートする計画はありません。
 
 
サポートされない GPU については、オープンソースの [[ATI]] ドライバを使用できます。
 
サポートされない GPU については、オープンソースの [[ATI]] ドライバを使用できます。
   
 
== インストール ==
 
== インストール ==
   
{{Pkg|mesa}} パッケージを[[インストール]]してください。3D アクセラレーションのための DRI ドライバーが含まれています。
+
{{Pkg|mesa}} パッケージを[[インストール]]してください。これには、3D アクセラレーションのための DRI ドライバーと、[[#ビデオアクセラレーション|動画デコードのアクセラレーション]]のための VA-API/VDPAU ドライバの両方が含まれています。
   
 
* 32ビットアプリケーションのサポートに関しては、[[multilib]] リポジトリから {{Pkg|lib32-mesa}} パッケージもインストールしてください。
 
* 32ビットアプリケーションのサポートに関しては、[[multilib]] リポジトリから {{Pkg|lib32-mesa}} パッケージもインストールしてください。
* ([[Xorg]] での 2D アクセラレーションを提供する) DDX ドライバに関しては、{{Pkg|xf86-video-amdgpu}} パッケージをインストールしてください
+
* ([[Xorg]] での 2D アクセラレーションを提供する) DDX ドライバに関しては、{{Pkg|xf86-video-amdgpu}} パッケージをインストールすることで利用可能です。デフォルトの modesetting ドライバが存在するため、このパッケージは必要ありません
  +
* [[Vulkan]]をサポートするには、{{Pkg|vulkan-radeon}} (32ビットアプリケーションの場合は {{Pkg|lib32-vulkan-radeon}}) をインストールしてください。
* [[Vulkan]] のサポートに関しては:
 
** '''まず {{Pkg|vulkan-radeon}} のみ'''でテストしてください: このパッケージは、([[Pacman#仮想パッケージ|アルファベット順における位置]]により) ''vulkan-driver'' の1番目のプロバイダではありませんが、{{Pkg|amdvlk}} に関して繰り返し[[Vulkan#AMDGPU - DirectX Vulkan ゲームでクラッシュする|報告されている]]一部の問題を回避できます。
 
** {{Pkg|amdvlk}} パッケージがインストールされている場合、このパッケージは自身をデフォルトの Vulkan ドライバとして設定します。もし両方のドライバをインストールしておく必要がある場合は (例: {{Pkg|vulkan-radeon}} で [[Vulkan#AMDGPU - DirectX Vulkan ゲームのプレイ中にがハングする|問題]]が起こる場合)、[[Vulkan#環境変数で選択する]] を見てください。
 
** 任意で、32 ビットアプリケーションサポートのために、インストールされているネイティブなパッケージに合わせて {{Pkg|lib32-vulkan-radeon}} か {{Pkg|lib32-amdvlk}} パッケージをインストールしてください。
 
   
  +
=== 試験的 ===
[[#ビデオアクセラレーション|ビデオデコードのハードウェア支援]]のサポートは、VA-API に関しては {{Pkg|libva-mesa-driver}} と {{Pkg|lib32-libva-mesa-driver}} により提供されており、VDPAU に関しては {{Pkg|mesa-vdpau}} と {{Pkg|lib32-mesa-vdpau}} により提供されています。
 
   
  +
一部のユーザーにとっては、mesa の上流の試験的ビルドを使用する価値があるかもしれません。
=== 実験的 ===
 
 
一部のユーザーにとっては、mesa の上流の実験的ビルドを使用する価値があるかもしれません。
 
   
 
{{AUR|mesa-git}} パッケージをインストールしてください。これは 3D アクセラレーション用の DRI ドライバーを提供します。
 
{{AUR|mesa-git}} パッケージをインストールしてください。これは 3D アクセラレーション用の DRI ドライバーを提供します。
46行目: 41行目:
 
=== Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化 ===
 
=== Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化 ===
   
{{Pkg|linux}} パッケでは、Southern Islands (HD 7000 Series、SI、つまり GCN 1) Sea Islands (HD 8000 Series、CIK、つまり GCN 2) カードの AMDGPU サポートが有効化されています。{{ic|amdgpu}} カーネルドライバは [[ATI|radeon]] ドライバより前にロードされる必要があります。どのカーネルドライバがロードされているかは {{ic|lspci -k}} で確認できます。以下のように出力されるはずです:
+
[[カーネル#公式サポートカーネル|公式サポートカネル]]では、Southern Islands (GCN 1。2012年リリース。) 及び Sea Islands (GCN 2。2013年リリース。) カードの AMDGPU サポートが有効化されています。{{ic|amdgpu}} カーネルドライバは [[ATI|radeon]] ドライバより前にロードされる必要があります。どのカーネルドライバがロードされているかは {{ic|lspci -k}} で確認できます。以下のように出力されるはずです:
   
{{hc|$ lspci -k {{!}} grep -A 3 -E "(VGA{{!}}3D)"|
+
{{hc|$ lspci -k -d ::03xx|
 
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Curacao PRO [Radeon R7 370 / R9 270/370 OEM]
 
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
 
Subsystem: Gigabyte Technology Co., Ltd Device 226c
73行目: 68行目:
 
* Southern Islands (SI): {{ic|1=radeon.si_support=0 amdgpu.si_support=1}}
 
* Southern Islands (SI): {{ic|1=radeon.si_support=0 amdgpu.si_support=1}}
 
* Sea Islands (CIK): {{ic|1=radeon.cik_support=0 amdgpu.cik_support=1}}
 
* Sea Islands (CIK): {{ic|1=radeon.cik_support=0 amdgpu.cik_support=1}}
  +
  +
さらに、統合 Sea Island (GCN 1.1) カードと AMD A10 APU を使用する場合、正しくブートさせるには Radeon Dynamic Power Management を無効化しておく必要がある場合があります。この機能には、グラフィックコアのクロックを動的に調整することで、APU の温度を下げ、静音性を高める目的があります。しかし、この機能のせいで再起動の無限ループに陥ることがあります。無効化するには、上記の手順に従い、{{ic|1=radeon.dpm=0}} をブートオプションに追加してください。
   
 
==== 正しいモジュール順序を指定 ====
 
==== 正しいモジュール順序を指定 ====
97行目: 94行目:
   
 
[[カーネル]]をビルド/コンパイルする場合、{{ic|1=CONFIG_DRM_AMDGPU_SI=Y}} と {{ic|1=CONFIG_DRM_AMDGPU_CIK=Y}} の一方/両方を config で設定する必要があります。
 
[[カーネル]]をビルド/コンパイルする場合、{{ic|1=CONFIG_DRM_AMDGPU_SI=Y}} と {{ic|1=CONFIG_DRM_AMDGPU_CIK=Y}} の一方/両方を config で設定する必要があります。
 
==== 起動時の radeon のロードを完全に無効化 ====
 
 
特定のグラフィックチップによっては、カーネルが依然として {{ic|radeon}} モジュールをプローブ・ロードする場合があります。しかし、{{ic|amdgpu}} が期待通りに動作することが確認できたならば、{{ic|radeon}} モジュールをロードする必要はありません。以下の手順では、各ステップの後に再起動して、うまく行っていることを確認してください:
 
 
# カーネルコマンドラインの方法でモジュールパラメータを使って、{{ic|amdgpu}} が期待通りに機能することを確認してください
 
# {{ic|1=MODULES=(amdgpu)}} mkinitcpio の方法を使ってください。ただし、{{ic|radeon}} を設定に追加しないでください。
 
# デスクトップにログインし、{{ic|1=modprobe -r radeon}} を実行して、対応するカーネルモジュールがきれいに削除されることをテストしてください。
 
# {{ic|radeon}} モジュールをブラックリスト化して、ブートの第2ステージでモジュールがカーネルによってプローブされないようにしてください:
 
 
{{hc|/etc/modprobe.d/radeon.conf|2=
 
blacklist radeon
 
}}
 
 
これで、{{ic|lsmod}} と {{ic|dmesg}} の出力で、amdgpu ドライバのみがロードされていて、radeon は存在しないと表示されるはずです。{{ic|1=/sys/module/radeon}} ディレクトリは存在しないはずです。
 
   
 
=== ACO コンパイラ ===
 
=== ACO コンパイラ ===
128行目: 110行目:
   
 
* 必要な場合は [[#Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化]]していることを確認してください。
 
* 必要な場合は [[#Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化]]していることを確認してください。
* 最新の {{Pkg|linux-firmware}} パッケージがインストールされていることを確認してください。このドライバは、正しくブートするために各モデルの最新のファームウェアを必要とします。
+
* 最新の {{Pkg|linux-firmware-amdgpu}} パッケージがインストールされていることを確認してください。このドライバは、正しくブートするために各モデルの最新のファームウェアを必要とします。
 
* [[カーネルパラメータ]]に {{ic|nomodeset}} や {{ic|1=vga=}} を指定して'''いない'''ことを確認してください。{{ic|amdgpu}} は [[KMS]] を必要とするからです。
 
* [[カーネルパラメータ]]に {{ic|nomodeset}} や {{ic|1=vga=}} を指定して'''いない'''ことを確認してください。{{ic|amdgpu}} は [[KMS]] を必要とするからです。
 
* [[カーネルモジュール#ブラックリスト|カーネルモジュールのブラックリスト]]で {{ic|amdgpu}} が無効になっていないことを確認してください。
 
* [[カーネルモジュール#ブラックリスト|カーネルモジュールのブラックリスト]]で {{ic|amdgpu}} が無効になっていないことを確認してください。
   
読み込むことはできるが、X サーバが必要とする時よりも後になってしまう場合:
+
読み込むことはできるが、X サーバが必要とする時よりも後になってしまう場合、[[カーネルモード設定#KMS の早期開始]] を見てください。
 
* [[カーネルモード設定#KMS の早期開始]] を見てください。
 
   
 
== Xorg の設定 ==
 
== Xorg の設定 ==
228行目: 208行目:
 
=== ビデオアクセラレーション ===
 
=== ビデオアクセラレーション ===
   
[[ハードウェアビデオアクセラレーション]] を見てください。
+
[[ハードウェアビデオアクセラレーション#AMD/ATI]] を見てください。
   
 
=== モニタリング ===
 
=== モニタリング ===
236行目: 216行目:
 
==== CLI ====
 
==== CLI ====
   
* {{App|amdgpu_top|AMDGPU の使用率を表示するツール|https://github.com/Umio-Yasuno/amdgpu_top|{{AUR|amdgpu_top}}}}
+
* {{App|amdgpu_top|AMDGPU の使用率を表示するツール|https://github.com/Umio-Yasuno/amdgpu_top|{{Pkg|amdgpu_top}}}}
 
* {{App|nvtop|AMD、Intel、NVIDIA で GPU プロセスをモニタリングします。|https://github.com/Syllo/nvtop|{{Pkg|nvtop}}}}
 
* {{App|nvtop|AMD、Intel、NVIDIA で GPU プロセスをモニタリングします。|https://github.com/Syllo/nvtop|{{Pkg|nvtop}}}}
 
* {{App|radeontop|合計のアクティビティ率と個々のブロック両方の GPU 使用率ビュアー。|https://github.com/clbr/radeontop|{{Pkg|radeontop}}}}
 
* {{App|radeontop|合計のアクティビティ率と個々のブロック両方の GPU 使用率ビュアー。|https://github.com/clbr/radeontop|{{Pkg|radeontop}}}}
242行目: 222行目:
 
==== GUI ====
 
==== GUI ====
   
* {{App|amdgpu_top|AMDGPU の使用率を表示するツール|https://github.com/Umio-Yasuno/amdgpu_top|{{AUR|amdgpu_top}}}}
+
* {{App|amdgpu_top|AMDGPU の使用率を表示するツール|https://github.com/Umio-Yasuno/amdgpu_top|{{Pkg|amdgpu_top}}}}
 
* {{App|AmdGuid|完全に Rust で書かれた、基本的なファンコントロール GUI。|https://github.com/Eraden/amdgpud|{{AUR|amdguid-wayland-bin}}, {{AUR|amdguid-glow-bin}}}}
 
* {{App|AmdGuid|完全に Rust で書かれた、基本的なファンコントロール GUI。|https://github.com/Eraden/amdgpud|{{AUR|amdguid-wayland-bin}}, {{AUR|amdguid-glow-bin}}}}
  +
* {{App|Radeon Profile|AMD Radeon カードの現在のクロックを読み込んだり変更したりする Qt5 ツール。|https://github.com/emerge-e-world/radeon-profile|{{AUR|radeon-profile-git}}}}
 
* {{App|TuxClocker|Qt5 のモニタリング・オーバークロックツール。|https://github.com/Lurkki14/tuxclocker|{{AUR|tuxclocker}}}}
 
* {{App|TuxClocker|Qt5 のモニタリング・オーバークロックツール。|https://github.com/Lurkki14/tuxclocker|{{AUR|tuxclocker}}}}
   
249行目: 230行目:
   
 
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}} を介してグラフィックカードのクロックと電圧を調整できるようになります。
   
 
==== ブートパラメータ ====
 
==== ブートパラメータ ====
277行目: 273行目:
 
$ printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask) | 0x4000))"
 
$ printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask) | 0x4000))"
   
==== 手動 (デフォルト) ====
+
==== 手動 ====
  +
  +
{{Note|sysfs では、{{ic|/sys/class/drm/...}} のようなパスはただのシンボリックリンクで、起動するごとに変化するかもしれません。永続的なパスは {{ic|/sys/devices/}} にあります (例: {{ic|/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 サーマルコントロール]に関する部分を読んでください。
   
  +
手動オーバークロックを有効にするには、[[#パフォーマンスレベル]] で説明されているように {{ic|manual}} パフォーマンスレベルを選択してください。
{{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/}})。信頼性の高い結果を得るには、コマンドを適宜調整してください。}}
 
   
 
例えば、Polaris GPU で最大 P-state 7 で GPU クロックを 1209MHz、電圧を 900mV に設定するには、以下を実行してください:
 
例えば、Polaris GPU で最大 P-state 7 で GPU クロックを 1209MHz、電圧を 900mV に設定するには、以下を実行してください:
289行目: 289行目:
 
# echo "m 2 1850 850" > /sys/class/drm/card0/device/pp_od_clk_voltage
 
# echo "m 2 1850 850" > /sys/class/drm/card0/device/pp_od_clk_voltage
   
{{Warning|1=入力した値をダブルチェックしてください。間違うと即座にハードウェアに深刻なダメージを引き起こすかもしれません!}}
+
{{Warning|入力した値をダブルチェックしてください。間違うと即座にハードウェアに深刻なダメージを引き起こすかもしれません!}}
   
 
適用するには:
 
適用するには:
297行目: 297行目:
 
機能していることを確認するには、3D の負荷をかけている状態で、クロックと電圧を見てください:
 
機能していることを確認するには、3D の負荷をかけている状態で、クロックと電圧を見てください:
   
# 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
   
 
以下でデフォルトの値にリセットできます:
 
以下でデフォルトの値にリセットできます:
305行目: 305行目:
 
例えば、超省電力 P-state における (画面のちらつきやカクつきなどの) 問題を回避した場合などは、ドライバが特定の P-state へ切り替えるのを禁止することも可能です。最も高い VRAM P-state を強制し、GPU 自体は引き続き低いクロックで動作できるようにするには、まず利用可能な最も高い P-state を調べ、それを設定してください:
 
例えば、超省電力 P-state における (画面のちらつきやカクつきなどの) 問題を回避した場合などは、ドライバが特定の P-state へ切り替えるのを禁止することも可能です。最も高い VRAM P-state を強制し、GPU 自体は引き続き低いクロックで動作できるようにするには、まず利用可能な最も高い P-state を調べ、それを設定してください:
   
{{hc|# cat /sys/class/drm/card0/device/pp_dpm_mclk|
+
{{hc|$ cat /sys/class/drm/card0/device/pp_dpm_mclk|
 
0: 96Mhz *
 
0: 96Mhz *
1: 456Mhz
+
1: 456Mhz
2: 675Mhz
+
2: 675Mhz
3: 1000Mhz
+
3: 1000Mhz
 
}}
 
}}
   
317行目: 317行目:
 
上位3つの GPU P-state のみを許可するには:
 
上位3つの GPU P-state のみを許可するには:
   
# echo "5 6 7" > /sys/class/drm/card0/device/pp_dpm_sclk
+
# echo "5 6 7" > /sys/class/drm/card0/device/pp_dpm_sclk
   
 
GPU の最大電力消費量を設定するには (例えば 50 ワット):
 
GPU の最大電力消費量を設定するには (例えば 50 ワット):
332行目: 332行目:
   
 
* {{App|amdgpu-clocks|AMD GPU のモニタリングやカスタムの P-state を設定するために使用できるスクリプト。起動時に自動的に設定を適用する systemd サービスもあります。|https://github.com/sibradzic/amdgpu-clocks|{{AUR|amdgpu-clocks-git}}}}
 
* {{App|amdgpu-clocks|AMD GPU のモニタリングやカスタムの P-state を設定するために使用できるスクリプト。起動時に自動的に設定を適用する systemd サービスもあります。|https://github.com/sibradzic/amdgpu-clocks|{{AUR|amdgpu-clocks-git}}}}
  +
* {{App|ruby-amdgpu_fan|amdgpu Linux ドライバと対話するための Ruby で書かれた CLI ツール|https://github.com/HarlemSquirrel/amdgpu-fan-rb|{{AUR|ruby-amdgpu_fan}}}}
   
 
===== GUI ツール =====
 
===== GUI ツール =====
337行目: 338行目:
 
* {{App|TuxClocker|Qt5 のモニタリング・オーバークロックツール|https://github.com/Lurkki14/tuxclocker|{{AUR|tuxclocker}}}}
 
* {{App|TuxClocker|Qt5 のモニタリング・オーバークロックツール|https://github.com/Lurkki14/tuxclocker|{{AUR|tuxclocker}}}}
 
* {{App|CoreCtrl|アプリケーション毎のプロファイルをサポートする、WattMan ライクな UI の GUI オーバークロックツール。|https://gitlab.com/corectrl/corectrl|{{Pkg|corectrl}}}}
 
* {{App|CoreCtrl|アプリケーション毎のプロファイルをサポートする、WattMan ライクな UI の GUI オーバークロックツール。|https://gitlab.com/corectrl/corectrl|{{Pkg|corectrl}}}}
* {{App|LACT|AMD GPU の情報を表示し、制御する GTK ツール。|https://github.com/ilya-zlobintsev/LACT|{{AUR|lact}}}}
+
* {{App|LACT|AMD GPU の情報をための GTK ツール。{{Pkg|power-profiles-daemon}} と競合します。競合を防ぐには {{ic|amdgpu_dpm}} を後で無効化してください。[https://github.com/ilya-zlobintsev/LACT?tabreadme-ov-file#power-profiles-daemon-note]|https://github.com/ilya-zlobintsev/LACT|{{Pkg|lact}}}}
  +
* {{App|Radeon Profile|AMD Radeon カードの現在のクロックを読み込んだり変更したりする Qt5 ツール。|https://github.com/emerge-e-world/radeon-profile|{{AUR|radeon-profile-git}}}}
   
 
==== ブート時のスタートアップ ====
 
==== ブート時のスタートアップ ====
   
起動時に設定を自動的に適用したい場合、起動時に設定を構成・適用することに関するこの [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=
  +
ACTION=="add", SUBSYSTEM=="drm", DRIVERS=="amdgpu", ATTR{device/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|パフォーマンスレベルは起動のたびに再設定する必要があります。設定を自動化する方法は [[#ブート時のスタートアップ]] を見てください。}}
   
 
=== 電源プロファイル ===
 
=== 電源プロファイル ===
347行目: 371行目:
 
AMDGPU は電源プロファイルによるいくつかの最適化を提供します。最も一般的に使用されるのは、OpenCL を多用するアプリケーションのためのコンピュートモードです。利用可能な電源プロファイルは以下のように一覧表示できます:
 
AMDGPU は電源プロファイルによるいくつかの最適化を提供します。最も一般的に使用されるのは、OpenCL を多用するアプリケーションのためのコンピュートモードです。利用可能な電源プロファイルは以下のように一覧表示できます:
   
{{hc|cat /sys/class/drm/card0/device/pp_power_profile_mode|
+
{{hc|$ 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
 
NUM MODE_NAME SCLK_UP_HYST SCLK_DOWN_HYST SCLK_ACTIVE_LEVEL MCLK_UP_HYST MCLK_DOWN_HYST MCLK_ACTIVE_LEVEL
 
0 BOOTUP_DEFAULT: - - - - - -
 
0 BOOTUP_DEFAULT: - - - - - -
361行目: 385行目:
   
 
特定の電源プロファイルを使用するには、まず GPU のマニュアルコントロールを有効化する必要があります:
 
特定の電源プロファイルを使用するには、まず GPU のマニュアルコントロールを有効化する必要があります:
  +
 
# echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level
 
# echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level
   
 
その後、電源プロファイルを選択するには、そのプロファイルと関連付けられた NUM の値を書き込みます。例えば、COMPUTE を有効化するには:
 
その後、電源プロファイルを選択するには、そのプロファイルと関連付けられた NUM の値を書き込みます。例えば、COMPUTE を有効化するには:
  +
 
# echo "5" > /sys/class/drm/card0/device/pp_power_profile_mode
 
# echo "5" > /sys/class/drm/card0/device/pp_power_profile_mode
   
375行目: 401行目:
 
{{ic|"scaling mode"}} に利用できる値は: {{ic|None}}, {{ic|Full}}, {{ic|Center}}, {{ic|Full aspect}}。
 
{{ic|"scaling mode"}} に利用できる値は: {{ic|None}}, {{ic|Full}}, {{ic|Center}}, {{ic|Full aspect}}。
   
* 利用可能な出力と設定を表示するには:
+
* 利用可能な出力と設定を表示するには: {{bc|$ xrandr --prop}}
  +
* 利用可能な全ての出力に {{ic|1=scaling mode = Full aspect}} を設定するには: {{bc|$ for output in $(xrandr --prop {{!}} grep -E -o -i "^[A-Z\-]+-[0-9]+"); do xrandr --output "$output" --set "scaling mode" "Full aspect"; done}}
$ xrandr --prop
 
   
  +
=== ヘッドレス環境での仮想ディスプレイ ===
* 利用可能な出力全てに対してだけ {{ic|1=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 はヘッドレス環境向けに、ダミープラグを使用しない、GPU アクセラレートされた仮想モニターを提供しています。これは RDP や {{AUR|sunshine}} といったゲームストリーミングソフトウェアで便利です。
  +
  +
使用する AMD GPU を選択してください:
  +
  +
{{hc|$ lspci -Dd ::03xx|
  +
'''1234:56:78.9''' VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] ''CommercialModelName''
  +
}}
  +
  +
{{ic|amdgpu}} に対して {{ic|1=virtual_display=''1234:56:78.9'',''x''}} [[カーネルモジュールパラメータ]]を追加してください。{{ic|''1234:56:78.9''}} の部分は GPU の PCI アドレスで、{{ic|''x''}} は公開する crtc (仮想モニター) の番号です。このパラメータを使用すると物理出力は無効化されます。[https://bugzilla.kernel.org/show_bug.cgi?id=203339]
  +
  +
以下のように PCI アドレスをセミコロンで区切ることで、複数の GPU を使用することも可能です:
  +
  +
amdgpu.virtual_display=1234:56:78.9,''x'';9876:54:32.1,''y''
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
  +
  +
=== モジュールパラメータ ===
  +
  +
amdgpu モジュールは、いくつかの設定パラメータ ({{ic|modinfo amdgpu {{!}} grep mask}}) を[https://raw.githubusercontent.com/torvalds/linux/master/drivers/gpu/drm/amd/include/amd_shared.h カーネルのソースコード]でしかドキュメント化していないマスク内に隠しています。
   
 
=== Xorg やアプリケーションが起動しない ===
 
=== Xorg やアプリケーションが起動しない ===
404行目: 447行目:
 
[[ATI#動的電源管理|動的電源管理]]は、(60Hz以上の) 高いリフレッシュレートでモニタを表示させた際にスクリーンのアーティファクトを発生させる場合があります。GPU のクロック速度の管理法に問題があるためです [https://bugs.freedesktop.org/show_bug.cgi?id=96868][https://gitlab.freedesktop.org/drm/amd/-/issues/234]。
 
[[ATI#動的電源管理|動的電源管理]]は、(60Hz以上の) 高いリフレッシュレートでモニタを表示させた際にスクリーンのアーティファクトを発生させる場合があります。GPU のクロック速度の管理法に問題があるためです [https://bugs.freedesktop.org/show_bug.cgi?id=96868][https://gitlab.freedesktop.org/drm/amd/-/issues/234]。
   
回避策 [https://bugs.freedesktop.org/show_bug.cgi?id=96868#c13] {{ic|/sys/class/drm/card0/device/power_dpm_force_performance_level}} に {{ic|high}} {{ic|low}} を書き込むことです。
+
回避策[https://bugs.freedesktop.org/show_bug.cgi?id=96868#c13]は、[[#パフォーマンスレベル]] で説明されているようパフォーマンスレベルを {{ic|high}} あるいは {{ic|low}} に設定することです。
 
これを永続化するには、[[udev]] ルールを作成することにより可能です:
 
 
{{hc|/etc/udev/rules.d/30-amdgpu-pm.rules|<nowiki>
 
KERNEL=="card0", SUBSYSTEM=="drm", DRIVERS=="amdgpu", ATTR{device/power_dpm_force_performance_level}="high"
 
</nowiki>}}
 
   
  +
カーネルのバージョンを変更することでもこの問題を解決できる場合があります。例えば、バージョン 6.12.9 では問題は解決されているようです。
{{Accuracy|以下のコマンドは {{ic|/sys/class/drm/card0}} に対しては常に {{ic|card0}} と出力する (デバイスが存在しない場合は何も出力されない)。以下の確認の意味が不明瞭。}}
 
 
{{ic|KERNEL}} の名前を判断するには以下を実行してください:
 
 
$ udevadm info --attribute-walk /sys/class/drm/card0 | grep "KERNEL="
 
 
GUI を用いる解決策もあります [https://github.com/marazmista/radeon-profile]: {{aur|radeon-profile-git}} と {{aur|radeon-profile-daemon-git}} で "power_dpm" を管理できます。
 
   
 
==== Chromium でアーティファクト ====
 
==== Chromium でアーティファクト ====
434行目: 465行目:
 
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 の使用時に画面のちらつき ===
 
   
 
解像度を変更したり外部モニタに接続したりしたときに、画面がちらつく、あるいは白くなったままになる場合、[[カーネルパラメータ]] {{ic|1=amdgpu.sg_display=0}} を追加してください。
 
解像度を変更したり外部モニタに接続したりしたときに、画面がちらつく、あるいは白くなったままになる場合、[[カーネルパラメータ]] {{ic|1=amdgpu.sg_display=0}} を追加してください。
446行目: 471行目:
 
=== Vega カード上でのゲーム中にシステムのフリーズ/クラッシュ ===
 
=== Vega カード上でのゲーム中にシステムのフリーズ/クラッシュ ===
   
[[ATI#動的電源管理|動的電源管理]]は、ゲーム中にシステムの完全なフリーズを発生させる場合があります。GPU のクロック速度の管理法に問題があるためです [https://gitlab.freedesktop.org/drm/amd/-/issues/716]。回避策は動的電源管理を無効化することです。詳細は [[ATI#動的電源管理]] を見てください。
+
[[ATI#動的電源管理|動的電源管理]]は、ゲーム中にシステムの完全なフリーズを発生させる場合があります。GPU のクロック速度の管理法に問題があるためです [https://gitlab.freedesktop.org/drm/amd/-/issues/716]。回避策は[[#パフォーマンスレベル]] で説明れてるようにパフォーマンスレベルを {{ic|high}} に設定することです。
   
 
=== WebRenderer (Firefox) の破損 ===
 
=== WebRenderer (Firefox) の破損 ===
459行目: 484行目:
   
 
カーネルドライバはロードされたが、ゲームでディスクリートグラフィックカードを利用できない、または使用中に無効化されてしまう問題が発生する場合 ([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 が実行時に動的にオフになることを防止します。
  +
  +
=== ディスプレイが固まる、または応答しなくなる (flip_done timed out) ===
  +
  +
amdgpu ドライバのバグにより、ディスプレイが更新されなくなることがあります[https://gitlab.freedesktop.org/drm/amd/-/issues/4141]。回避策として、{{ic|1=amdgpu.dcdebugmask=0x10}} か {{ic|1=amdgpu.dcdebugmask=0x12}} [[カーネルパラメータ]]を追加することが提案されています。
   
 
=== kfd: amdgpu: TOPAZ not supported in kfd ===
 
=== kfd: amdgpu: TOPAZ not supported in kfd ===
   
 
システムのジャーナルやカーネルメッセージキーリングに以下の critical レベルのエラーメッセージが出力される場合があります:
 
システムのジャーナルやカーネルメッセージキーリングに以下の critical レベルのエラーメッセージが出力される場合があります:
  +
 
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/]
   
471行目: 502行目:
   
 
これは、モニタが Coordinated Video Timings (CVT) を使用しておらず、影響を受ける解像度とリフレッシュレートに対する V-Blank 値が低いことが原因である可能性があります。回避策は[https://gist.github.com/Rend0e/3bddac4285dc1f4fbe303f326f36f6cc この gist] を見てください。
 
これは、モニタが 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
   
 
== 参照 ==
 
== 参照 ==
   
 
* [[Gentoo:AMDGPU]]
 
* [[Gentoo:AMDGPU]]
  +
* [https://gitlab.freedesktop.org/drm/amd AMDGPU イシュートラッカー]
   
{{TranslationStatus|AMDGPU|2023-12-12|794332}}
+
{{TranslationStatus|AMDGPU|2025-06-11|838762}}

2025年11月30日 (日) 18:15時点における最新版

関連記事

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

目次

適切なドライバーの選択

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

サポートされない GPU については、オープンソースの ATI ドライバを使用できます。

インストール

mesa パッケージをインストールしてください。これには、3D アクセラレーションのための DRI ドライバーと、動画デコードのアクセラレーションのための VA-API/VDPAU ドライバの両方が含まれています。

  • 32ビットアプリケーションのサポートに関しては、multilib リポジトリから lib32-mesa パッケージもインストールしてください。
  • (Xorg での 2D アクセラレーションを提供する) DDX ドライバに関しては、xf86-video-amdgpu パッケージをインストールすることで利用可能です。デフォルトの modesetting ドライバが存在するため、このパッケージは必要ありません。
  • Vulkanをサポートするには、vulkan-radeon (32ビットアプリケーションの場合は lib32-vulkan-radeon) をインストールしてください。

試験的

一部のユーザーにとっては、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) のサポートを有効化

公式サポートカーネルでは、Southern Islands (GCN 1。2012年リリース。) 及び Sea Islands (GCN 2。2013年リリース。) のカードの AMDGPU サポートが有効化されています。amdgpu カーネルドライバは radeon ドライバより前にロードされる必要があります。どのカーネルドライバがロードされているかは lspci -k で確認できます。以下のように出力されるはずです:

$ lspci -k -d ::03xx
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

さらに、統合 Sea Island (GCN 1.1) カードと AMD A10 APU を使用する場合、正しくブートさせるには Radeon Dynamic Power Management を無効化しておく必要がある場合があります。この機能には、グラフィックコアのクロックを動的に調整することで、APU の温度を下げ、静音性を高める目的があります。しかし、この機能のせいで再起動の無限ループに陥ることがあります。無効化するには、上記の手順に従い、radeon.dpm=0 をブートオプションに追加してください。

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

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 で設定する必要があります。

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 の遅延を軽減する を見てください。

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

機能

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

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

モニタリング

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

CLI

  • amdgpu_top — AMDGPU の使用率を表示するツール
https://github.com/Umio-Yasuno/amdgpu_top || amdgpu_top
  • 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_top
  • AmdGuid — 完全に Rust で書かれた、基本的なファンコントロール GUI。
https://github.com/Eraden/amdgpud || amdguid-wayland-binAUR, amdguid-glow-binAUR
  • Radeon Profile — AMD Radeon カードの現在のクロックを読み込んだり変更したりする Qt5 ツール。
https://github.com/emerge-e-world/radeon-profile || radeon-profile-gitAUR
  • 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 サーマルコントロールに関する部分を読んでください。

手動オーバークロックを有効にするには、#パフォーマンスレベル で説明されているように manual パフォーマンスレベルを選択してください。

例えば、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
  • ruby-amdgpu_fan — amdgpu Linux ドライバと対話するための Ruby で書かれた CLI ツール
https://github.com/HarlemSquirrel/amdgpu-fan-rb || ruby-amdgpu_fanAUR
GUI ツール
  • TuxClocker — Qt5 のモニタリング・オーバークロックツール
https://github.com/Lurkki14/tuxclocker || tuxclockerAUR
  • CoreCtrl — アプリケーション毎のプロファイルをサポートする、WattMan ライクな UI の GUI オーバークロックツール。
https://gitlab.com/corectrl/corectrl || corectrl
  • LACT — AMD GPU の情報を見るための GTK ツール。power-profiles-daemon と競合します。競合を防ぐには amdgpu_dpm を後で無効化してください。[1]
https://github.com/ilya-zlobintsev/LACT || lact
  • Radeon Profile — AMD Radeon カードの現在のクロックを読み込んだり変更したりする Qt5 ツール。
https://github.com/emerge-e-world/radeon-profile || radeon-profile-gitAUR

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

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

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

/etc/udev/rules.d/30-amdgpu-low-power.rules
ACTION=="add", SUBSYSTEM=="drm", DRIVERS=="amdgpu", ATTR{device/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 はヘッドレス環境向けに、ダミープラグを使用しない、GPU アクセラレートされた仮想モニターを提供しています。これは RDP や sunshineAUR といったゲームストリーミングソフトウェアで便利です。

使用する AMD GPU を選択してください:

$ lspci -Dd ::03xx
1234:56:78.9 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] CommercialModelName

amdgpu に対して virtual_display=1234:56:78.9,x カーネルモジュールパラメータを追加してください。1234:56:78.9 の部分は GPU の PCI アドレスで、x は公開する crtc (仮想モニター) の番号です。このパラメータを使用すると物理出力は無効化されます。[2]

以下のように PCI アドレスをセミコロンで区切ることで、複数の GPU を使用することも可能です:

amdgpu.virtual_display=1234:56:78.9,x;9876:54:32.1,y

トラブルシューティング

モジュールパラメータ

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 のクロック速度の管理法に問題があるためです [3][4]

回避策[5]は、#パフォーマンスレベル で説明されているようにパフォーマンスレベルを high あるいは low に設定することです。

カーネルのバージョンを変更することでもこの問題を解決できる場合があります。例えば、バージョン 6.12.9 では問題は解決されているようです。

Chromium でアーティファクト

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

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

AMD R9 390 シリーズのグラフィックカードで問題[6]が発生する場合、次のカーネルパラメータを設定して、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!" カーネルエラーが発生する場合 [7]、回避策は カーネルパラメータ amdgpu.vm_update_mode=3 を設定して GPUVM ページテーブルの更新を CPU を用いて行うように強制することです。デメリットはここにリストされています: [8]

画面が白く/灰色に点滅する

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

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

動的電源管理は、ゲーム中にシステムの完全なフリーズを発生させる場合があります。GPU のクロック速度の管理法に問題があるためです [9]。回避策は、#パフォーマンスレベル で説明されているようにパフォーマンスレベルを high に設定することです。。

WebRenderer (Firefox) の破損

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

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

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

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

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

ディスプレイが固まる、または応答しなくなる (flip_done timed out)

amdgpu ドライバのバグにより、ディスプレイが更新されなくなることがあります[11]。回避策として、amdgpu.dcdebugmask=0x10amdgpu.dcdebugmask=0x12 カーネルパラメータを追加することが提案されています。

kfd: amdgpu: TOPAZ not supported in kfd

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

kfd: amdgpu: TOPAZ not supported in kfd

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

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

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

これは、モニタが 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 の翻訳バージョンです。最後の翻訳日は 2025-06-11 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。