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 のサポート
ドライバーの選択
使用しているカードにあわせて、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
上記のセクションを使って、ドライバーの設定を調整したり機能を有効化することができます。
パフォーマンスチューニング
ビデオアクセラレーションを有効にする
ハードウェアビデオアクセラレーションを見てください。
ドライバーオプション
以下のオプションは /etc/X11/xorg.conf.d/20-radeon.conf
に追加します。
ドライバーオプションを有効にする前に radeon(4) と RadeonFeature を読んで下さい。
ColorTiling と ColorTiling2D は安全に有効にすることができ、おそらくデフォルトで有効になっています。ほとんどの場合パフォーマンスが向上しますが、R200 以前のカードではサポートされていません。昔のカードでも有効にすることはできますが、処理は CPU に転嫁されます。KMS の ColorTiling2D は R600 (Radeon HD2000 シリーズ) 以降のチップでのみサポートされています:
Option "ColorTiling" "on" Option "ColorTiling2D" "on"
xf86-video-ati 7.8.0 から DRI3 はデフォルトで有効になります [1]。古いカードの場合、デフォルトでは DRI2 が使われます。以下のオプションで DRI3 に切り替えることができます:
Option "DRI" "3"
TearFree はハードウェアのページフリッピング機能を使ってチラツキを抑えます。このオプションを有効にすると "EnablePageFlip" オプションが無効になります:
Option "TearFree" "on"
アクセラレーションアーキテクチャ: Glamor は OpenGL を使用する 2D アクセラレーションメソッドです。R300 以降の新しいドライバーを使用するグラフィックカードで動作します。R600 (Radeon HD2000 シリーズ) 以上のグラフィックカードでは自動的に有効になります [2]。他のグラフィックカードでも設定ファイルに以下を追加することで強制的に使用することができます:
Option "AccelMethod" "glamor"
アクセラレーションアーキテクチャとして Glamor を使う場合、ShadowPrimary オプションを有効にすることができます。2D の性能が向上しますが、他の性能 (3D や動画) は落ちる可能性があります。このオプションを有効にすると "EnablePageFlip" オプションが無効になります:
Option "ShadowPrimary" "on"
EXAVSync オプションはディスプレイコントローラが出力先の領域を引き渡すまでエンジンを止めることでティアリングを減らそうとします。パフォーマンスを犠牲にティアリングを減らしますが、チップによっては不安定になることが知られています。3D アクセラレーションが効いたデスクトップで、ビデオの Xv オーバーレイを有効にしたときに有用です。KMS (つまり DRI2 アクセラレーション) が有効になっている時は必要ありません:
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
をカーネルパラメータに追加して手動で定義することができます。メガバイトでサイズを指定します。32 は RV280 カードのものです。
もしくは、/etc/modprobe.d/radeon.conf
の modprobe オプションを使っても設定できます:
options radeon gartsize=32
詳細や他のオプションについては、radeon の man ページやモジュールの info ページを読んで下さい: man radeon
, modinfo radeon
。
PCI-E 2.0 の無効化
カーネル 3.6 から、radeon の PCI-E v2.0 はデフォルトで有効になっています。
マザーボードによっては不安定になることがあり、カーネルコマンドラインに radeon.pcie_gen2=0
を追加することで無効にできます。
詳細は Phoronix の記事 を見て下さい。
Gallium ヘッドアップディスプレイ
radeonsi ドライバーはゲームなどのアプリケーションの上に透明な文字やテキストを描画できるヘッドアップディスプレイの有効化をサポートしています。現在のフレームレートや 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 を搭載している最新のノートパソコンで使われている技術です。機能させるには3つの方法があります:
- GPU の負担が重いアプリケーションを使う必要がないときは、ディスクリートカードを無効にすることができます:
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
。vgaswitcheroo を使えばもっと多くのことが出来ますが (詳しくは Ubuntu wiki を参照) どうやっても1つのカードは1つのグラフィックセッションに拘束されるので、1つのグラフィックセッションで両方のカードを使うことはできません。 - PRIME を使用することができます。Linux でハイブリッドグラフィックを使うのに適当な方法と言えますが、ユーザーによる手動の操作が必要です。
- radeon で bumblebee も使えます。AUR に bumblebee-amd-gitAUR[リンク切れ: アーカイブ: aur-mirror] パッケージが存在します。
省電力機能
電力管理は vbios に適切な電源状態テーブルがある全てのチップ (R1xx 以降) でサポートされています。DPM は R6xx 以降のチップでサポートされています。
詳しくは 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 の電源状態やレベルを取得・設定できるスクリプト。
古い方法
radeon ドライバーには手動で省電力機能を使う方法が存在します。以下の3つの方法から選ぶことができます:
動的周波数切り替え
この方法では 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
永続的な設定
上述の設定は永続的なものではりません、コンピューターを再起動すると戻ってしまいます。設定を永続化させるために、systemd-tmpfiles を使うことができます (#動的周波数切り替えの例):
/etc/tmpfiles.d/radeon-pm.conf
w /sys/class/drm/card0/device/power_method - - - - dynpm
もしくは 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"
グラフィカルツール
- Radeon-tray — システムトレイアイコンから Radeon カードの電源プロファイルを操作する小さなプログラム。PyQt4 で書かれており Gnome 以外のユーザーに適しています。
- https://github.com/StuntsPT/Radeon-tray || radeon-trayAUR[リンク切れ: パッケージが存在しません]
ノート
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 が複数刺さっている場合、1番目の GPU の手動設定が有効になります):
# echo 1 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1_enable
ファンの速度は 0 から 255 までの値を設定でき、最大速度の 0% から 100% に対応します (以下のコマンドは 20% に設定します):
# echo 55 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1
永続的に設定したい場合、上の電源プロファイルの例にある systemd-tmpfiles を使ってください。systemd-tmpfiles のノートに書かれている理由によって機能しない場合、udev ルールを使うことでカードが有効になったときにコマンドを実行することができます。/etc/udev/rules.d/99-gpupower
の例:
KERNEL=="card0", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="$HOME/.Xauthority", RUN+="/sbin/sh /etc/conf.d/gpupower"
実行するスクリプト /etc/conf.d/gpupower
は以下のようになります:
echo battery > /sys/class/drm/card0/device/power_dpm_state echo low > /sys/class/drm/card0/device/power_dpm_force_performance_level echo 1 > /sys/class/drm/card0/device/hwmon/hwmon2/pwm1_enable echo 55 > /sys/class/drm/card0/device/hwmon/hwmon2/pwm1
速度を固定したくない場合、温度にあわせてファンの速度を設定するスクリプトを書くなどして手動でファンの速度カーブを定義できます (現在の値は /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=
パラメータを認識します (詳しくは KMS を参照):
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 ドライバーはデフォルトで垂直同期を有効にします。ベンチマーク以外ではそれで全く問題がありません。垂直同期をオフにするには、~/.drirc
を作成して (既に存在する場合は編集して) 以下のセクションを加えて下さい:
~/.drirc
<driconf> <device screen="0" driver="dri2"> <application name="Default"> <option name="vblank_mode" value="0" /> </application> </device> <!-- Other devices ... --> </driconf>
driver は dri2 です。ビデオカードのコード (r600 など) ではありません。
トラブルシューティング
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
検知されない解像度を追加する
DisplayPort 接続などで EDID が認識されないことがあります。
この問題については Xrandr#検出されない解像度を追加するを参照してください。
TV 画面の回りに黒枠が表示される
xrandr を使うことでオーバースキャンの保護をオフにできます:
xrandr --output HDMI-0 --set underscan off
黒画面でコンソールが現れないが、KMS で X は動作する
一つの PC で複数の ATI カードを使用しているときに、コンソールが表示されないという問題が起こります。Fujitsu Siemens Amilo PA 3553 ノートパソコンなどがこの問題を抱えています。fbcon コンソールドライバーが間違ったフレームバッファデバイスにマッピングしているのが原因です。カーネルブートラインに以下を追加することで修正できます:
fbcon=map:1
上記の設定で問題が解決しない場合、以下の設定で起動してみてください:
fbcon=map:0
ATI X1600 (RV530 シリーズ) で 3D アプリケーションが黒いウィンドウを表示する
3つの解決方法が考えられます:
pci=nomsi
をブートローダーのカーネルパラメータに追加して見て下さい。- 上のカーネルパラメータが機能しない場合、
pci=nomsi
の代わりにnoapic
を追加してみてください。 - どちらも機能しないときは、
vblank_mode=0 glxgears
とvblank_mode=1 glxgears
を実行してどちらが機能するかを確認し、driconfAUR をインストールして~/.drirc
にオプションを設定してください。
スリープから復帰した後にカーソルがおかしくなる
モニターがスリープから復帰した後にカーソルが縦に重なるなどおかしな表示がされる場合、20-radeon.conf
設定ファイルの "Device"
セクションで "SWCursor" "True"
を設定してください。
マルチモニタモードで DisplayPort が出力されない
radeon.audio=0
カーネルパラメータを使って起動してみてください。
R9-390 のパフォーマンスが出ない、あるいは不安定
R9-390 シリーズのカードのファームウェアには DPM 関連に問題があり、性能が発揮されなかったりクラッシュすることがあります (ゲームを遊んだり Google マップを使ったりすると発症します)。解決方法は こちらの報告 を見てください。
古い Radeon カードの HDMI 接続による QHD/UHD/4K のサポート
古いカードでは HDMI のピクセルクロックが 165MHz に制限されており、QHD や 4K を使うには HDMI ではなくデュアルリンク DVI を使う必要があります。
低いリフレッシュレートのカスタムモード (例: 30Hz) を使うことで HDMI が使える場合があります。
また、ピクセルクロックの制限を取り払うカーネルパッチも存在しますが、カードにダメージを与える可能性があります。4.8 用のパッチの 公式カーネルバグチケット を参照してください。パッチを適用すると新しいカーネルパラメータ radeon.hdmimhz
によってピクセルクロックの制限を変えることができるようになります。
また、ハイスピード HDMI ケーブルを使うようにしてください。