AMDGPU
関連記事
AMDGPU は Graphics Core Next ファミリの AMD Radeon グラフィックカード向けのオープンソースグラフィックドライバです。
適切なドライバーの選択
お持ちのカードに応じて、Xorg#AMD で適切なドライバーを見つけてください。今の所、Southern Islands (SI) から Arctic Islands (AI) カード向けの Xorg radeon ドライバサポートがあります。AMD には GCN 以前の GPU をサポートする計画はありません。 サポートされない GPU を持っているユーザはオープンソースの radeon ドライバを使用できます。
インストール
mesa パッケージをインストールしてください。3D アクセラレーションのための DRI ドライバーが含まれています。
- 32ビットアプリケーションのサポートに関しては、multilib リポジトリから lib32-mesa パッケージもインストールしてください。
- (Xorg での 2D アクセラレーションを提供する) DDX ドライバに関しては、xf86-video-amdgpu パッケージをインストールしてください。
- Vulkan のサポートに関しては、vulkan-radeon か amdvlk パッケージをインストールしてください。オプションで、32ビットアプリケーションのサポートのための lib32-vulkan-radeon か lib32-amdvlk パッケージをインストールしてください。wine/proton をつかって DirectX12 のゲームを実行する用途においては、vulkan-radeon を優先してください。amdvlk はその用途においては壊れているからです。
ビデオデコードのハードウェア支援のサポートは、VA-API に関しては libva-mesa-driver と lib32-libva-mesa-driver により提供されており、VDPAU に関しては mesa-vdpau と lib32-mesa-vdpau により提供されています。
実験的
一部のユーザーにとっては、 mesa のアップストリーム実験ビルドを使用して、標準の mesa パッケージに含まれていない AMD Navi の改善などの機能を有効にする価値があるかもしれません。
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) のサポートを有効化
linux パッケージは、Southern Islands(HD 7000 Series、SI、つまり GCN 1)と Sea Islands(HD 8000 Series、CIK、つまり GCN 2)のカードの AMDGPU サポートを有効にします。amdgpu
カーネルドライバは radeon より前にロードされる必要があります。どのカーネルドライバがロードされているかは lspci -k
で確認できます。以下のように出力されるはずです:
$ lspci -k
... 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
正しいモジュール順序を指定
amdgpu
が Mkinitcpio#MODULES 配列の最初のモジュールとして設定されていることを確認してください。
例えば MODULES=(amdgpu radeon)
modprobe.d でモジュールパラメータを設定
/etc/modprobe.d/
に構成 modprobe ファイルを作成します。構文の詳細については、 modprobe.d(5) を参照してください。
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 で設定する必要があります。
起動時の radeon のロードを完全に無効化
カーネルは、関連する特定のグラフィックチップに応じて radeon
を依然としてプローブ・ロードする場合がありますが、amdgpu
が期待通りに動作することを確認した後はこのモージュルをロードする必要はありません。それぞれのステップの間で再起動して、それが機能することを確認した後で次のステップに進んでください:
- カーネルコマンドラインの方法でモジュールパラメータを使い、
amdgpu
が期待通りに機能することを確認する MODULES=(amdgpu)
mkinitcpio の方法使う。ただし、radeon
をその設定に追加しない。- デスクトップにログインしたあとで、
modprobe -r radeon
が、対応するカーネルモジュールをきれいに削除することをテストする radeon
モジュールをブラックリスト化して、第2ステージの起動中にモジュールがカーネルによってプローブされないようにする:
/etc/modprobe.d/radeon.conf
blacklist radeon
これで、lsmod
と dmesg
は amdgpu ドライバのみがロードされていると出力するようになり、radeon が存在しないはずです。/sys/modules/radeon
ディレクトリも存在しないはずです。
ACO コンパイラ
ACO コンパイラはオープンソースのシェーダコンパイラで、LLVM コンパイラ や AMDVLK ドライバ、Windows 10 に直接対抗するために Valve Corporation によって作成・開発されました。LLVM と AMDVLK よりも短いコンパイル時間と、ゲーム中のより良いパフォーマンスを提供します。
いくつかのベンチマークは It's FOSS や Phoronix (1) (2) (3) で見られます。
mesa バージョン 20.2 より、ACO コンパイラはデフォルトで有効になっています。
ロード
amdgpu
カーネルモジュールはシステムの起動時に自動的にロードされます。
ロードされない場合:
- 必要な場合は #Southern Islands (SI) と Sea Islands (CIK) のサポートを有効化していることを確認してください。
- 最新の linux-firmware パッケージがインストールされていることを確認してください。AMDGPU ドライバーは各モデルの最新ファームウェアがないと起動できません。
- カーネルパラメータに
nomodeset
やvga=
を指定していないことを確認してください。amdgpu
は KMS を必要とします。 - カーネルモジュールのブラックリストで
amdgpu
が無効になっていないか確認してください。
読み込むことはできるが、X サーバが必要とする時よりも後になってしまう場合:
- Kernel Mode Setting#Early KMS start を見てください。
Xorg の設定
Xorg は自動的にドライバーをロードしてモニターの EDID を認識して最大解像度を設定します。必要な設定はドライバーのチューニングだけです。
手動で設定したい場合、/etc/X11/xorg.conf.d/20-amdgpu.conf
を作成して、以下を記述してください:
/etc/X11/xorg.conf.d/20-amdgpu.conf
Section "Device" Identifier "AMD" Driver "amdgpu" EndSection
このセクションを使って、ドライバーの設定を変更したり機能を有効にすることができます。ドライバオプションを設定する前に、まず amdgpu(4) を見てください。
TearFree レンダリング
TearFree は、ハードウェアのページめくりメカニズムを使用して、ティアリングを制御します。 このオプションが設定されている場合、プロパティのデフォルト値はそれに応じて オン または オフ になります。 このオプションが設定されていない場合、プロパティのデフォルト値は auto です。これは、回転出力、 RandR 変換が適用された出力、および RandR 1.4スレーブ出力の場合は TearFree がオンになり、それ以外の場合はオフになります。
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-bit カラー
新しい 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 -- -depth30
を使用します。 永続的に有効にするには、以下を作成または追加します:
/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 "Device" Identifier "AMD" Driver "amdgpu" Option "EnablePageFlip" "off" Option "TearFree" "false" EndSection
連天使を更に減らしたい場合は en:Gaming#Reducing DRI latency を見てください。
機能
ビデオアクセラレーション
ハードウェアビデオアクセラレーション を見てください。
モニタリング
GPU の温度や P-state を確認したい場合に GPU のモニタリングはしばしば行われます。
CLI(デフォルト)
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
radeontop ユーティリティを使えば、全体のアクティビティと個々のブロックの両方でGPU の使用率を表示できます。radeontop パッケージでインストールできます。ユーティリティが GPU を認識しない場合、radeontop-gitAUR を試してください。
GUI
- WattmanGTK — GPU の温度 P-state をモニタリングする GTK GUI ツール。
- TuxClocker — Qt5 のモニタリング・オーバークロックツール。
- AmdGuid — 完全に Rust で書かれた、基本的なファンコントロール GUI。
オーバークロック
Since Linux 4.17, it is possible to adjust clocks and voltages of the graphics card via /sys/class/drm/card0/device/pp_od_clk_voltage
.
ブートパラメータ
It is required to unlock access to adjust clocks and voltages in sysfs by appending the Kernel parameter amdgpu.ppfeaturemask=0xffffffff
.
手動(デフォルト)
To set the GPU clock for the maximum P-state 7 on e.g. a Polaris GPU to 1209MHz and 900mV voltage, run:
# echo "s 7 1209 900" > /sys/class/drm/card0/device/pp_od_clk_voltage
The same procedure can be applied to the VRAM, e.g. maximum P-state 2 on Polaris 5xx series cards:
# echo "m 2 1850 850" > /sys/class/drm/card0/device/pp_od_clk_voltage
To apply, run
# echo "c" > /sys/class/drm/card0/device/pp_od_clk_voltage
To check if it worked out, read out clocks and voltage under 3D load:
# watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info
You can reset to the default values using this:
# echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage
It is also possible to forbid the driver so switch to certain P-states, e.g. to workaround problems with deep powersaving P-states like flickering artifacts or stutter. To force the highest VRAM P-state on a Polaris RX 5xx card, while still allowing the GPU itself to run with lower clocks, run:
# echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level # echo "2" > /sys/class/drm/card0/device/pp_dpm_mclk
Allow only the three highest GPU P-states:
# echo "5 6 7" > /sys/class/drm/card0/device/pp_dpm_sclk
To set the allowed maximum power consumption of the GPU to e.g. 50 Watts, run
# echo 50000000 > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap
Until Linux kernel 4.20, it will only be possible to decrease the value, not increase.
アシスト付き
If you are not inclined to fully manually overclock your GPU, there are some overclocking tools that are offered by the community to assist you to overclock and monitor your AMD GPU.
CLI ツール
- amdgpu-clocks — A script that can be used to monitor and set custom power states for AMD GPUs. It also offers a Systemd service to apply the settings automatically upon boot.
GUI ツール
- TuxClocker — A Qt5 monitoring and overclocking tool.
- CoreCtrl — A GUI overclocking tool with a WattMan-like UI that supports per-application profiles.
ブート時のスタートアップ
If you want your settings to apply automatically upon boot, consider looking at this Reddit thread to configure and apply your settings on boot.
電源プロファイル
AMDGPU offers several optimizations via power profiles, one of the most commonly used is the compute mode for OpenCL intensive applications. Available power profiles can be listed with:
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: - - - - - -
To use a specific power profile you should first enable manual control over them with:
# echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level
Then to select a power profile by writing the NUM field associated with it, e.g. to enable COMPUTE run:
# echo "5" > /sys/class/drm/card0/device/pp_power_profile_mode
GPU ディスプレイスケーリングを有効化
To avoid the usage of the scaler which is built in the display, and use the GPU own scaler instead, when not using the native resolution of the monitor, execute:
$ xrandr --output output --set "scaling mode" scaling_mode
Possible values for "scaling mode"
are: None
, Full
, Center
, Full aspect
.
- To show the available outputs and settings, execute:
$ xrandr --prop
- To set
scaling mode = Full aspect
for just every available output, execute:
$ for output in $(xrandr --prop | grep -E -o -i "^[A-Z\-]+-[0-9]+"); do xrandr --output "$output" --set "scaling mode" "Full aspect"; done
トラブルシューティング
HDMI/DP の音声が出力されない
オープンソースの AMDGPU ドライバーはカーネル 4.15 でマージされた DC (旧 DAL) のコードを使用します [1]。カーネル 4.15 が公式リポジトリから使用できるようになるまでは、HDMI や DisplayPort の音声サポートは利用できません。HDMI や DisplayPort から音声出力を使用するには AMDGPU PRO ドライバーを使用するか linux-amd-staging-drm-next-gitAUR (または linux-amd-*) カーネルを使用する必要があります。
HDMI で表示位置がおかしい
amdgpu.audio=0
カーネルパラメータを使うことで (問題のある) HDMI の音声サポートを有効にしないようにできます [2]。
Xorg やアプリケーションが起動しない
Xorg の色深度を 16 や 32 に設定すると以下のような問題が発生します:
(EE) AMDGPU(0): [DRI2] DRI2SwapBuffers: drawable has no back or front?" error after opening glxgears
で OpenGL アプリがクラッシュする。(EE) AMDGPU(0): Given depth (32) is not supported by amdgpu driver
エラーで Xorg が起動しない。
(/etc/X11/xorg.conf.d/10-screen.conf
ファイルの) "screen" セクションに以下を追加して標準的な色深度である 24 を使うようにしてください:
Section "Screen" Identifier "Screen" DefaultDepth 24 SubSection "Display" Depth 24 EndSubSection EndSection
周波数を上げたときに画面が崩れる問題が起こる
ディスプレイの周波数を 120Hz 以上に設定したときにディスプレイに乱れが発生する場合、メモリクロックや GPU クロックが低すぎてディスプレイに応答できていません。
以下を実行することで解決できます [3]:
# echo high > /sys/class/drm/card0/device/power_dpm_force_performance_level
または:
# echo low > /sys/class/drm/card0/device/power_dpm_force_performance_level
radeon-profile-gitAUR や radeon-profile-daemon-gitAUR を使うことで GUI で "power_dpm" を管理することもできます [4]。