ATI
この記事では、大抵の AMD(旧 ATI)GPU をサポートする radeon オープンソースドライバについて扱っています。
目次
- 1 正しいドライバーの選択
- 2 インストール
- 3 ロード
- 4 Xorg の設定
- 5 パフォーマンスチューニング
- 6 ハイブリッドグラフィック/AMD Dynamic Switchable Graphics
- 7 省電力機能
- 8 ファンの速度
- 9 TV 出力
- 10 HDMI オーディオ
- 11 マルチモニターの設定
- 12 vsync (垂直同期) をオフにする
- 13 トラブルシューティング
- 13.1 EXA を使用している場合にパフォーマンスが出ない、あるいは乱れが生じる
- 13.2 検知/サポートされない解像度を追加する
- 13.3 TV 画面の回りに黒枠が表示される
- 13.4 黒画面でコンソールが現れないが、KMS で X は動作する
- 13.5 ATI X1600 (RV530 シリーズ) で 3D アプリケーションが黒いウィンドウを表示する
- 13.6 スリープから復帰した後にカーソルがおかしくなる
- 13.7 マルチモニタモードで DisplayPort が出力されない
- 13.8 R9-390 のパフォーマンスが出ない、あるいは不安定
- 13.9 古い Radeon カードの HDMI 接続による QHD/UHD/4K のサポート
- 13.10 390X で 4K DP を使用すると水平方向のちらつきが発生することがある
- 14 参照
正しいドライバーの選択
使用しているカードにあわせて、Xorg#AMD を見て適切なドライバーを選択してください。このページでは ATI ドライバーについて説明します。
よくわからない場合、最初にオープンソースドライバーを試して下さい。それでほとんどの用途に間に合い、問題も少ないはずです。使用している GPU がサポートされているかどうかは feature matrix を参照してください。decoder ring を見ればブランド名 (例: Radeon HD4330) からチップの名前 (例: R700) を割り出すことができます。
インストール
mesa パッケージをインストールしてください。3D アクセラレーションのための DRI ドライバーが含まれています。
- 32ビットのアプリケーションに対応するには、multilib リポジトリ にある lib32-mesa パッケージもインストールしてください。
- DDX ドライバー (Xorg で 2D アクセラレーションを提供します) については、xf86-video-ati パッケージをインストールしてください。
mesa-vdpau と lib32-mesa-vdpau パッケージをインストールすると、動画デコードのアクセラレーションがサポートされます。
ロード
radeon カーネルモジュールはシステムの起動時に自動的に正しく読み込まれるはずです。
うまく行かない場合:
- カーネルパラメータ に
nomodeset
やvga=
を使用していないことを確認してください。radeon は KMS を要求するからです。 - また、カーネルモジュールのブラックリスト化によって radeon を無効化していないことを確認してください。
Early KMS を有効化
Kernel Mode Setting#Early KMS start を見てください。
Xorg の設定
Xorg は自動的にドライバーをロードしてモニターの EDID を使用してネイティブ解像度を設定します。設定が必要になるのはドライバーを調整するときだけです。
手動で設定したい場合 /etc/X11/xorg.conf.d/20-radeon.conf
を作成して以下を記述してください:
Section "Device" Identifier "Radeon" Driver "radeon" EndSection
上記のセクションを使って、ドライバーの設定を調整したり機能を有効化することができます。
パフォーマンスチューニング
ビデオアクセラレーションを有効にする
ハードウェアビデオアクセラレーション#ATI/AMDを見てください。
グラフィカルツール
- WattmanGTK — Python 3 により書かれた GTK3 ユーザインターフェイス。Radeon のパフォーマンス、ファン速度、電源状態の監視や、グラフィックプロセッサのオーバークロックができます。これは AMDGPU カーネルドライバを使用します。
- radeon-profile — Radeon カードの情報を表示する Qt アプリケーション。
- CoreCtrl — 人気な汎用 GPU/CPU コントローラー。高度な使用法については Setup ページを見てください。
ドライバーオプション
以下のオプションは /etc/X11/xorg.conf.d/20-radeon.conf
に追加します。
ドライバーオプションを有効にする前に radeon(4) と RadeonFeature を読んで下さい。
アクセラレーションアーキテクチャ: Glamor は、OpenGL で実装された 2D アクセラレーションメソッドです。R600 (Radeon HD2000 シリーズ) およびそれ以降のグラフィックカードでは、これがデフォルトで使用されます。それより古いカードでは、EXA が使用されます。
Option "AccelMethod" "glamor"
xf86-video-ati 7.8.0 以降、DRI3 はデフォルトで有効になっています。古いカードの場合、デフォルトでは DRI2 が使われます。以下のオプションで DRI3 に切り替えることができます:
Option "DRI" "3"
TearFree はハードウェアのページフリッピング機能を使ってチラツキを抑えます。このオプションを有効にすると "EnablePageFlip" オプションが無効になります:
Option "TearFree" "on"
ColorTiling と ColorTiling2D は安全に有効にすることができ、おそらくデフォルトで有効になっています。タイルモードは 3D アプリケーションのパフォーマンスを劇的に向上する可能性があります。DRM モジュールが古すぎる場合や、現在のディスプレイ構成がこのモードをサポートしていない場合、このモードは無効化されます。KMS ColorTiling2D は、R600 (Radeon HD2000 シリーズ) およびそれ以降のチップでのみサポートされています:
Option "ColorTiling" "on" Option "ColorTiling2D" "on"
アクセラレーションアーキテクチャとして Glamor を使う場合、ShadowPrimary オプションを有効にすることができます。このオプションは、CPU がピクセルデータに高速にアクセスできるようにする "shadow primary" バッファと呼ばれるものと、各ディスプレイコントローラ (CRTC) 用の個別のスキャンアウトバッファを有効化します。これにより、一部の 2D のワークロードが高速化する場合がありますが、他のワークロード (3D やビデオなど) が犠牲になる可能性があります。このオプションを有効にすると "EnablePageFlip" オプションが無効化されることに注意してください:
Option "ShadowPrimary" "on"
EXAVSync オプションは EXA を使用している場合にのみ利用可能です。このオプションは、ディスプレイコントローラが出力先の領域を引き渡すまでエンジンを止めることでティアリングを減らそうとします。パフォーマンスを犠牲にティアリングを減らしますが、チップによっては不安定になることが知られています:
Option "EXAVSync" "yes"
下は設定ファイル /etc/X11/xorg.conf.d/20-radeon.conf
のサンプルです:
Section "Device" Identifier "Radeon" Driver "radeon" Option "AccelMethod" "glamor" Option "DRI" "3" Option "TearFree" "on" Option "ColorTiling" "on" Option "ColorTiling2D" "on" EndSection
カーネルパラメータ
gartsize が自動検知されない場合、radeon.gartsize=32
をカーネルパラメータに追加して手動で定義することができます。
変更は次の起動時に有効になります。
PCIe 2.0 の無効化
カーネル 3.6 から、radeon の PCI Express 2.0 はデフォルトで有効になっています。
マザーボードによっては不安定になることがあり、カーネルコマンドラインに radeon.pcie_gen2=0
を追加することで無効にできます。
詳細は Phoronix の記事 を見て下さい。
Gallium ヘッドアップディスプレイ
radeon ドライバーはゲームなどのアプリケーションの上に透明な文字やテキストを描画できるヘッドアップディスプレイ(HUD)の有効化をサポートしています。現在のフレームレートや CPU の使用率 (各 CPU コアごとの使用率やその平均) などの情報が表示できます。HUD は GALLIUM_HUD 環境変数で制御し、以下のパラメータのリストを指定できます:
- "fps" - 現在のフレームレートを表示
- "cpu" - CPU の平均使用率を表示
- "cpu0" - 1番目の CPU コアの CPU 使用率を表示
- "cpu0+cpu1" - 最初の2つの CPU コアの CPU 使用率を表示
- "draw-calls" - 画面上のオブジェクトのマテリアルの描画回数を表示
- "requested-VRAM" - GPU の VRAM の使用量を表示
- "pixels-rendered" - 描画されたピクセル数を表示
パラメータの完全なリストや GALLIUM_HUD の詳細は glxgears などのシンプルなアプリケーションで "help" パラメータを使うことで確認できます:
# GALLIUM_HUD="help" glxgears
詳しくは メーリングリストの投稿 や ブログの記事 を見て下さい。
ハイブリッドグラフィック/AMD Dynamic Switchable Graphics
電力効率の良い GPU (一般的に Intel 内蔵カード) とパワフルで電力消費が激しい GPU (一般的に Radeon や Nvidia) の、2つの GPU を搭載している最新のノートパソコンで使われている技術です。機能させるには2つの方法があります:
- GPU の負担が重いアプリケーションを使う必要がないときは、ディスクリートカードを無効にすることができます(詳しくは Ubuntu wiki を参照):
# echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
- PRIME を使用することができます。Linux でハイブリッドグラフィックを使うのに適当な方法と言えますが、ユーザーによる手動の操作が必要です。
省電力機能
radeon ドライバでは省電力機能はデフォルトで無効化されており、必要であれば手動で有効にする必要があります。
3つの方法から選ぶことができます:
詳しくは https://www.x.org/wiki/RadeonFeature/#index3h2 を見てください。
動的電源管理
カーネル 3.13 から、DPM (Dynamic power management) は 多くの AMD Radeon ハードウェア においてデフォルトで有効になっています。無効にするには、カーネルパラメータに radeon.dpm=0
を追加してください。
dynpm とは違い、"dpm" は GPU 上のハードウェアを使って動的に GPU の使用率にあわせて周波数と電圧を変化させます。また、クロック・パワーゲーティングも有効になります。
以下の3つの動作モードが存在します:
battery
省電力balanced
デフォルトperformance
ハイパフォーマンス
sysfs を使ってモードを変更することが可能です:
# echo battery > /sys/class/drm/card0/device/power_dpm_state
テストしたりデバッグするために、カードを強制的にパフォーマンスモードで動作させることが可能です:
auto
: デフォルト。全ての電源状態のレベルを使用します。low
: 一番低いパフォーマンスレベルを強制。high
: 一番高いパフォーマンスレベルを強制。
# echo low > /sys/class/drm/card0/device/power_dpm_force_performance_level
コマンドラインツール
- radcard - DPM の電源状態やレベルを取得・設定できるスクリプト。
古い方法
動的周波数切り替え
この方法では GPU の負担にあわせて動的に周波数を変更します。GPU を酷使するアプリを実行したときはパフォーマンスが強化され、GPU がアイドル状態の時は周波数が下げられます。クロック変更は垂直帰線消去時に行われますが、クロック変更関数のタイミングのせいで、常に消去時に完了するわけではなく、ディスプレイにちらつきが生じてしまうこともあります。このため、dynpm はモニタが一つしか無いときに動作します。
次のコマンドを実行することで有効にできます:
# echo dynpm > /sys/class/drm/card0/device/power_method
プロファイルを使用する周波数切り替え
この方法では5つのプロファイル (下を参照) からどれか一つを選択することができます。プロファイルが異なると言っても、どれも、GPU の周波数や電圧の変更を行います。この方法はあまりアグレッシブではない代わりに、安定しておりちらつきも抑えられ、マルチモニタでも動作します。
この方法を有効にするには、次のコマンドを実行:
# echo profile > /sys/class/drm/card0/device/power_method
以下のプロファイルから選んで下さい:
default
はデフォルトの周波数を使用し、電源の状態を変更しません。これはデフォルトの挙動です。auto
はシステムがバッテリー電源で動作しているのかそうでないのかによって電源状態をmid
とhigh
で切り替えます。low
はどんなときでも強制的に gpu の電源状態がlow
になるようにします。low
ではノートパソコンのディスプレイに問題が起こることがあり、そのためauto
ではモニタの電源がオフのときだけlow
を使います。他のプロファイルではモニタの DPMS の状態がオフのときに選択されます。mid
はどんなときでも強制的に gpu の電源状態がmid
になるようにします。high
はどんなときでも強制的に gpu の電源状態がhigh
になるようにします。
例えば、low
プロファイルを有効にするには (必要に応じて low
を上記のプロファイルのどれかと置き換えて下さい):
# echo low > /sys/class/drm/card0/device/power_profile
永続的な設定
上述の設定は永続的なものではりません、コンピューターを再起動すると戻ってしまいます。設定を永続化させるために、udev ルールを使うことができます (#プロファイルを使用する周波数切り替えの例):
/etc/udev/rules.d/30-radeon-pm.rules
KERNEL=="dri/card0", SUBSYSTEM=="drm", DRIVERS=="radeon", ATTR{device/power_method}="profile", ATTR{device/power_profile}="low"
他の例として、動的電源管理 では特定のパフォーマンスレベルを永続的に強制することができます:
/etc/udev/rules.d/30-radeon-pm.rules
KERNEL=="dri/card0", SUBSYSTEM=="drm", DRIVERS=="radeon", ATTR{device/power_dpm_force_performance_level}="high"
KERNEL
の名前を判断するには、以下を実行してください:
$ udevadm info --attribute-walk /sys/class/drm/card0 | grep "KERNEL="
ノート
GPU が動作している速度を見るには、次のコマンドを実行することで以下のような出力が得られます:
# cat /sys/kernel/debug/dri/0/radeon_pm_info
state: PM_STATE_ENABLED default engine clock: 300000 kHz current engine clock: 300720 kHz default memory clock: 200000 kHz
ただし値は使用している GPU や radeon ドライバーのバージョン、カーネルのバージョンなどによって変わります。
温度センサーは外部の i2c チップか内部の温度センサー (rv6xx-evergreen のみ) によって実装されています。i2c チップを使用する asics の温度を取得するには、あなたのボードで使われているセンサーの適切な hwmon ドライバーをロードする必要があります (lm63, lm64 など)。それで drm が適当な hwmon ドライバーをロードします。内部の温度センサーを使用するボードの場合、drm は hwmon インターフェイスを自動的に設定します。適当なドライバーがロードされていれば、lm_sensors ツールや /sys/class/hwmon
の sysfs で温度を調べることができます。
ファンの速度
上記の省電力機能によってファンの速度は上手く制御されるはずですが、一部のカードではアイドル状態でも五月蝿すぎる場合があります。そのような場合、カードがサポートしていれば、手動でファンの速度を変更できます。
GPU ファンを制御するには、ファンスピード制御#AMDGPU の sysfs によるファン制御 を見てください(amdgpu と radeon は同じ制御を行います)。
永続化させるには、#永続的な設定 の例を見てください。
速度を固定したくない場合、温度にあわせてファンの速度を設定するスクリプトを書くなどして手動でファンの速度カーブを定義できます (現在の値は /sys/class/drm/card0/device/hwmon/hwmon0/temp1_input
で確認できます)。
GUI で設定したい場合は radeon-profile-gitAUR をインストールしてください。
TV 出力
まず、S 端子があるかチェックしてください、xrandr
で以下のように表示されるはずです:
Screen 0: minimum 320x200, current 1024x768, maximum 1280x1200 ... S-video disconnected (normal left inverted right x axis y axis)
そして Xorg に接続されていると伝えます:
xrandr --output S-video --set "load detection" 1
tv standard を使うように設定:
xrandr --output S-video --set "tv standard" ntsc
モードを追加 (現在は 800x600 しかサポートされていません):
xrandr --addmode S-video 800x600
モードを複製:
xrandr --output S-video --same-as VGA-0
試行:
xrandr --output S-video --mode 800x600
これで 800x600 のデスクトップがテレビに表示されるはずです。
出力を無効化するには:
xrandr --output S-video --off
KMS で TV 出力を強制する
カーネルは次の形式で video=
パラメータを認識します (詳しくは Kernel Mode Setting を参照):
video=<conn>:<xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
サンプル:
video=DVI-I-1:1280x1024-24@60e
パラメータに空白を含む場合はクォートで囲って下さい:
"video=9-pin DIN-1:1024x768-24@60e"
現在の mkinitcpio の実装では前に #
を必要とします。例えば:
root=/dev/disk/by-uuid/d950a14f-fc0c-451d-b0d4-f95c2adefee3 ro quiet radeon.modeset=1 security=none # video=DVI-I-1:1280x1024-24@60e "video=9-pin DIN-1:1024x768-24@60e"
- GRUB Legacy はコマンドラインをそのまま渡すことができます。
- LILO ではダブルクォートにバックスラッシュが必要です (
# \"video=9-pin DIN-1:1024x768-24@60e\"
を追加してください)。
次のコマンドでビデオ出力の一覧を取得できます:
$ ls -1 /sys/class/drm/ | grep -E '^card[[:digit:]]+-' | cut -d- -f2-
HDMI オーディオ
HDMI オーディオは xf86-video-ati ビデオドライバーでサポートされています。問題を起こすことがあるため、無効にしたい場合、カーネルパラメータに radeon.audio=0
を追加してください。
起動後画面が表示されない場合は、ドライバーオプションを無効にしてください。
マルチモニターの設定
RandR 拡張を使う
RandR を使ってマルチモニターをセットアップする方法はマルチディスプレイ#RandR を見てください。
X スクリーンを独立させる
独立したデュアルスクリーンの設定は通常通りで問題ありません。ただし radeon ドライバーには "ZaphodHeads"
オプションが存在し、デバイスセクションを特定の出力端子に結びつけることができます:
/etc/X11/xorg.conf.d/20-radeon.conf
Section "Device" Identifier "Device0" Driver "radeon" Option "ZaphodHeads" "VGA-0" VendorName "ATI" BusID "PCI:1:0:0" Screen 0 EndSection
ビデオカードに複数の出力端子が3つ以上存在する場合などに役に立ちます。例えば HDMI, DVI, VGA 端子が存在する場合 "ZaphodHeads" "VGA-0"
と明示的に指定しないかぎり、マルチモニター設定では HDMI+DVI 出力だけを選択・使用します。
vsync (垂直同期) をオフにする
radeon ドライバーはデフォルトで垂直同期を有効にします。ベンチマーク以外ではそれで全く問題がありません。垂直同期をオフにするには、vblank_mode=0
環境変数を試してみるか、~/.drirc
を作成して (既に存在する場合は編集して) 以下のセクションを加えて下さい:
~/.drirc
<driconf> <device screen="0" driver="dri2"> <application name="Default"> <option name="vblank_mode" value="0" /> </application> </device> ... </driconf>
vsync が無効にならない場合、/etc/X11/xorg.conf.d/20-radeon.conf
を編集して無効化してください。#ドライバーオプション を見てください。
トラブルシューティング
EXA を使用している場合にパフォーマンスが出ない、あるいは乱れが生じる
ターミナルやウェブブラウザのスクロールが遅いなど、2D のパフォーマンスに問題が起こる場合、デバイスオプションに Option "MigrationHeuristic" "greedy"
を追加することで解決することがあります。
さらに EXAPixmaps を無効果することで乱れがなくなることがあります。ただし、他の問題が引き起こされる可能性があるため一般的には推奨されていません。
/etc/X11/xorg.conf.d/20-radeon.conf
Section "Device" Identifier "Radeon" Driver "radeon" Option "AccelMethod" "exa" Option "MigrationHeuristic" "greedy" #Option "EXAPixmaps" "off" EndSection
検知/サポートされない解像度を追加する
Xrandr#検出されない解像度を追加する を参照してください。
TV 画面の回りに黒枠が表示される
HDMI ポートを使用して TV を接続すると、画面の周りに 2-3cm の枠が表示され画像がぼやけることがあります。これはオーバスキャンを防ぐものですが(Wikipedia:Overscan を参照)、xrandr を使ってオフにすることができます:
xrandr --output HDMI-0 --set underscan off
黒画面でコンソールが現れないが、KMS で X は動作する
一つの PC で複数の ATI カードを使用しているときに、コンソールが表示されないという問題が起こります。Fujitsu Siemens Amilo PA 3553 ノートパソコンなどがこの問題を抱えています。fbcon コンソールドライバーが間違ったフレームバッファデバイスにマッピングしているのが原因です。カーネルブートラインに以下を追加することで修正できます:
fbcon=map:1
これは /dev/fb0
ではなく /dev/fb1
フレームバッファへとマッピングするよう fbcon に指示します。上記の設定で問題が解決しない場合、以下の設定で起動してみてください:
fbcon=map:0
ATI X1600 (RV530 シリーズ) で 3D アプリケーションが黒いウィンドウを表示する
3つの解決方法が考えられます:
pci=nomsi
をブートローダーのカーネルパラメータに追加して見て下さい。- 上のカーネルパラメータが機能しない場合、
pci=nomsi
の代わりにnoapic
を追加してみてください。 - どちらも機能しないときは、
vblank_mode=0 glxgears
かvblank_mode=1 glxgears
を実行してどちらが機能するかを確認し、driconfAUR をインストールして~/.drirc
にオプションを設定してください。
スリープから復帰した後にカーソルがおかしくなる
モニターがスリープから復帰した後にカーソルが縦に重なるなどおかしな表示がされる場合、/etc/X11/xorg.conf.d/20-radeon.conf
設定ファイルの "Device"
セクションで "SWCursor" "True"
を設定してください。
マルチモニタモードで DisplayPort が出力されない
radeon.audio=0
カーネルパラメータを使って起動してみてください。
R9-390 のパフォーマンスが出ない、あるいは不安定
R9-390 シリーズのカードのファームウェアには DPM 関連に問題があり、性能が発揮されなかったりクラッシュすることがあります (ゲームを遊んだり Google マップを使ったりすると発症します)。こちらのバグレポートのコメント 115 にこのバグの修正法があります。
古い Radeon カードの HDMI 接続による QHD/UHD/4K のサポート
古いカードでは HDMI のピクセルクロックが 165MHz に制限されており、QHD や 4K を使うには HDMI ではなくデュアルリンク DVI を使う必要があります。
低いリフレッシュレートのカスタムモード (例: 30Hz) を使うことで HDMI が使える場合があります。
また、ピクセルクロックの制限を取り払うカーネルパッチも存在しますが、カードにダメージを与える可能性があります。
4.8 用のパッチの 公式カーネルバグチケット を参照してください。
パッチを適用すると新しいカーネルパラメータ radeon.hdmimhz
によってピクセルクロックの制限を変えることができるようになります。
また、ハイスピード HDMI ケーブルを使うようにしてください。
390X で 4K DP を使用すると水平方向のちらつきが発生することがある
390X (もしくは似たようなモデル) を使用していて DP から 4K 出力を行っている場合、水平方向のアーティファクト/ちらつきが発生することがあります。約30分おきに水平方向のピクセルの帯(高さは約100ピクセルで幅は画面の幅と同じ)が数秒間上下に揺れるような感じです。これは radeon ドライバのバグかもしれません。AMDGPU を代わりに使うと直るようです。
参照
ベンチマークでは、多くのカードでオープンソースドライバがプロプライエタリドライバと同等のパフォーマンスであるということが示されています。