コンテンツにスキップ

「AMDGPU」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
AshMyzk (トーク | 投稿記録)
AshMyzk (トーク | 投稿記録)
同期
 
(4人の利用者による、間の13版が非表示)
1行目: 1行目:
[[Category:グラフィック]]
[[Category:グラフィック]]
[[Category:X サーバー]]
[[Category:X サーバー]]
[[de:AMDGPU]]
[[de:AMDGPU]]
[[hu:AMDGPU]]
[[en:AMDGPU]]
[[en:AMDGPU]]
[[ru:AMDGPU]]
[[zh-hans:AMDGPU]]
[[zh-hans:AMDGPU]]
{{Related articles start}}
{{Related articles start}}
8行目: 10行目:
{{Related|Xorg}}
{{Related|Xorg}}
{{Related|Vulkan}}
{{Related|Vulkan}}
{{Related|AMDGPU PRO}}
{{Related articles end}}
{{Related articles end}}


[[Wikipedia:AMDGPU|AMDGPU]] は [[wikipedia:ja:Graphics_Core_Next|Graphics Core Next]] ファミリの AMD Radeon グラフィックカード向けのオープンソースグラフィックドライバです。
[[Wikipedia:AMDGPU|AMDGPU]] は [[wikipedia:ja:Graphics Core Next|Graphics Core Next]] ファミリの AMD Radeon グラフィックカード向けのオープンソースグラフィックドライバです。


== 適切なドライバーの選択 ==
== 適切なドライバーの選択 ==


自身のハードウェアを確認し、[[画像処理装置#インストール]] を読んで適切なドライバを探してください。このドライバは [https://www.x.org/wiki/RadeonFeature/ Southern Islands] (GCN 1。2012年リリース。) 及びそれ以降のカードをサポートしています。AMD には GCN より前の GPU をサポートする計画はありません。
お持ちのカードに応じて、[[Xorg#AMD]] で適切なドライバーを見つけてください。

このドライバは [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 アクセラレーションに関しては、AMD 固有の DDX ドライバを提供する {{Pkg|xf86-video-amdgpu}} パッケージを任意でインストールしてもよいです。{{ic|amdgpu}} カーネルドライバを使用するほとんどの Xorg システムは、{{Pkg|xorg-server}} に組み込まれている汎用の ''modesetting'' DDX で正常に動作します。しかし、{{Pkg|xf86-video-amdgpu}} は、{{ic|TearFree}} などの機能を使用する場合や、''Southern Islands'' などの一部の AMD ハードウェアでのハードウェア固有の問題を解決するために、必要となることがあります。[[インテルグラフィックス#インストール]] に書かれているノートを参照してください。
* ([[Xorg]] での 2D アクセラレーションを提供する) DDX ドライバに関しては、{{Pkg|xf86-video-amdgpu}} パッケージをインストールしてください。
* [[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 ドライバーを提供します。
40行目: 36行目:
* 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]] 非公式リポジトリを使用できます。}}
48行目: 42行目:
=== 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
75行目: 69行目:
* 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}} をブートオプションに追加してください。


==== 正しいモジュール順序を指定 ====
==== 正しいモジュール順序を指定 ====
80行目: 76行目:
{{ic|amdgpu}} が [[Mkinitcpio#MODULES]] 配列の1番目のモジュールとして設定されていることを確認してください。例えば、{{ic|1=MODULES=(amdgpu radeon)}}。
{{ic|amdgpu}} が [[Mkinitcpio#MODULES]] 配列の1番目のモジュールとして設定されていることを確認してください。例えば、{{ic|1=MODULES=(amdgpu radeon)}}。


===== modprobe.d でモジュールパラメータを設定 =====
===== カーネルモジュールパラメータを設定 =====


Southern Islands (SI) の場合は {{ic|1=si_support=1}} [[カーネルモジュールパラメータ]]を、Sea Islands (CIK) の場合は {{ic|1=cik_support=1}} を使用してください:
{{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}} オプションを使用してください。例:


{{hc|/etc/modprobe.d/amdgpu.conf|2=
{{hc|/etc/modprobe.d/amdgpu.conf|2=
101行目: 95行目:


[[カーネル]]をビルド/コンパイルする場合、{{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 コンパイラ ===
121行目: 100行目:
[https://steamcommunity.com/games/221410/announcements/detail/1602634609636894200 ACO コンパイラ]はオープンソースのシェーダコンパイラであり、[https://llvm.org/ LLVM コンパイラ]や [https://github.com/GPUOpen-Drivers/AMDVLK AMDVLK ドライバ]、[[wikipedia:ja:Microsoft Windows 10|Windows 10]] に直接対抗するために [[wikipedia:ja:Valve Corporation|Valve Corporation]] によって作成・開発されています。LLVM と AMDVLK よりも短いコンパイル時間と、ゲームでのより良いパフォーマンスを提供します。
[https://steamcommunity.com/games/221410/announcements/detail/1602634609636894200 ACO コンパイラ]はオープンソースのシェーダコンパイラであり、[https://llvm.org/ LLVM コンパイラ]や [https://github.com/GPUOpen-Drivers/AMDVLK AMDVLK ドライバ]、[[wikipedia:ja:Microsoft Windows 10|Windows 10]] に直接対抗するために [[wikipedia:ja:Valve Corporation|Valve Corporation]] によって作成・開発されています。LLVM と AMDVLK よりも短いコンパイル時間と、ゲームでのより良いパフォーマンスを提供します。


いくつかのベンチマークは [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][https://www.phoronix.com/scan.php?page=article&item=radv-aco-gcn10&num=1] で見られます。


{{Pkg|mesa}} バージョン 20.2 以降、ACO コンパイラはデフォルトで有効になっています。
{{Pkg|mesa}} バージョン [https://docs.mesa3d.org/relnotes/20.2.0.html#new-features 20.2] から、ACO はデフォルトのシェーダコンパイラとなっています。


== ロード ==
== ロード ==
132行目: 111行目:


* 必要な場合は [[#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 の設定 ==
232行目: 209行目:
=== ビデオアクセラレーション ===
=== ビデオアクセラレーション ===


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


=== モニタリング ===
=== モニタリング ===


GPU の温度や P-state を確認したい場合に GPU のモニタリングはしばしば行われます。
GPU の温度や P-state を確認したい場合に GPU のモニタリングはしばしば行われます。CLI ツールと GUI ツールのリストは [[画像処理装置#モニタリング]] を見てください


個々のパーツを手動でモニタリングしたい場合は (例えば、スクリプト内で使いたい場合)、情報は全て {{ic|/sys/}} で入手できます。その他のパーツや詳細については、[https://docs.kernel.org/gpu/amdgpu/thermal.html The Linux Kernel - GPU Power/Thermal Controls and Monitoring] を参照してください。
==== CLI ====


以下のコマンドでは、システム内にある GPU の数によっては {{ic|card0}} の部分を他の値 (例: {{ic|card1}}) に置き換える必要があるかもしれません。
* {{App|amdgpu_top|AMDGPU の使用率を表示するツール|https://github.com/Umio-Yasuno/amdgpu_top|{{AUR|amdgpu_top}}}}
* {{App|nvtop|AMD、Intel、NVIDIA で GPU プロセスをモニタリングします。|https://github.com/Syllo/nvtop|{{Pkg|nvtop}}}}
* {{App|radeontop|合計のアクティビティ率と個々のブロック両方の GPU 使用率ビュアー。|https://github.com/clbr/radeontop|{{Pkg|radeontop}}}}

==== GUI ====

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

==== 手動 ====


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 温度 (ミリ°C) を確認するには、以下を実行:

$ 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|/sys/class/drm/card0/device/pp_od_clk_voltage}} を介してグラフィックカードのクロックと電圧を調整できるようになります。


==== ブートパラメータ ====
==== ブートパラメータ ====


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


すべてのビットが定義されているわけではありません。今後、新しい機能が追加されるかもしれません。32ビットすべてを設定すると、不安定な機能が有効化され、画面のチラツキやサスペンドからの復帰に失敗するなどの問題が発生する場合があります。デフォルトの ppfeaturemask と共に PP_OVERDRIVE_MASK ビット (0x4000) を設定すれば十分なはずです。あなたのシステムにおいて適切なパラメータを計算するには、以下を実行してください:
すべてのビットが定義されているわけではありません。今後、新しい機能が追加されるかもしれません。32ビットすべてを設定すると、不安定な機能が有効化され、画面のチラツキやサスペンドからの復帰に失敗するなどの問題が発生する場合があります。デフォルトの ppfeaturemask と共に PP_OVERDRIVE_MASK ビット (0x4000) を設定すれば十分なはずです。あなたのシステムにおいて適切なパラメータを計算するには、以下を実行してください:
281行目: 263行目:
$ 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 に設定するには、以下を実行してください:
293行目: 279行目:
# 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|入力した値をダブルチェックしてください。間違うと即座にハードウェアに深刻なダメージを引き起こすかもしれません!}}


適用するには:
適用するには:
301行目: 287行目:
機能していることを確認するには、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


以下でデフォルトの値にリセットできます:
以下でデフォルトの値にリセットできます:
307行目: 293行目:
# 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 のみを許可するには:


# 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 ワット):
329行目: 322行目:


* {{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 ツール =====
334行目: 328行目:
* {{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 ツール。|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|パフォーマンスレベルは起動のたびに再設定する必要があります。設定を自動化する方法は [[#ブート時のスタートアップ]] を見てください。}}


=== 電源プロファイル ===
=== 電源プロファイル ===
344行目: 361行目:
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: - - - - - -
358行目: 375行目:


特定の電源プロファイルを使用するには、まず 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

電源プロファイルの正確な値と制限は、''powerplay table'' システムを通して管理されています。サポートされているモデル (Polaris から Navi2x まで。Navi3x と Navi4x はカーネルにバグがあります。) でこのテーブルを変更するには {{AUR|upliftpowerplay}} を使用してください。


{{Note|電源プロファイルの変更は起動するたびに適用する必要があります。これを自動化するには [[#ブート時のスタートアップ]] を見てください。}}
{{Note|電源プロファイルの変更は起動するたびに適用する必要があります。これを自動化するには [[#ブート時のスタートアップ]] を見てください。}}
372行目: 393行目:
{{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 ドライバはユーザーキューをサポートしています。これにより、カーネルドライバのコマンドサブミッション ioctl を介さずに、ジョブを直接 GPU ハードウェアにサブミットすることができます。
この機能を有効化することで、カーネルドライバのオーバヘッドがいくらか回避され、レイテンシを軽減し効率を向上させることができます。

ユーザーキューを有効化するには、以下の環境変数を設定してください:

export AMD_USERQ=1

=== SDMA による転送のみの専用キュー ===

Mesa 26.0 にマージされたコードは、GFX9 (Vega) 及びそれより新しい GPU で動作する、RADV の専用転送キューのサポートが含まれています。現在、この機能を有効化するには {{ic|RADV_PERFTEST{{=}}transfer_queue}} [[環境変数]]を設定する必要があります。DXVK Direct3D-on-Vulkan レイヤーは、Vulkan の転送キューのサポートを活用するためにソフトウェアないに存在しています。しかし、この新しい機能を正当化するようなパフォーマンス/ベンチマークの数値が[https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25594 マージリクエスト]には含まれていません。


== トラブルシューティング ==
== トラブルシューティング ==

=== モジュールパラメータ ===

amdgpu モジュールは、いくつかの設定パラメータ ({{ic|modinfo amdgpu {{!}} grep mask}}) を[https://raw.githubusercontent.com/torvalds/linux/master/drivers/gpu/drm/amd/include/amd_shared.h カーネルのソースコード]でしかドキュメント化していないマスク内に隠しています。


=== Xorg やアプリケーションが起動しない ===
=== Xorg やアプリケーションが起動しない ===
401行目: 452行目:
[[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}} に設定することです。


カーネルのバージョンを変更することでもこの問題を解決できる場合があります。例えば、バージョン 6.12.9 では問題は解決されているようです。
これを永続化するには、[[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>}}

{{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 でアーティファクト ====
429行目: 470行目:
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}} を追加してください。
441行目: 476行目:
=== 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) の破損 ===
453行目: 488行目:
=== ディスクリート 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 が実行時に動的にオフになることを防止します。


=== ディスプレイが固まる、または応答しなくなる (flip_done timed out) ===
=== kfd: amdgpu: TOPAZ not supported in kfd ===


amdgpu ドライバのバグにより、ディスプレイが更新されなくなることがあります[https://gitlab.freedesktop.org/drm/amd/-/issues/4141]。回避策として、{{ic|1=amdgpu.dcdebugmask=0x10}} か {{ic|1=amdgpu.dcdebugmask=0x12}} [[カーネルパラメータ]]を追加することが提案されています。
システムのジャーナルやカーネルメッセージキーリングに以下の critical レベルのエラーメッセージが出力される場合があります:

kfd: amdgpu: TOPAZ not supported in kfd
=== 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/]

GPU のアーキテクチャによっては、kfd が初期化に失敗することがあります。gfx803 (GCN 4) は PCIe atomics のサポートを必要とします。一方、gfx9xx (Vega) 及びそれ以降のデバイスは、PCIe atomics が必要ありません。kfd は GCN 3 及びそれより古いデバイスをサポートしていません。

[[GPGPU#ROCm|ROCm]] を使用するつもりがないならば、このエラーは安全に無視できます。

==== "[GPU Core Name] not supported in kfd" ====

システムのジャーナルやカーネルのメッセージに、kfd 関連の critical レベルのエラーメッセージが現れることがあります:

{{hc|# dmesg {{!}} grep kfd|
kfd kfd: amdgpu: BONAIRE not supported in kfd
}}

(BONAIRE の部分は GPU 内のコアの名前によって変わります (TOPAZ、HAWAII など)。コア名は GPU を見たり、{{pkg|amdgpu_top}} などのGPU の診断ユーティリティを使うことで分かります。)

このエラーは、kfd は使用中の GPU をサポートしておらず、ROCm で動作しないことを意味しています。[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/]

==== "PCI rejects atomics" ====

GCN 4 GPU では、CPU が PCIe atomics をサポートしている必要があり、GPU のあるスロットは少なくとも PCIe 3.0 をサポートしている必要があります。[https://github.com/ROCm/ROCm/issues/2224#issuecomment-2299689450] これらの要件が満たされない場合、以下のメッセージが出力されます:

{{hc|# dmesg {{!}} grep kfd|
kfd kfd: amdgpu: skipped device 1002:67e3, PCI rejects atomics 730<0
}}

使用中の CPU が PCIe atomics をサポートしているかどうかは、以下のコマンドで分かります:

grep flags /sys/class/kfd/kfd/topology/nodes/*/io_links/0/properties

使用中の CPU が PCIe atomics をサポートしている (つまり、先の出力が {{ic|1}}) がエラーが発生する場合、GPU のあるスロットを変更してください。そのスロットは、CPU からではなく、チップセットから来ているレーンなのかもしれません。


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


これは、モニタが 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 ユーザー空間のサービス]を使うというものがります。

=== 間違った GPU クロックにより複数の問題が発生する ===

{{Accuracy|
* Users provide unreliable reports and operate under wrong assumptions. See [https://gitlab.freedesktop.org/drm/amd/-/issues/3131#note_3007563 explanation].
* If you carefully read through the related issues, the problem appear to be caused by some internal setup of GPU power profiles. Which means the shader clock frequency is not the actual issue here, lowering it is more of a workaround, and it decreases performance.
* Patches addressing the problem were already merged a few major kernel releases back.
* If you are still getting crashes with similar dmesg logs, consider disabling GFXOFF (see [https://gitlab.freedesktop.org/drm/amd/-/issues/3067#note_2959002])
}}

amdgpu モジュールにはバグがあり、ビデオコアの周波数が製造業者によって設定された値よりも高くなることがあります。これにより、ゲーム中やスリープからの復帰時、再起動時にシステムが不安定になることがあります。

この問題は、RDNA 3 GPU (7XXX モデル) で報告されています[https://www.reddit.com/r/linux_gaming/comments/1dyhizb/fyi_for_amd_card_owners_the_linux_kernel_is/] [https://wiki.gentoo.org/wiki/AMDGPU#Frequent_and_Sporadic_Crashes] [https://gitlab.freedesktop.org/drm/amd/-/issues/3131]。

dmesg に以下のようなログが出てきます:

amdgpu: [gfxhub] page fault (src_id:0 ring:40 vmid:6 pasid:32830)
amdgpu: in process GameThread pid 100056 thread vkd3d_queue pid 100468)
amdgpu: in page starting at address 0x0000000218a36000 from client 10
amdgpu: GCVM_L2_PROTECTION_FAULT_STATUS:0x00641051
amdgpu: Faulty UTCL2 client ID: TCP (0x8)
amdgpu: MORE_FAULTS: 0x1
amdgpu: WALKER_ERROR: 0x0
amdgpu: PERMISSION_FAULTS: 0x5
amdgpu: MAPPING_ERROR: 0x0
amdgpu: RW: 0x1

似たような問題が発生する場合は、システムのビデオコアの最大周波数と製造業者の公式の周波数とを比較してください。最大周波数を下げる方法は、[[#オーバークロック]] を見てください。

=== AMD の専用 GPU の HDMI が Wayland でフリーズする ===

具体例として、AMD CPU と専用 AMD GPU を搭載している ASUS G14 2022 ノート PC があります。最も成功しやすい方法では、dGPU Ultimate power オプションを強制するために Windows で armor crate を使う必要があります。これにより、GPU の順序とノート PC の内部電源ポリシーが切り替わります。これにより HDMI が機能するようになるはずですが、統合 GPU (SDDM と Wayland はこちらをデフォルトで選択します) と専用 GPU とでレンダリングが別々になります。アプリケーションの起動前に {{ic|1=DRI_PRIME=0}} 環境変数を設定することでレンダリングを行う GPU を選択できますが、これは簡便ではありません。以下のように設定を変更することで環境変数を設定できますが、バッテリー駆動時にバッテリーの持ちが悪くなります:

{{hc|/etc/sddm.conf.d/hardware.conf|2=
[General]
DisplayServer=wayland
[Wayland]
CompositorCommand=kwin_wayland --drm --no-lockscreen --no-global-shortcuts
Environment=DRI_PRIME=0
}}

これに加えて、以下のカーネルパラメータを追加する必要があります:

amdgpu.runpm=0 amdgpu.modeset=1

=== ノート PC で色があせて薄い ===

{{Pkg|power-profiles-daemon}} や {{Pkg|tuned}} などの省電力アプリケーションは、Panel Power Savings (PPS) として知られる機能を[https://www.phoronix.com/news/Power-Profiles-Daemon-0.20 有効にする]ようになりました。

PPS はノート PC でサポートされている機能で、ノート PC の GPU に色精度を犠牲にする代わりに省電力にするように命令します。しかし、この機能を使うと、前述の power-profiles-daemon や tuned でより強力な省電力モードを選択すると色があせてしまう傾向にあります。そのため、この機能を完全に無効化する人もいます。

以下の[[カーネルパラメータ]]をゼロに設定することで無効化できます:

amdgpu.abmlevel=0

=== アイドル時にシステムがフリーズしたり再起動したりする ===

いくつかの PowerPlay 機能 ([https://www.phoronix.com/news/AMDGPU-GFXOFF-Patches GFXOFF] など) の問題により、高頻度の回復不可能なドライバのクラッシュが発生することがあります[https://forum.endeavouros.com/t/random-crashes-amdgpu/70453]。これは、複数モニターの環境で GPU のアイドル時、とくにスリープモードからの復帰時に発生します。

よく知られた解決法は、([[#ブートパラメータ]] で説明されているように) PP_GFXOFF_MASK を無効化するカーネルパラメータを追加することです (例: {{ic|1=amdgpu.ppfeaturemask=0xffff7fff}}。これは、他の PowerPlay 機能 (実装されているものも未実装のものも含む) を有効化したままにします)。

もう一つの方法は、GFXOFF 以外の機能も無効化する方法を利用することです:

* {{ic|0xfffd7fff}} で [https://www.reddit.com/r/linux4noobs/comments/1ahb8pf/comment/koppio6/ PP_GFXOFF_MASK と PP_STUTTER_MODE] を無効化する。
* {{ic|0xfffd3fff}} で [https://forum.endeavouros.com/t/random-crashes-amdgpu/70453/7?u=krzeszny PP_GFXOFF_MASK、PP_STUTTER_MODE、PP_OVERDRIVE_MASK] を無効化する。
* {{ic|0xfff73fff}} で [https://forum.endeavouros.com/t/random-crashes-amdgpu/70453/15?u=krzeszny PP_GFXOFF_MASK、PP_GFX_DCS_MASK、PP_OVERDRIVE_MASK] を無効化する。
* {{ic|0}} (あるいは {{ic|0x0}}) で全ての機能を無効化する。ドライバのクラッシュの原因が分からない場合はこれを使うことができます。

[https://miniwebtool.com/bitwise-calculator/?data_type=16&number1=ffffffff&number2=8000&operator=XOR 16進数のビット計算機] (リンク先に例あり) で計算して、{{ic|1=amdgpu.ppfeaturemask=0x}} の後にその計算した8文字のマスクを加えることで自分で機能マスクを作ることができます。{{ic|ffffffff}} (全ビット1) から初めて、[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/amd/include/amd_shared.h#n185 マスクしたい機能]を '''XOR''' してください。計算結果に機能を XOR していくことができます。最初のゼロでない文字は全て省略できます。例えば、0x8000 と 0x00008000 は等価です。

カーネルの更新時にパラメータが消されないように注意してください。

=== HDMI 4K が 120Hz までしか上がらない ===

[https://www.phoronix.com/news/HDMI-2.1-OSS-Rejected ライセンス上の問題]により、{{pkg|mesa}} ドライバは HDMI 2.1 をサポートできません。DisplayPort を使う必要があります。ディスプレイが DisplayPort をサポートしていない場合、DisplayPort の入力を HDMI 2.1 の信号に変換する[https://www.reddit.com/r/linux_gaming/comments/1nh5y0f/hdmi_21_works_on_amd_gpu_with_this_converter/ コンバータを使って HDMI 2.1 を使うことができたというユーザがいます]。


== 参照 ==
== 参照 ==


* [[Gentoo:AMDGPU]]
* [[Gentoo:AMDGPU]]
* [https://gitlab.freedesktop.org/drm/amd AMDGPU イシュートラッカー]


{{TranslationStatus|AMDGPU|2023-08-07|784674}}
{{TranslationStatus|AMDGPU|2026-02-14|862509}}

2026年2月14日 (土) 06:57時点における最新版

関連記事

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

適切なドライバーの選択

自身のハードウェアを確認し、画像処理装置#インストール を読んで適切なドライバを探してください。このドライバは Southern Islands (GCN 1。2012年リリース。) 及びそれ以降のカードをサポートしています。AMD には GCN より前の GPU をサポートする計画はありません。

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

インストール

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

  • 32ビットアプリケーションのサポートに関しては、multilib リポジトリから lib32-mesa パッケージもインストールしてください。
  • Xorg における 2D アクセラレーションに関しては、AMD 固有の DDX ドライバを提供する xf86-video-amdgpu パッケージを任意でインストールしてもよいです。amdgpu カーネルドライバを使用するほとんどの Xorg システムは、xorg-server に組み込まれている汎用の modesetting DDX で正常に動作します。しかし、xf86-video-amdgpu は、TearFree などの機能を使用する場合や、Southern Islands などの一部の AMD ハードウェアでのハードウェア固有の問題を解決するために、必要となることがあります。インテルグラフィックス#インストール に書かれているノートを参照してください。
  • 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] で見られます。

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 ツールと GUI ツールのリストは 画像処理装置#モニタリング を見てください。

個々のパーツを手動でモニタリングしたい場合は (例えば、スクリプト内で使いたい場合)、情報は全て /sys/ で入手できます。その他のパーツや詳細については、The Linux Kernel - GPU Power/Thermal Controls and Monitoring を参照してください。

以下のコマンドでは、システム内にある GPU の数によっては card0 の部分を他の値 (例: card1) に置き換える必要があるかもしれません。

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 温度 (ミリ°C) を確認するには、以下を実行:

$ 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 ツール。
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

電源プロファイルの正確な値と制限は、powerplay table システムを通して管理されています。サポートされているモデル (Polaris から Navi2x まで。Navi3x と Navi4x はカーネルにバグがあります。) でこのテーブルを変更するには upliftpowerplayAUR を使用してください。

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

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 (仮想モニター) の番号です。このパラメータを使用すると物理出力は無効化されます。[3]

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

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

ユーザーキュー

AMDGPU ドライバはユーザーキューをサポートしています。これにより、カーネルドライバのコマンドサブミッション ioctl を介さずに、ジョブを直接 GPU ハードウェアにサブミットすることができます。 この機能を有効化することで、カーネルドライバのオーバヘッドがいくらか回避され、レイテンシを軽減し効率を向上させることができます。

ユーザーキューを有効化するには、以下の環境変数を設定してください:

export AMD_USERQ=1

SDMA による転送のみの専用キュー

Mesa 26.0 にマージされたコードは、GFX9 (Vega) 及びそれより新しい GPU で動作する、RADV の専用転送キューのサポートが含まれています。現在、この機能を有効化するには RADV_PERFTEST=transfer_queue 環境変数を設定する必要があります。DXVK Direct3D-on-Vulkan レイヤーは、Vulkan の転送キューのサポートを活用するためにソフトウェアないに存在しています。しかし、この新しい機能を正当化するようなパフォーマンス/ベンチマークの数値がマージリクエストには含まれていません。

トラブルシューティング

モジュールパラメータ

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

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

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

Chromium でアーティファクト

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

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

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

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

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

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

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

WebRenderer (Firefox) の破損

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

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

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

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

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

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

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

kfd が初期化に失敗する

GPU のアーキテクチャによっては、kfd が初期化に失敗することがあります。gfx803 (GCN 4) は PCIe atomics のサポートを必要とします。一方、gfx9xx (Vega) 及びそれ以降のデバイスは、PCIe atomics が必要ありません。kfd は GCN 3 及びそれより古いデバイスをサポートしていません。

ROCm を使用するつもりがないならば、このエラーは安全に無視できます。

"[GPU Core Name] not supported in kfd"

システムのジャーナルやカーネルのメッセージに、kfd 関連の critical レベルのエラーメッセージが現れることがあります:

# dmesg | grep kfd
kfd kfd: amdgpu: BONAIRE  not supported in kfd

(BONAIRE の部分は GPU 内のコアの名前によって変わります (TOPAZ、HAWAII など)。コア名は GPU を見たり、amdgpu_top などのGPU の診断ユーティリティを使うことで分かります。)

このエラーは、kfd は使用中の GPU をサポートしておらず、ROCm で動作しないことを意味しています。[13][14]

"PCI rejects atomics"

GCN 4 GPU では、CPU が PCIe atomics をサポートしている必要があり、GPU のあるスロットは少なくとも PCIe 3.0 をサポートしている必要があります。[15] これらの要件が満たされない場合、以下のメッセージが出力されます:

# dmesg | grep kfd
kfd kfd: amdgpu: skipped device 1002:67e3, PCI rejects atomics 730<0

使用中の CPU が PCIe atomics をサポートしているかどうかは、以下のコマンドで分かります:

grep flags /sys/class/kfd/kfd/topology/nodes/*/io_links/0/properties

使用中の CPU が PCIe atomics をサポートしている (つまり、先の出力が 1) がエラーが発生する場合、GPU のあるスロットを変更してください。そのスロットは、CPU からではなく、チップセットから来ているレーンなのかもしれません。

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

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

これは、モニタが 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 に確保しておくユーザー空間のサービスを使うというものがります。

間違った GPU クロックにより複数の問題が発生する

この記事またはセクションの正確性には問題があります。
理由:
  • Users provide unreliable reports and operate under wrong assumptions. See explanation.
  • If you carefully read through the related issues, the problem appear to be caused by some internal setup of GPU power profiles. Which means the shader clock frequency is not the actual issue here, lowering it is more of a workaround, and it decreases performance.
  • Patches addressing the problem were already merged a few major kernel releases back.
  • If you are still getting crashes with similar dmesg logs, consider disabling GFXOFF (see [20])
(議論: トーク:AMDGPU#)

amdgpu モジュールにはバグがあり、ビデオコアの周波数が製造業者によって設定された値よりも高くなることがあります。これにより、ゲーム中やスリープからの復帰時、再起動時にシステムが不安定になることがあります。

この問題は、RDNA 3 GPU (7XXX モデル) で報告されています[21] [22] [23]

dmesg に以下のようなログが出てきます:

amdgpu: [gfxhub] page fault (src_id:0 ring:40 vmid:6 pasid:32830)
amdgpu:  in process GameThread pid 100056 thread vkd3d_queue pid 100468)
amdgpu:   in page starting at address 0x0000000218a36000 from client 10
amdgpu: GCVM_L2_PROTECTION_FAULT_STATUS:0x00641051
amdgpu:          Faulty UTCL2 client ID: TCP (0x8)
amdgpu:          MORE_FAULTS: 0x1
amdgpu:          WALKER_ERROR: 0x0
amdgpu:          PERMISSION_FAULTS: 0x5
amdgpu:          MAPPING_ERROR: 0x0
amdgpu:          RW: 0x1

似たような問題が発生する場合は、システムのビデオコアの最大周波数と製造業者の公式の周波数とを比較してください。最大周波数を下げる方法は、#オーバークロック を見てください。

AMD の専用 GPU の HDMI が Wayland でフリーズする

具体例として、AMD CPU と専用 AMD GPU を搭載している ASUS G14 2022 ノート PC があります。最も成功しやすい方法では、dGPU Ultimate power オプションを強制するために Windows で armor crate を使う必要があります。これにより、GPU の順序とノート PC の内部電源ポリシーが切り替わります。これにより HDMI が機能するようになるはずですが、統合 GPU (SDDM と Wayland はこちらをデフォルトで選択します) と専用 GPU とでレンダリングが別々になります。アプリケーションの起動前に DRI_PRIME=0 環境変数を設定することでレンダリングを行う GPU を選択できますが、これは簡便ではありません。以下のように設定を変更することで環境変数を設定できますが、バッテリー駆動時にバッテリーの持ちが悪くなります:

/etc/sddm.conf.d/hardware.conf
[General]
DisplayServer=wayland
[Wayland]
CompositorCommand=kwin_wayland --drm --no-lockscreen --no-global-shortcuts
Environment=DRI_PRIME=0

これに加えて、以下のカーネルパラメータを追加する必要があります:

amdgpu.runpm=0 amdgpu.modeset=1

ノート PC で色があせて薄い

power-profiles-daemontuned などの省電力アプリケーションは、Panel Power Savings (PPS) として知られる機能を有効にするようになりました。

PPS はノート PC でサポートされている機能で、ノート PC の GPU に色精度を犠牲にする代わりに省電力にするように命令します。しかし、この機能を使うと、前述の power-profiles-daemon や tuned でより強力な省電力モードを選択すると色があせてしまう傾向にあります。そのため、この機能を完全に無効化する人もいます。

以下のカーネルパラメータをゼロに設定することで無効化できます:

amdgpu.abmlevel=0

アイドル時にシステムがフリーズしたり再起動したりする

いくつかの PowerPlay 機能 (GFXOFF など) の問題により、高頻度の回復不可能なドライバのクラッシュが発生することがあります[24]。これは、複数モニターの環境で GPU のアイドル時、とくにスリープモードからの復帰時に発生します。

よく知られた解決法は、(#ブートパラメータ で説明されているように) PP_GFXOFF_MASK を無効化するカーネルパラメータを追加することです (例: amdgpu.ppfeaturemask=0xffff7fff。これは、他の PowerPlay 機能 (実装されているものも未実装のものも含む) を有効化したままにします)。

もう一つの方法は、GFXOFF 以外の機能も無効化する方法を利用することです:

16進数のビット計算機 (リンク先に例あり) で計算して、amdgpu.ppfeaturemask=0x の後にその計算した8文字のマスクを加えることで自分で機能マスクを作ることができます。ffffffff (全ビット1) から初めて、マスクしたい機能XOR してください。計算結果に機能を XOR していくことができます。最初のゼロでない文字は全て省略できます。例えば、0x8000 と 0x00008000 は等価です。

カーネルの更新時にパラメータが消されないように注意してください。

HDMI 4K が 120Hz までしか上がらない

ライセンス上の問題により、mesa ドライバは HDMI 2.1 をサポートできません。DisplayPort を使う必要があります。ディスプレイが DisplayPort をサポートしていない場合、DisplayPort の入力を HDMI 2.1 の信号に変換するコンバータを使って HDMI 2.1 を使うことができたというユーザがいます

参照

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