「AMDGPU」の版間の差分
(→Xorg の設定: 情報を翻訳して追加) |
(→インストール) |
||
| (4人の利用者による、間の49版が非表示) | |||
| 1行目: | 1行目: | ||
| − | [[Category:グラフィック]] |
+ | [[Category:グラフィックス]] |
[[Category:X サーバー]] |
[[Category:X サーバー]] |
||
| + | [[de:AMDGPU]] |
||
[[en:AMDGPU]] |
[[en:AMDGPU]] |
||
| − | [[ |
+ | [[zh-hans:AMDGPU]] |
{{Related articles start}} |
{{Related articles start}} |
||
| − | {{Related|AMD Catalyst}} |
||
{{Related|ATI}} |
{{Related|ATI}} |
||
{{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 グラフィックカード向けのオープンソースグラフィックドライバです。 |
|
| + | == 適切なドライバーの選択 == |
||
| − | 現在のところ、''amdgpu'' がサポートしているのは [https://www.x.org/wiki/RadeonFeature/ Volcanic Islands] と [https://www.phoronix.com/scan.php?page=news_item&px=AMD-AMDGPU-Released Sea Islands] と [https://www.phoronix.com/scan.php?page=news_item&px=AMDGPU-SI-Experimental-Code Southern Islands] ファミリー以降のカードだけです。Southern Islands は実験的にサポートしています。GCN 以前の GPU をサポートする計画はありません。 |
||
| + | お持ちのカードに応じて、[[Xorg#AMD]] で適切なドライバーを見つけてください。このドライバは [https://www.x.org/wiki/RadeonFeature/ Southern Islands] (GCN 1。2012年リリース。) 及びそれ以降のカードをサポートしています。AMD には GCN より前の GPU をサポートする計画はありません。 |
||
| − | サポートされていない AMD/ATI のビデオカードを利用している場合は [[ATI|Radeon オープンソースドライバー]]や [[AMD Catalyst|AMD のプロプライエタリドライバー]]を使ってください。 |
||
| − | |||
| − | == 適切なドライバーの選択 == |
||
| + | サポートされない GPU については、オープンソースの [[ATI]] ドライバを使用できます。 |
||
| − | お持ちのカードに応じて、 [https://wiki.archlinux.jp/index.php/Xorg#AMD Xorg#AMD] で適切なドライバーを見つけてください。 このページには、'''AMDGPU''' および '''AMDGPUPRO''' の説明があります。 |
||
| − | 現在、Southern Islands(AI)カードを介した[https://www.x.org/wiki/RadeonFeature/ Southern Islands(SI)] のXorg [[radeon]] ドライバーサポートがあります。 AMD は GCN 以前の GPU をサポートする予定はありません。 |
||
| − | サポートされていない GPU の所有者は、オープンソースの [[radeon]] または [[AMD Catalyst]] ドライバーを使用できます。 |
||
== インストール == |
== インストール == |
||
| + | {{Pkg|mesa}} パッケージを[[インストール]]してください。これには、3D アクセラレーションのための DRI ドライバーと、[[#ビデオアクセラレーション|動画デコードのアクセラレーション]]のための VA-API/VDPAU ドライバの両方が含まれています。 |
||
| − | {{Note|プロプライエタリの Catalyst ドライバーから移行する場合、先に [[AMD Catalyst#アンインストール]] を読んでください。}} |
||
| − | {{Pkg|mesa}} パッケージ |
+ | * 32ビットアプリケーションのサポートに関しては、[[multilib]] リポジトリから {{Pkg|lib32-mesa}} パッケージもインストールしてください。 |
| + | * ([[Xorg]] での 2D アクセラレーションを提供する) DDX ドライバに関しては、{{Pkg|xf86-video-amdgpu}} パッケージをインストールすることで利用可能です。デフォルトの modesetting ドライバが存在するため、このパッケージは必要ありません。 |
||
| + | * [[Vulkan]]をサポートするには、{{Pkg|vulkan-radeon}} (32ビットアプリケーションの場合は {{Pkg|lib32-vulkan-radeon}}) をインストールしてください。 |
||
| + | === 試験的 === |
||
| − | * x86_64 環境で32ビットのサポートが必要な場合、[[multilib]] リポジトリから {{Pkg|lib32-mesa}} パッケージもインストールしてください。 |
||
| − | * {{Pkg|xf86-video-amdgpu}} パッケージには [[Xorg]] の 2D アクセラレーションのための DDX ドライバーが含まれています。 |
||
| − | * [[Vulkan]] のサポートが必要な場合は {{Pkg|vulkan-radeon}} パッケージをインストールしてください。 |
||
| + | 一部のユーザーにとっては、mesa の上流の試験的ビルドを使用する価値があるかもしれません。 |
||
| − | [[#ビデオアクセラレーションの有効化|ビデオデコードのハードウェア支援]]機能は VA-API を使用する場合 {{Pkg|libva-mesa-driver}} と {{Pkg|lib32-libva-mesa-driver}} パッケージ、または {{Pkg|libva-vdpau-driver}} をインストールすることで使えます。VDPAU を使用する場合は {{Pkg|mesa-vdpau}} と {{Pkg|lib32-mesa-vdpau}} パッケージをインストールすることで使えます。 |
||
| + | {{AUR|mesa-git}} パッケージをインストールしてください。これは 3D アクセラレーション用の DRI ドライバーを提供します。 |
||
| − | === 実験的 === |
||
| + | * 32 ビットアプリケーションのサポートに関しては、''mesa-git'' リポジトリ、または [[AUR]] から {{AUR|lib32-mesa-git}} もインストールしてください。 |
||
| − | 一部のユーザーにとっては、 mesa のアップストリーム実験ビルドを使用して、標準の mesa パッケージに含まれていない AMDNavi の改善などの機能を有効にする価値があるかもしれません。 |
||
| + | * ([[Xorg]] で 2D アクセラレーションを提供する) DDX ドライバに関しては、{{AUR|xf86-video-amdgpu-git}} パッケージをインストールしてください。 |
||
| + | * ''mesa-git'' リポジトリを使用する [[Vulkan]] サポートに関しては、''vulkan-radeon-git'' パッケージをインストールしてください。任意で、32 ビットアプリケーションをサポートするために ''lib32-vulkan-radeon-git'' パッケージもインストールしてください。AUR から {{AUR|mesa-git}} をビルドする場合、これは必要ないはずです。 |
||
| − | {{AUR|mesa-git}} パッケージ |
+ | {{Tip|{{AUR|mesa-git}} パッケージのコンパイルを行いたくない場合は、[[非公式ユーザーリポジトリ#mesa-git|mesa-git]] 非公式リポジトリを使用できます。}} |
| + | === Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化 === |
||
| − | * 32 ビットアプリケーションをサポートする場合は、 ''mesa-git'' リポジトリまたは [[AUR]] から {{AUR|lib32-mesa-git}} パッケージもインストールします。 |
||
| − | * DDX ドライバー ([[Xorg]] で 2D アクセラレーションを提供) の場合は、 {{AUR|xf86-video-amdgpu-git}} パッケージをインストールします。 |
||
| − | *以下の ''mesa-git'' リポジトリを使用した [[Vulkan]] サポートについては、''vulkan-radeon-git'' パッケージをインストールしてください。オプションで、32 ビットアプリケーションをサポートするために ''lib32-vulkan-radeon-git '' パッケージをインストールします。 AUR から {{AUR|mesa-git}} をビルドする場合、これは必要ありません。 |
||
| + | [[カーネル#公式サポートカーネル|公式サポートカーネル]]では、Southern Islands (GCN 1。2012年リリース。) 及び Sea Islands (GCN 2。2013年リリース。) のカードの AMDGPU サポートが有効化されています。{{ic|amdgpu}} カーネルドライバは [[ATI|radeon]] ドライバより前にロードされる必要があります。どのカーネルドライバがロードされているかは {{ic|lspci -k}} で確認できます。以下のように出力されるはずです: |
||
| − | {{Note|X を起動するには、 LibLLVM をシンボリックリンクする必要がある場合があります。例:{{ic|ln -s /usr/lib/libLLVM-10git.so /usr/lib/libLLVM-10svn.so}}}} |
||
| + | {{hc|$ lspci -k -d ::03xx| |
||
| − | {{Tip| {{AUR|mesa-git}} パッケージのコンパイルプロセスを実行したくないユーザーは、[[非公式ユーザーリポジトリ#mesa-git|mesa-git]] 非公式リポジトリを使用できます。}} |
||
| + | 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 |
||
| + | }} |
||
| + | {{ic|amdgpu}} ドライバが使用されていない場合、次のセクションの指示に従ってください。 |
||
| − | === Southern Islands (SI) と Sea Islands (CIK) のサポートの有効化 === |
||
| + | ==== amdgpu ドライバをロード ==== |
||
| − | {{Pkg|linux}} パッケージは、Southern Islands(SI、つまり GCN 1)と Sea Islands(CIK、つまり GCN 2)のカードの AMDGPU サポートを有効にします。 [[kernel]] をビルドまたはコンパイルするときは、{{ic|1=CONFIG_DRM_AMDGPU_SI=Y}} および/または {{ic|1=CONFIG_DRM_AMDGPU_CIK=Y}} を構成で設定する必要があります。 |
||
| + | {{ic|amdgpu}} モジュールと {{ic|radeon}} モジュールの両方の[[モジュールパラメータ]]は {{ic|1=cik_support=}} と {{ic|1=si_support=}} です。 |
||
| − | ==== 正しいモジュール順序を指定してください ==== |
||
| + | これらは、カーネルパラメータまたは ''modprobe'' 設定ファイルで設定する必要があり、カードの GCN バージョンによって異なります。 |
||
| − | カーネルによって SI/CIK の AMDGPU サポートが有効になっている場合でも、[[radeon]] ドライバーが {{ic|amdgpu}} ドライバーの前にロードされる場合があります。 |
||
| + | どのカーネルカードを使用しているか不確かな場合は、両方のパラメータを使うことができます。 |
||
| − | {{ic|amdgpu}} が [[Mkinitcpio#MODULES]] 配列の最初のモジュールとして設定されていることを確認してください。 |
||
| − | 例えば {{ic|1=MODULES=(amdgpu radeon)}} |
||
| + | {{Tip|[[dmesg]] は、使用すべき正しい方のカーネルパラメータを示してくれる場合があります: {{ic|1=[..] amdgpu 0000:01:00.0: Use radeon.cik_support=0 amdgpu.cik_support=1 to override}}}} |
||
| − | ==== 必要なモジュールパラメータを設定します ==== |
||
| − | + | ===== カーネルコマンドラインでモジュールパラメータを設定 ===== |
|
| − | + | 次のいずれかの[[カーネルパラメータ]]を設定してください: |
|
| + | * Southern Islands (SI): {{ic|1=radeon.si_support=0 amdgpu.si_support=1}} |
||
| − | {{Tip|[[dmesg]] は、使用する正しいカーネルパラメータを示している可能性があります: {{ic|1=[..] amdgpu 0000:01:00.0: Use radeon.cik_support=0 amdgpu.cik_support=1 to override}}.}} |
||
| + | * 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}} をブートオプションに追加してください。 |
||
| − | ===== カーネルコマンドラインでモジュールパラメータを設定します ===== |
||
| + | ==== 正しいモジュール順序を指定 ==== |
||
| − | 次のいずれかを設定します [[カーネルパラメータ]] |
||
| − | |||
| − | * 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}} |
||
| + | {{ic|amdgpu}} が [[Mkinitcpio#MODULES]] 配列の1番目のモジュールとして設定されていることを確認してください。例えば、{{ic|1=MODULES=(amdgpu radeon)}}。 |
||
| − | ===== modprobe.d でモジュールパラメータを設定します ===== |
||
| + | ===== カーネルモジュールパラメータを設定 ===== |
||
| − | {{ic|/etc/modprobe.d/}} に構成 [[modprobe]] ファイルを作成します。構文の詳細については、 {{man|5|modprobe.d}} を参照してください。 |
||
| − | Southern Islands(SI)の場合は |
+ | 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= |
||
| 90行目: | 89行目: | ||
}} |
}} |
||
| − | {{ic|modconf}} が {{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 配列にあ |
+ | {{ic|modconf}} が {{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 配列にあることを確認し、[[Initramfs を再生成する|initramfs を再生成]]してください。 |
| − | === |
+ | ===== amdgpu ドライバをサポートするカーネルをコンパイル ===== |
| − | {{Note|AMD DC はカーネル 4.15 以上で使用できます。}} |
||
| − | |||
| − | AMD DC (ディスプレイコード) はアトミックなモードセッティングや HDMI/DP オーディオをサポートする新しいディスプレイスタックです。GCN5/Vega 以降のカードではデフォルトで有効になります。 |
||
| + | [[カーネル]]をビルド/コンパイルする場合、{{ic|1=CONFIG_DRM_AMDGPU_SI=Y}} と {{ic|1=CONFIG_DRM_AMDGPU_CIK=Y}} の一方/両方を config で設定する必要があります。 |
||
| − | 旧式のカード (GCN2/CIK, GCN3/VI, GCN4/Polaris; GCN1/SI は未対応) で AMD DC を有効にするには {{ic|1=amdgpu.dc=1}} [[カーネルパラメータ]]を追加してください。詳しくは [https://www.phoronix.com/scan.php?page=news_item&px=AMDGPU-DC-Accepted こちらの記事] を参照。 |
||
| − | === |
+ | === ACO コンパイラ === |
| − | {{Warning|Arch Linux は公式にはサポートされていません。}} |
||
| − | {{Note| |
||
| − | *プロプライエタリな OpenCL コンポーネントだけを使いたい場合は {{AUR|opencl-amd}} パッケージをインストールしてください。 |
||
| − | *AMDGPU PRO 17.10 を使うには {{pkg|linux}} (4.9) と [[Xorg]] (1.18) パッケージの[[ダウングレード]]が必要になります。 |
||
| − | }} |
||
| + | [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 よりも短いコンパイル時間と、ゲームでのより良いパフォーマンスを提供します。 |
||
| − | AMD はオープンソースの AMDGPU カーネルドライバーの上で動作するバイナリのユーザーランドドライバー ''AMDGPU PRO'' を提供しています。AMDGPU PRO ドライバーは OpenGL, [[OpenCL]], [[Vulkan]], [[VDPAU]] をサポートしており、オープンソースドライバーよりも高い性能を発揮します。詳しくは [http://support.amd.com/en-us/kb-articles/Pages/AMDGPU-PRO-Driver-for-Linux-Release-Notes.aspx 最初のリリースノート] と [https://www.phoronix.com/forums/forum/linux-graphics-x-org-drivers/amd-linux/855699-amd-representative-says-their-vulkan-linux-driver-will-be-here-soon/page6 Phoronix フォーラムでのアナウンス] を参照してください。 |
||
| + | いくつかのベンチマークは [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)] で見られます。 |
||
| − | 公式の AMDGPU PRO ドライバーにパッチを適用したバージョンが {{AUR|amdgpu-pro}}{{Broken package link|パッケージが存在しません}} パッケージでインストールできます。 |
||
| + | |||
| + | {{Pkg|mesa}} バージョン [https://docs.mesa3d.org/relnotes/20.2.0.html#new-features 20.2] から、ACO はデフォルトのシェーダコンパイラとなっています。 |
||
== ロード == |
== ロード == |
||
| − | {{ic|amdgpu}} カーネルモジュールはシステムの起動時に自動的にロードされます。 |
+ | {{ic|amdgpu}} カーネルモジュールはシステムの起動時に自動的にロードされることになっています。 |
ロードされない場合: |
ロードされない場合: |
||
| − | * |
+ | * 必要な場合は [[#Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化]]していることを確認してください。 |
| − | * |
+ | * 最新の {{Pkg|linux-firmware-amdgpu}} パッケージがインストールされていることを確認してください。このドライバは、正しくブートするために各モデルの最新のファームウェアを必要とします。 |
| − | * [[カーネル |
+ | * [[カーネルパラメータ]]に {{ic|nomodeset}} や {{ic|1=vga=}} を指定して'''いない'''ことを確認してください。{{ic|amdgpu}} は [[KMS]] を必要とするからです。 |
| + | * [[カーネルモジュール#ブラックリスト|カーネルモジュールのブラックリスト]]で {{ic|amdgpu}} が無効になっていないことを確認してください。 |
||
| + | 読み込むことはできるが、X サーバが必要とする時よりも後になってしまう場合、[[カーネルモード設定#KMS の早期開始]] を見てください。 |
||
| − | === Early KMS の有効化 === |
||
| + | == Xorg の設定 == |
||
| − | {{Tip|解像度に問題が発生する場合、[[Kernel Mode Setting#モードの強制と EDID]] を読んでください。}} |
||
| + | [[Xorg]] は自動的にドライバをロードし、モニタの EDID を使ってネイティブの解像度を設定してくれます。設定が必要になるのは、ドライバをチューニングする場合のみです。 |
||
| − | [[Kernel Mode Setting]] (KMS) は radeon ドライバーによってサポートされており、必須であり、デフォルトで有効になっています。 |
||
| + | 手動で設定したい場合、{{ic|/etc/X11/xorg.conf.d/20-amdgpu.conf}} を作成して、以下を記述してください: |
||
| − | 普通 KMS は [[Arch ブートプロセス#initramfs|initramfs]] の後に初期化されます。ただし、initramfs の段階で KMS を有効化することも可能です。{{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} 行に {{ic|amdgpu}} モジュールを追加してください: |
||
| − | + | {{hc|/etc/X11/xorg.conf.d/20-amdgpu.conf|2= |
|
| + | Section "OutputClass" |
||
| + | Identifier "AMD" |
||
| + | MatchDriver "amdgpu" |
||
| + | Driver "amdgpu" |
||
| + | EndSection |
||
| + | }} |
||
| + | このセクションを使って、機能を有効化したりドライバの設定を調整したりできます。ドライバオプションを設定する前に、まず {{man|4|amdgpu}} を見てください。 |
||
| − | そして、initramfs を再生成してください: |
||
| + | === TearFree レンダリング === |
||
| − | # mkinitcpio -p linux |
||
| + | ''TearFree'' は、ハードウェアのページフリッピング機構を使ってティアリング防止を制御します。デフォルトでは、TearFree は、回転された出力、RandR 変換が適用された出力、RandR 1.4 スレーブ出力に対してオンになり、それら以外ではオフになります。{{ic|true}} か {{ic|false}} を指定することで、常にオンにしたり、常にオフにしたりもできます。 |
||
| − | 変更は再起動後に適用されます。 |
||
| + | Option "TearFree" "true" |
||
| − | == Xorg の設定 == |
||
| + | [[xrandr]] を使用して TearFree を一時的に有効にすることもできます: |
||
| − | Xorg は自動的にドライバーをロードしてモニターの EDID を認識して最大解像度を設定します。必要な設定はドライバーのチューニングだけです。 |
||
| + | $ xrandr --output ''output'' --set TearFree on |
||
| − | 手動で設定したい場合、{{ic|/etc/X11/xorg.conf.d/20-amdgpu.conf}} を作成して、以下を記述してください: |
||
| + | {{ic|''output''}} は {{ic|DisplayPort-0}} や {{ic|HDMI-A-0}} のような形式である必要があります。この値は {{ic|xrandr -q}} で取得できます。 |
||
| − | Section "Device" |
||
| + | |||
| + | === DRI レベル === |
||
| + | |||
| + | ''DRI'' は、有効にする DRI の最大レベルを設定します。有効な値は、DRI2 の場合は ''2''、 DRI3 の場合は ''3'' です。 [[Xorg]] バージョンが 1.18.3 以降の場合、DRI3 のデフォルトは ''3'' です。それ以外の場合、 DRI2 が使用されます: |
||
| + | |||
| + | Option "DRI" "3" |
||
| + | |||
| + | === 可変リフレッシュレート === |
||
| + | |||
| + | [[可変リフレッシュレート]] を参照してください。 |
||
| + | |||
| + | === 10 ビットカラー === |
||
| + | |||
| + | {{Warning|10 ビットカラーを有効化すると、多くのアプリケーションでグラフィックの乱れやクラッシュを引き起こす場合があります。これには特に [[Steam/トラブルシューティング#Steam: An X Error occurred|Steam]] が含まれ、X Error によりクラッシュします。}} |
||
| + | |||
| + | 新しい AMD カードは 10bpc カラーをサポートしていますが、デフォルトは 24 ビットカラーであり、30 ビットカラーは明示的に有効にする必要があります。アプリケーションがこれもサポートしている場合、これを有効にすると、グラデーションの目に見えるバンディング/グラフィックの乱れを減らすことができます。モニターがサポートしているかどうかを確認するには、[[Xorg#一般|Xorg ログファイル]]で ''EDID'' を検索してください (例:{{ic|/var/log/Xorg.0.log}} または {{ic|~/.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 を実行している場合は終了し、白黒の縞模様を表示する {{ic|Xorg -retro}} を実行し、{{ic|Ctrl-Alt-F1}} と {{ic|Ctrl-C}} を押して X を終了し、{{ic|Xorg -depth 30 -retro}} を実行してください。これが正常に機能する場合は、10ビットが機能しています。 |
||
| + | |||
| + | {{ic|startx}} を介して10ビットで起動するには、{{ic|startx -- -depth 30}} を使用してください。永続的に有効にするには、以下を作成または追加してください: |
||
| + | |||
| + | {{hc|/etc/X11/xorg.conf.d/20-amdgpu.conf|2= |
||
| + | Section "Screen" |
||
| + | Identifier "asdf" |
||
| + | DefaultDepth 30 |
||
| + | EndSection |
||
| + | }} |
||
| + | |||
| + | === 出力のレイテンシを減らす === |
||
| + | |||
| + | レイテンシを最小化したい場合、ページフリッピングや TearFree を無効化できます: |
||
| + | |||
| + | {{hc|/etc/X11/xorg.conf.d/20-amdgpu.conf|2= |
||
| + | Section "OutputClass" |
||
Identifier "AMD" |
Identifier "AMD" |
||
| + | MatchDriver "amdgpu" |
||
Driver "amdgpu" |
Driver "amdgpu" |
||
| + | Option "EnablePageFlip" "off" |
||
| − | EndSection |
||
| + | Option "TearFree" "false" |
||
| + | EndSection |
||
| + | }} |
||
| + | レイテンシを更に減らしたい場合は [[ゲーム#DRI の遅延を軽減する]] を見てください。 |
||
| − | 上記のセクションを使って、ドライバーの設定を変更したり機能を有効にすることができます。 |
||
| + | {{Note|これらのオプションを設定すると、ティアリングや短時間のアーティファクトが発生する場合があります。}} |
||
| − | === TearFree レンダリング === |
||
| + | == 機能 == |
||
| − | ''TearFree'' は、ハードウェアのページめくりメカニズムを使用して、引き裂き防止を制御します。 このオプションが設定されている場合、プロパティのデフォルト値はそれに応じて ''オン'' または ''オフ'' になります。 このオプションが設定されていない場合、プロパティのデフォルト値は auto です。これは、回転出力、 RandR 変換が適用された出力、および RandR 1.4スレーブ出力の場合はTearFreeがオンになり、それ以外の場合はオフになります。 |
||
| + | === ビデオアクセラレーション === |
||
| − | Option "TearFree" "true" |
||
| + | [[ハードウェアビデオアクセラレーション#AMD/ATI]] を見てください。 |
||
| − | [[xrandr]] を使用して TearFree を一時的に有効にすることもできます。 |
||
| + | === モニタリング === |
||
| − | $ xrandr --output ''output'' --set TearFree on |
||
| + | GPU の温度や P-state を確認したい場合に GPU のモニタリングはしばしば行われます。 |
||
| − | {{ic|''output''}} は {{ic|DisplayPort-0}} または {{ic|HDMI-A-0}} のようになり、 {{ic|xrandr-q}} を実行して取得できます。 |
||
| + | ==== CLI ==== |
||
| − | == パフォーマンスチューニング == |
||
| − | === ビデオアクセラレーションの有効化 === |
||
| − | [[VA-API]] や [[VDPAU]] をインストールすることでハードウェアアクセラレーションによる動画のエンコード・デコードを行うことができます。 |
||
| + | * {{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}}}} |
||
| − | 以下のオプションは {{ic|/etc/X11/xorg.conf.d/''20-amdgpu.conf''}} で設定します。 |
||
| + | * {{App|radeontop|合計のアクティビティ率と個々のブロック両方の GPU 使用率ビュアー。|https://github.com/clbr/radeontop|{{Pkg|radeontop}}}} |
||
| + | ==== GUI ==== |
||
| − | ドライバーオプションの設定について詳しくは {{man|4|amdgpu}} を読んでください。 |
||
| + | * {{App|amdgpu_top|AMDGPU の使用率を表示するツール|https://github.com/Umio-Yasuno/amdgpu_top|{{Pkg|amdgpu_top}}}} |
||
| − | '''DRI''' は有効にする DRI のレベルを設定します。DRI2 の場合は ''2''、DRI3 の場合は ''3'' と設定します。Xorg バージョン 1.18.3 以上ではデフォルト値は ''3'' となっており、古いバージョンでは DRI2 が使われます: |
||
| + | * {{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}}}} |
||
| + | ==== 手動 ==== |
||
| − | Option "DRI" "3" |
||
| + | GPU の P-state を確認するには、以下を実行: |
||
| − | '''TearFree''' はハードウェアのページフリップ機能を使って、ちらつきを抑えます。オプションを設定すると、プロパティのデフォルト値が ''auto'' に設定され、回転などの RandR の操作で TearFree がオンになります: |
||
| + | $ cat /sys/class/drm/card0/device/pp_od_clk_voltage |
||
| − | Option "TearFree" "true" |
||
| + | GPU をモニタリングするには、以下を実行: |
||
| − | == トラブルシューティング == |
||
| + | # watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info |
||
| − | === HDMI/DP の音声が出力されない === |
||
| + | GPU 使用率を確認するには、以下を実行: |
||
| − | オープンソースの AMDGPU ドライバーはカーネル 4.15 でマージされた [[#Vega 以前のカードで AMD DC を有効にする|DC]] (旧 ''DAL'') のコードを使用します [https://www.phoronix.com/scan.php?page=news_item&px=AMDGPU-DC-Accepted]。カーネル 4.15 が[[公式リポジトリ]]から使用できるようになるまでは、HDMI や DisplayPort の音声サポートは利用できません。HDMI や DisplayPort から音声出力を使用するには [[#AMDGPU PRO|AMDGPU PRO]] ドライバーを使用するか {{AUR|linux-amd-staging-drm-next-git}} (または linux-amd-*) カーネルを使用する必要があります。 |
||
| + | $ cat /sys/class/drm/card0/device/gpu_busy_percent |
||
| − | === HDMI で表示位置がおかしい === |
||
| + | GPU のクロックを確認するには、以下を実行: |
||
| − | {{ic|1=amdgpu.audio=0}} [[カーネルパラメータ]]を使うことで (問題のある) HDMI の音声サポートを有効にしないようにできます [https://bugzilla.kernel.org/show_bug.cgi?id=195737]。 |
||
| + | |||
| + | $ 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 以降、以下の機能をブート時に有効化すると、{{Ic|1=/sys/class/drm/card0/device/pp_od_clk_voltage}} を介してグラフィックカードのクロックと電圧を調整できるようになります。 |
||
| + | |||
| + | ==== ブートパラメータ ==== |
||
| + | |||
| + | {{Ic|1=amdgpu.ppfeaturemask=0xffffffff}} [[カーネルパラメータ]] を追加して、sysfs でクロックと電圧を調整するアクセスをアンロックする必要があります。 |
||
| + | |||
| + | すべてのビットが定義されているわけではありません。今後、新しい機能が追加されるかもしれません。32ビットすべてを設定すると、不安定な機能が有効化され、画面のチラツキやサスペンドからの復帰に失敗するなどの問題が発生する場合があります。デフォルトの ppfeaturemask と共に PP_OVERDRIVE_MASK ビット (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}} パフォーマンスレベルを選択してください。 |
||
| + | |||
| + | 例えば、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 |
||
| + | |||
| + | {{Warning|入力した値をダブルチェックしてください。間違うと即座にハードウェアに深刻なダメージを引き起こすかもしれません!}} |
||
| + | |||
| + | 適用するには: |
||
| + | |||
| + | # 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 を調べ、それを設定してください: |
||
| + | |||
| + | {{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 "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 '''50'''000000 > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap |
||
| + | |||
| + | {{Note|上記の手順は Polaris RX 560 カードでテストされました。別の GPU では、異なる挙動やバグが存在するかもしれません。}} |
||
| + | |||
| + | ==== アシスト付き ==== |
||
| + | |||
| + | GPU を手動でオーバークロックしたくない場合、AMD GPU のオーバークロックやモニタリングをアシストするいくつかのツールがコミュニティによって提供されています。 |
||
| + | |||
| + | ===== CLI ツール ===== |
||
| + | |||
| + | * {{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 ツール ===== |
||
| + | |||
| + | * {{App|TuxClocker|Qt5 のモニタリング・オーバークロックツール|https://github.com/Lurkki14/tuxclocker|{{AUR|tuxclocker}}}} |
||
| + | * {{App|CoreCtrl|アプリケーション毎のプロファイルをサポートする、WattMan ライクな UI の GUI オーバークロックツール。|https://gitlab.com/corectrl/corectrl|{{Pkg|corectrl}}}} |
||
| + | * {{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}}}} |
||
| + | |||
| + | ==== ブート時のスタートアップ ==== |
||
| + | |||
| + | 方法としては、一つは 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|パフォーマンスレベルは起動のたびに再設定する必要があります。設定を自動化する方法は [[#ブート時のスタートアップ]] を見てください。}} |
||
| + | |||
| + | === 電源プロファイル === |
||
| + | |||
| + | AMDGPU は電源プロファイルによるいくつかの最適化を提供します。最も一般的に使用されるのは、OpenCL を多用するアプリケーションのためのコンピュートモードです。利用可能な電源プロファイルは以下のように一覧表示できます: |
||
| + | |||
| + | {{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 |
||
| + | 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: - - - - - - |
||
| + | }} |
||
| + | |||
| + | {{Note|{{ic|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 |
||
| + | |||
| + | {{Note|電源プロファイルの変更は起動するたびに適用する必要があります。これを自動化するには [[#ブート時のスタートアップ]] を見てください。}} |
||
| + | |||
| + | === GPU ディスプレイスケーリングを有効化 === |
||
| + | |||
| + | モニタのネイティブ解像度を使用しない場合、ディスプレイに内蔵されているスケーラを用いずに、GPU 自体のスケーラを使うには、以下を実行してください: |
||
| + | $ xrandr --output ''output'' --set "scaling mode" ''scaling_mode'' |
||
| + | |||
| + | {{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}} |
||
| + | |||
| + | === ヘッドレス環境での仮想ディスプレイ === |
||
| + | |||
| + | 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 やアプリケーションが起動しない === |
||
| + | * ''glxgears'' を開いた後に "(EE) AMDGPU(0): [DRI2] DRI2SwapBuffers: drawable has no back or front?" エラー。Xorg サーバを開くことはできるが、OpenGL アプリケーションはクラッシュする。 |
||
| − | Xorg の色深度を 16 や 32 に設定すると以下のような問題が発生します: |
||
| + | * "(EE) AMDGPU(0): Given depth (32) is not supported by amdgpu driver" エラー。Xorg が起動しない。 |
||
| + | |||
| + | Xorg でスクリーンの色深度を 16 か 32 に設定すると問題/クラッシュを引き起こします。これを防ぐには、"screen" セクションに以下を追加して標準的なスクリーン色深度である 24 を使う必要があります: |
||
| + | |||
| + | {{hc|/etc/X11/xorg.conf.d/10-screen.conf| |
||
| + | Section "Screen" |
||
| + | Identifier "Screen" |
||
| + | DefaultDepth 24 |
||
| + | SubSection "Display" |
||
| + | Depth 24 |
||
| + | EndSubSection |
||
| + | EndSection |
||
| + | }} |
||
| + | |||
| + | === スクリーンのアーティファクトと周波数の問題 === |
||
| + | |||
| + | [[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|high}} あるいは {{ic|low}} に設定することです。 |
||
| + | |||
| + | カーネルのバージョンを変更することでもこの問題を解決できる場合があります。例えば、バージョン 6.12.9 では問題は解決されているようです。 |
||
| + | |||
| + | ==== Chromium でアーティファクト ==== |
||
| + | |||
| + | [[Chromium]] でアーティファクトが現れる場合、vulkan ベースのバックエンドの使用を強制すると解決するかもしれません。{{ic|chrome://flags}} を開き、{{ic|#ignore-gpu-blocklist}} と {{ic|#enable-vulkan}} を ''enable'' にしてください。 |
||
| + | |||
| + | === R9 390 シリーズで悪いパフォーマンス/不安定 === |
||
| + | |||
| + | AMD R9 390 シリーズのグラフィックカードで問題[https://gitlab.freedesktop.org/mesa/mesa/-/issues/1222]が発生する場合、次の[[カーネルパラメータ]]を設定して、radeon ではなく amdgpu ドライバの使用を強制してください: {{ic|1=radeon.cik_support=0 radeon.si_support=0 amdgpu.cik_support=1 amdgpu.si_support=1 amdgpu.dc=1}} |
||
| + | |||
| + | これがうまく行かない場合、DPM を無効化すると解決するかもしれません。次を[[カーネルパラメータ]]に追加してください: {{ic|1=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!" カーネルエラーが発生する場合 [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|1=amdgpu.sg_display=0}} を追加してください。 |
||
| + | |||
| + | === Vega カード上でのゲーム中にシステムのフリーズ/クラッシュ === |
||
| + | |||
| + | [[ATI#動的電源管理|動的電源管理]]は、ゲーム中にシステムの完全なフリーズを発生させる場合があります。GPU のクロック速度の管理法に問題があるためです [https://gitlab.freedesktop.org/drm/amd/-/issues/716]。回避策は、[[#パフォーマンスレベル]] で説明されているようにパフォーマンスレベルを {{ic|high}} に設定することです。。 |
||
| + | |||
| + | === WebRenderer (Firefox) の破損 === |
||
| + | |||
| + | [[:en:Firefox/Tweaks#WebRender|WebRenderer]] がユーザによって強制的に有効化されている場合、アーティファクトやその他の異常が発生する場合があります(例: 拡張機能のオプションを選択できないなど)。回避策は OpenGL コンポジットにフォールバックすることです。 |
||
| + | |||
| + | === 4K@60Hz のデバイスが接続されると音声の速度が2倍になる/音が高くなる/無音 === |
||
| + | |||
| + | これは、AMDGPU デバイスと、HDMI で接続された 4K ディスプレイとの間の通信の問題により時々発生します。利用可能な回避策は、ディスプレイの組み込み設定から HDR か "Ultra HD Deep Color" を有効化することです。多くの Android ベースのテレビでは、これは "Optimal" ではなく "Standard" を設定することを意味します。 |
||
| + | |||
| + | === ディスクリート amdgpu グラフィックカードにおける電源管理/動的再アクティブ化の問題 === |
||
| + | |||
| + | カーネルドライバはロードされたが、ゲームでディスクリートグラフィックカードを利用できない、または使用中に無効化されてしまう問題が発生する場合 ([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 === |
||
| + | |||
| + | システムのジャーナルやカーネルメッセージキーリングに以下の critical レベルのエラーメッセージが出力される場合があります: |
||
| + | |||
| + | kfd: amdgpu: TOPAZ not supported in kfd |
||
| + | |||
| + | [[GPGPU#ROCm|Radeon Open Compute]] を使用するつもりでないならば、これは安全に無視できます。古い GPU であるため、TOPAZ ではサポートされていません。[https://github.com/RadeonOpenCompute/ROCm/issues/1148#issuecomment-747849592] [https://www.reddit.com/r/linuxquestions/comments/yhbbiz/kfd_kfd_amdgpu_topaz_not_supported_in_kfd/] |
||
| + | |||
| + | === MCLK が MAX (1000Mhz) に固定されてアイドル時に高い電力消費、または MIN (96MHz) に固定されてゲームのパフォーマンスが悪化 (カーネル 6.4) === |
||
| + | |||
| + | 高解像度かつ高リフレッシュレートの場合、MCLK (vram / メモリのクロック) が最も高いクロックレート (1000MHz) に固定されてしまい [https://gitlab.freedesktop.org/drm/amd/-/issues/1403] [https://gitlab.freedesktop.org/drm/amd/-/issues/2646]、アイドル時に GPU の電力消費が増加してしまう場合があります。Linux カーネル 6.4.x では、MCLK クロックが最低値 (96MHz) になって、ゲームのパフォーマンスが低下してしまいます [https://gitlab.freedesktop.org/drm/amd/-/issues/2657] [https://gitlab.freedesktop.org/drm/amd/-/issues/2611]。 |
||
| + | |||
| + | これは、モニタが Coordinated Video Timings (CVT) を使用しておらず、影響を受ける解像度とリフレッシュレートに対する V-Blank 値が低いことが原因である可能性があります。回避策は[https://gist.github.com/Rend0e/3bddac4285dc1f4fbe303f326f36f6cc この gist] を見てください。 |
||
| + | |||
| + | === Suspend to RAM に失敗する === |
||
| + | |||
| + | 十分にリフレッシュされない VRAM のデータ消失を防ぐために、{{ic|amdgpu}} カーネルモジュールはシステムが S3 スリープに入るときに VRAM の内容を RAM 内に保存します。 |
||
| + | |||
| + | 大量の VRAM を使用していて RAM に十分な空き容量がない場合、たとえ十分なスワップメモリが存在していたとしても、[https://gitlab.freedesktop.org/drm/amd/-/issues/2125 このプロセスが失敗する可能性があります] (IO サブシステムがすでにサスペンドされているかもしれないため)。 |
||
| + | |||
| + | このとき、以下のようなメッセージが出力されます: |
||
| + | |||
| + | kernel: systemd-sleep: page allocation failure: order:0, mode:0x100c02(GFP_NOIO|__GFP_HIGHMEM|__GFP_HARDWALL), nodemask=(null),cpuset=/,mems_allowed=0 |
||
| + | kernel: Call Trace: |
||
| + | kernel: <TASK> |
||
| + | kernel: dump_stack_lvl+0x47/0x60 |
||
| + | kernel: warn_alloc+0x165/0x1e0 |
||
| + | kernel: __alloc_pages_slowpath.constprop.0+0xd7d/0xde0 |
||
| + | kernel: __alloc_pages+0x32d/0x350 |
||
| + | kernel: ttm_pool_alloc+0x19f/0x600 [ttm 0bd92a9d9dccc3a4f19554535860aaeda76eb4f4] |
||
| + | 回避策としては、システムがサスペンドする前に十分な RAM 領域をスワップアウトして VRAM を格納できるのに十分な空き領域を RAM に確保しておく[https://git.dolansoft.org/lorenz/memreserver ユーザー空間のサービス]を使うというものがります。 |
||
| − | * {{ic|(EE) AMDGPU(0): [DRI2] DRI2SwapBuffers: drawable has no back or front?" error after opening glxgears}} で OpenGL アプリがクラッシュする。 |
||
| − | * {{ic|(EE) AMDGPU(0): Given depth (32) is not supported by amdgpu driver}} エラーで Xorg が起動しない。 |
||
| + | === シャットダウンとサスペンドに失敗する === |
||
| − | ({{ic|/etc/X11/xorg.conf.d/10-screen.conf}} ファイルの) "screen" セクションに以下を追加して標準的な色深度である 24 を使うようにしてください: |
||
| + | カーネルモジュールの ''hid_sensor_*_3d'' グループは、ブート時、シャットダウン時、サスペンド時にシステムがフリーズする問題を引き起こすことがあります。プロセスリストには複数の {{ic|udev-worker}} インスタンスが現れ、システムのスリープ時にフリーズしてしまいます。 |
||
| − | Section "Screen" |
||
| − | Identifier "Screen" |
||
| − | DefaultDepth 24 |
||
| − | SubSection "Display" |
||
| − | Depth 24 |
||
| − | EndSubSection |
||
| − | EndSection |
||
| + | このとき、以下のように出力されます: |
||
| − | === 周波数を上げたときに画面が崩れる問題が起こる === |
||
| + | kernel: PM: suspend entry (deep) |
||
| − | ディスプレイの周波数を 120Hz 以上に設定したときにディスプレイに乱れが発生する場合、メモリクロックや GPU クロックが低すぎてディスプレイに応答できていません。 |
||
| + | 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}} を作成するなどして、問題のあるモジュールをブラックリスト化することです: |
||
| − | 以下を実行することで解決できます [https://bugs.freedesktop.org/show_bug.cgi?id=96868#c13]: |
||
| + | blacklist hid_sensor_accel_3d |
||
| − | # echo high > /sys/class/drm/card0/device/power_dpm_force_performance_level |
||
| + | blacklist hid_sensor_gyro_3d |
||
| + | blacklist hid_sensor_magn_3d |
||
| + | == 参照 == |
||
| − | または: |
||
| + | * [[Gentoo:AMDGPU]] |
||
| − | # echo low > /sys/class/drm/card0/device/power_dpm_force_performance_level |
||
| + | * [https://gitlab.freedesktop.org/drm/amd AMDGPU イシュートラッカー] |
||
| + | {{TranslationStatus|AMDGPU|2025-06-11|838762}} |
||
| − | {{aur|radeon-profile-git}} や {{aur|radeon-profile-daemon-git}} を使うことで GUI で "power_dpm" を管理することもできます [https://github.com/marazmista/radeon-profile]。 |
||
2025年11月30日 (日) 18:15時点における最新版
関連記事
AMDGPU は Graphics Core Next ファミリの AMD Radeon グラフィックカード向けのオープンソースグラフィックドライバです。
目次
- 1 適切なドライバーの選択
- 2 インストール
- 3 ロード
- 4 Xorg の設定
- 5 機能
- 6 トラブルシューティング
- 6.1 モジュールパラメータ
- 6.2 Xorg やアプリケーションが起動しない
- 6.3 スクリーンのアーティファクトと周波数の問題
- 6.4 R9 390 シリーズで悪いパフォーマンス/不安定
- 6.5 "[drm] IP block:gmc_v8_0 is hung!" カーネルエラーでフリーズ
- 6.6 画面が白く/灰色に点滅する
- 6.7 Vega カード上でのゲーム中にシステムのフリーズ/クラッシュ
- 6.8 WebRenderer (Firefox) の破損
- 6.9 4K@60Hz のデバイスが接続されると音声の速度が2倍になる/音が高くなる/無音
- 6.10 ディスクリート amdgpu グラフィックカードにおける電源管理/動的再アクティブ化の問題
- 6.11 ディスプレイが固まる、または応答しなくなる (flip_done timed out)
- 6.12 kfd: amdgpu: TOPAZ not supported in kfd
- 6.13 MCLK が MAX (1000Mhz) に固定されてアイドル時に高い電力消費、または MIN (96MHz) に固定されてゲームのパフォーマンスが悪化 (カーネル 6.4)
- 6.14 Suspend to RAM に失敗する
- 6.15 シャットダウンとサスペンドに失敗する
- 7 参照
適切なドライバーの選択
お持ちのカードに応じて、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 をビルドする場合、これは必要ないはずです。
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 バージョンによって異なります。
どのカーネルカードを使用しているか不確かな場合は、両方のパラメータを使うことができます。
カーネルコマンドラインでモジュールパラメータを設定
次のいずれかのカーネルパラメータを設定してください:
- 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 をブートオプションに追加してください。
正しいモジュール順序を指定
amdgpu が Mkinitcpio#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.conf の HOOKS 配列にあることを確認し、initramfs を再生成してください。
amdgpu ドライバをサポートするカーネルをコンパイル
カーネルをビルド/コンパイルする場合、CONFIG_DRM_AMDGPU_SI=Y と CONFIG_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 カーネルモジュールはシステムの起動時に自動的にロードされることになっています。
ロードされない場合:
- 必要な場合は #Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化していることを確認してください。
- 最新の linux-firmware-amdgpu パッケージがインストールされていることを確認してください。このドライバは、正しくブートするために各モデルの最新のファームウェアを必要とします。
- カーネルパラメータに
nomodesetやvga=を指定していないことを確認してください。amdgpuは KMS を必要とするからです。 - カーネルモジュールのブラックリストで
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 スレーブ出力に対してオンになり、それら以外ではオフになります。true か false を指定することで、常にオンにしたり、常にオフにしたりもできます。
Option "TearFree" "true"
xrandr を使用して TearFree を一時的に有効にすることもできます:
$ xrandr --output output --set TearFree on
output は DisplayPort-0 や HDMI-A-0 のような形式である必要があります。この値は xrandr -q で取得できます。
DRI レベル
DRI は、有効にする DRI の最大レベルを設定します。有効な値は、DRI2 の場合は 2、 DRI3 の場合は 3 です。 Xorg バージョンが 1.18.3 以降の場合、DRI3 のデフォルトは 3 です。それ以外の場合、 DRI2 が使用されます:
Option "DRI" "3"
可変リフレッシュレート
可変リフレッシュレート を参照してください。
10 ビットカラー
新しい 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-F1 と Ctrl-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 の使用率を表示するツール
- nvtop — AMD、Intel、NVIDIA で GPU プロセスをモニタリングします。
- radeontop — 合計のアクティビティ率と個々のブロック両方の GPU 使用率ビュアー。
GUI
- amdgpu_top — AMDGPU の使用率を表示するツール
- AmdGuid — 完全に Rust で書かれた、基本的なファンコントロール GUI。
- Radeon Profile — AMD Radeon カードの現在のクロックを読み込んだり変更したりする Qt5 ツール。
- TuxClocker — Qt5 のモニタリング・オーバークロックツール。
手動
GPU の P-state を確認するには、以下を実行:
$ cat /sys/class/drm/card0/device/pp_od_clk_voltage
GPU をモニタリングするには、以下を実行:
- 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))"
手動
利用可能なオプションに関する詳細は、カーネルドキュメントの 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
アシスト付き
GPU を手動でオーバークロックしたくない場合、AMD GPU のオーバークロックやモニタリングをアシストするいくつかのツールがコミュニティによって提供されています。
CLI ツール
- amdgpu-clocks — AMD GPU のモニタリングやカスタムの P-state を設定するために使用できるスクリプト。起動時に自動的に設定を適用する systemd サービスもあります。
- ruby-amdgpu_fan — amdgpu Linux ドライバと対話するための Ruby で書かれた CLI ツール
GUI ツール
- TuxClocker — Qt5 のモニタリング・オーバークロックツール
- CoreCtrl — アプリケーション毎のプロファイルをサポートする、WattMan ライクな UI の GUI オーバークロックツール。
- LACT — AMD GPU の情報を見るための GTK ツール。power-profiles-daemon と競合します。競合を防ぐには
amdgpu_dpmを後で無効化してください。[1]
- Radeon Profile — AMD Radeon カードの現在のクロックを読み込んだり変更したりする Qt5 ツール。
ブート時のスタートアップ
方法としては、一つは 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_standard、profile_min_sclk、profile_min_mclk、profile_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: - - - - - -
特定の電源プロファイルを使用するには、まず 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-vulkan を enable にしてください。
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=0x10 か amdgpu.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