ATI

出自 Arch Linux 中文维基

本文主要介紹較舊的顯卡使用的開源的 ATI/Radeon 驅動.

選擇正確的驅動[編輯 | 編輯原始碼]

要選擇正確的驅動,請參考Xorg#AMD。本文主要介紹 ATI

如果你不確定該用哪種,請先試一試開源版的。開源驅動能滿足大多數的需要,而且,一般來說遇到的麻煩也更少些。查看現在功能開發進展情況可訪問功能矩陣

這個頁面可以將市場名(例如 Radeon HD4330) 映射到芯片組名(例如 R700).

安裝[編輯 | 編輯原始碼]

安裝軟件包 mesa,它提供 DRI 和 3D 加速。

加速視頻解碼方面,libva-mesa-driverlib32-libva-mesa-driver提供了VA-API, mesa-vdpaulib32-mesa-vdpau 提供 VDPAU。

載入[編輯 | 編輯原始碼]

參考 Kernel mode setting#Early KMS start

radeon模塊應該在啟動時被正常載入.

要是沒有的話...

KMS早啟動[編輯 | 編輯原始碼]

參考 Kernel mode setting#KMS 早啟動

配置[編輯 | 編輯原始碼]

Xorg 會自動裝入驅動並通過 EDID 獲得顯示器分辨率,只有性能優化時才需要額外配置。

如果要手動配置,請添加文件 /etc/X11/xorg.conf.d/20-radeon.conf, 並加入:

Section "OutputClass"
    Identifier "Radeon"
    MatchDriver "radeon"
    Driver "radeon"
EndSection

通過此段可以調整顯卡的設置。

性能調整[編輯 | 編輯原始碼]

啟動視頻加速[編輯 | 編輯原始碼]

參見Hardware video acceleration

圖形工具[編輯 | 編輯原始碼]

  • radeon-profile — 顯示 Radeon 顯卡的 Qt 應用程序。
https://github.com/marazmista/radeon-profile || radeon-profile-gitAUR
  • CoreCtrl — 流行的通用 GPU/CPU 控制器,高級用法請參考 設置 頁面。
https://gitlab.com/corectrl/corectrl || corectrl

驅動配置[編輯 | 編輯原始碼]

下面這些選項屬於/etc/X11/xorg.conf.d/20-radeon.conf.

請在應用驅動選項之前先閱讀 radeon(4)RadeonFeature

Acceleration architecture; Glamor是一種使用OpenGL的 2D加速方式,適用於R300及以上顯卡驅動。 自xf86-video-ati版本1:7.2.0-1後, 在radeonsi(南方群島系列 和 superior GFX 顯卡)上glamor默認啟用; 在其他顯卡默認使用 EXA.

Option "AccelMethod" "glamor"

使用 Glamor 加速方式時可以啟用 ShadowPrimary 選項,它將啟用一個被稱為 "shadow primary" 的緩衝區來供CPU快速存取像素信息,並給每個顯示控制器 (CRTC) 分離出單獨的 scanout 緩衝區。這將提升某些 2D 工作的性能,但可能會降低其他(比如3D)工作的性能。

Option "ShadowPrimary" "on"

ColorTilingColorTiling2D 是絕對安全的,並且默認被啟用. 大多數用戶能注意到性能的提升,但是這個功能R200及更早的顯卡不支持. 早的顯卡雖可以啟用,但是工作負擔轉移到了cpu上

Option "ColorTiling" "on"
Option "ColorTiling2D" "on"

DRI3 默認是啟用的,老卡默認使用 DRI2, 要切換到 DRI3:

Option "DRI" "3"

TearFree 使用硬件的 flipping mechanism 機制來防止撕裂。當前啟用這個選項會禁用 "EnablePageFlip" 選項。

Option "TearFree" "on"

EXAVSync 選項僅在使用 EXA 加速方式時有效,它通過stalling the engine until the display controller has passed the destination region來避免撕裂。這將導致性能下降,並已知在某些芯片上導致不穩定。

Option "EXAVSync" "yes"

下面是一個簡單的 /etc/X11/xorg.conf.d/20-radeon.conf 配置文件示例:

Section "OutputClass"
        Identifier  "Radeon"
        Driver "radeon"
        MatchDriver "radeon"
        Option "AccelMethod" "glamor"
        Option "DRI" "3"
        Option "TearFree" "on"
        Option "ColorTiling" "on"
        Option "ColorTiling2D" "on"
EndSection
提示:driconfAUR 是一個可以修改諸多設置的小工具,如 vsync, anisotropic filtering, texture compression 等。它還有一些程序(比如Goole Earth)需要的"disable Low Impact fallback"功能。

內核參數[編輯 | 編輯原始碼]

提示:你也許想用 systool 來調試新的參數,參見這裡

如果 gartsize 沒有被自動檢測到,請添加 radeon.gartsize=32內核參數來手動定義它。

注意: 對於新的AMD顯卡不再需要設置這個參數:
[drm] Detected VRAM RAM=2048M, BAR=256M
[drm] radeon: 2048M of VRAM memory ready
[drm] radeon: 2048M of GTT memory ready.

重啟後生效。

關閉 PCIE 2.0[編輯 | 編輯原始碼]

從3.6版內核開始,radeon裡PCIE 2.0選項默認啟用。

對一些主板可能不穩定,可以向內核參數添加 radeon.pcie_gen2=0 來關閉。

參考 Phoronix 文章

Gallium HUD[編輯 | 編輯原始碼]

radeon 驅動支持激活一個HUD,來顯示透明的圖像及文字於正在渲染的程序(如遊戲)之上。可以顯示當前幀率,每個CPU核心負載或者CPU負載平均值。這個HUD受 GALLIUM_HUD 環境變量控制,可以添加一些參數如:

  • "fps" - 顯示當前幀率
  • "cpu" - 顯示平均CPU負載
  • "cpu0" - 顯示第一個CPU核心負載
  • "cpu0+cpu1" - 顯示前兩個CPU核心負載
  • "draw-calls" - 顯示一個物體的每個材質被顯示到屏幕上多少次(displays how many times each material in an object is drawn to the screen)
  • "requested-VRAM" - 顯示GPU的VRAM使用量
  • "pixels-rendered" - 顯示正在顯示的像素計數

關於參數的完整列表以及操作GALLIUM_HUD的一些注意事項,你可以添加"help"參數運行一個簡單程序(如glxgears)來查看相應的終端輸出。

# GALLIUM_HUD="help" glxgears

更多信息參見郵件列表頁面這篇博客.

混合交火[編輯 | 編輯原始碼]

這是一項通常在配備了雙顯卡——一塊比較節能(比如Intel的核芯顯卡),另一塊為高性能、高能耗(Radeon或NVIDIA)的筆記本上啟用的特性。有兩種方法可以啟用它:

  • 如果不需要運行很吃GPU的程序,可以禁用獨立顯卡(參見Ubuntu wiki ):
    # echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
  • PRIME是在Linux系統中使用雙顯卡切換的正確方式,但仍然需要用戶進行大量手動設置。

節能[編輯 | 編輯原始碼]

注意: 所有vbios中包含有適當電源狀態表的顯卡芯片(R1xx 及更新的)都支持電源管理。"dpm"僅在 R6xx 以及更新的芯片上被支持。

開源驅動的節電功能默認關閉,需要可手動啟用.

三種方法可供選擇:

  1. dpm(3.13內核後默認啟用)
  2. dynpm
  3. profile

詳見 https://www.x.org/wiki/RadeonFeature/#index3h2 .

動態電源管理[編輯 | 編輯原始碼]

從3.13內核開始,在很多 AMD Radeon 設備上 DPM 默認啟用。如果要禁用可加入參數 radeon.dpm=0內核參數

提示:DPM 可以支持 R6xx,但是在內核裡默認沒有啟用,僅 R7xx 及之後的顯卡才默認啟用. 在內核參數中加入 radeon.dpm=1 可以啟用 dpm.

不像dynpm,「dpm"方式根據GPU負載情況動態調整時鐘頻率和電壓,同時它會啟用頻率和電壓門控.

dpm有3種模式可選:

  • battery 最節能
  • balanced 默認
  • performance 最佳性能

可以通過sysfs來更改dpm的模式,如下:

# echo battery > /sys/class/drm/card0/device/power_dpm_state

你也許想要強制顯卡工作在某一性能等級下:

  • auto 默認; 使用當前dpm模式限定的所有性能等級
  • low 強制在最低性能
  • high 強制在最高性能
# echo low > /sys/class/drm/card0/device/power_dpm_force_performance_level

命令行工具[編輯 | 編輯原始碼]

  • radcard - 一個獲取/調整 DPM 電源狀態與級別的腳本。

老方法[編輯 | 編輯原始碼]

動態頻率調整[編輯 | 編輯原始碼]

此方法根據GPU負載自動改變時鐘頻率,所以GPU忙碌時顯示性能提高,空閒時降低。自動變頻試圖在垂直消隱期間進行,但由於變頻函數可能在周期內無法完成,這種方法可能導致顯示閃爍。因此,動態調整隻能在單顯示器下正常工作。

可以通過以下命令啟用:

# echo dynpm > /sys/class/drm/card0/device/power_method

基於計劃的頻率調整[編輯 | 編輯原始碼]

該方法允許你選擇5種不同的計劃。主要來說,不同的計劃最終都改變GPU時鐘頻率和電壓。這種方式不同於積極方式,但更穩定,少閃屏,而且可用於多顯示器環境

要激活此方法,可運行以下命令:

# echo profile > /sys/class/drm/card0/device/power_method

可選的計劃:

  • default 使用默認時鐘頻率,不改變電源狀態。這是默認啟用的計劃。
  • auto 根據系統是否使用電池,在電源狀態 midhigh 間自動切換
  • low 強制GPU運行於low電源狀態.注意low在某些筆記本上可能導致顯示問題, 如auto 計劃在顯示器關閉時只選中low.(Note that low can cause display problems on some laptops, which is why auto only uses low when monitors are off. ) 在其他計劃中,當顯示器進入節能狀態時,將自動切換為 low 計劃
  • mid 強制GPU運行於mid電源狀態.
  • high 強制GPU運行於high電源狀態.

例如,我們可以激活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"
注意: 如果上述規則失效,你可以試試刪除 dri/ 前輟.

KERNEL=="card0", SUBSYSTEM=="drm", DRIVERS=="radeon", ATTR{device/power_method}="profile",

As another example, dynamic power management can be permanently forced to a certain performance level:

/etc/udev/rules.d/30-radeon-pm.rules
KERNEL=="dri/card0", SUBSYSTEM=="drm", DRIVERS=="radeon", ATTR{device/power_dpm_force_performance_level}="high"

To determine the KERNEL name, execute:

$ 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

It depends on which GPU line yours is, however. Along with the radeon driver versions, kernel versions, etc. So it may not have much/any voltage regulation at all.

Thermal sensors are implemented via external i2c chips or via the internal thermal sensor (rv6xx-evergreen only). To get the temperature on asics that use i2c chips, you need to load the appropriate hwmon driver for the sensor used on your board (lm63, lm64, etc.). The drm will attempt to load the appropriate hwmon driver. On boards that use the internal thermal sensor, the drm will set up the hwmon interface automatically. When the appropriate driver is loaded, the temperatures can be accessed via lm_sensors tools or via sysfs in /sys/class/hwmon.

風扇速度[編輯 | 編輯原始碼]

即使上述省電功能應該能很好調整風扇速度,一些顯卡在空閒狀態時仍然太吵了。這時,如果你的風扇支持的話,你可以嘗試手動改變風扇速度。

注意:
  • 請謹記以下方法會將風扇速度設置為固定值,它不會隨着 gpu 的壓力而調整,所以在高負荷工作時這有可能導致過熱。
  • 設置低於標準的數值時最好檢查你的 gpu 溫度。

要控制風扇速度,請參考 Fan speed control#AMDGPU sysfs fan control (amdgpu 和 radeon 使用相同的控制方式)。

如果要讓此成為永久設置,使用 #永久配置

如果固定值不符合你的期望,還可以自定義為按一個溫度/風扇速度曲線來調整,比如寫一個腳本,來根據當前溫度 (/sys/class/drm/card0/device/hwmon/hwmon0/temp1_input) 設置風扇速度,最好還能設置為溫度變化後延遲調整。這裡有一個圖形界面的工具:radeon-profile-gitAUR

TV輸出[編輯 | 編輯原始碼]

首先,檢查你有S-video輸出: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制式標準

xrandr --output S-video --set "tv standard" ntsc

為它添加一個分辨率(目前只支持800x600)

xrandr --addmode S-video 800x600

複製模式(clone mode)

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"

Current mkinitcpio implementation also requires # in front. For example:

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\")

You can get list of your video outputs with following command:

$ ls -1 /sys/class/drm/ | grep -E '^card[[:digit:]]+-' | cut -d- -f2-

HDMI 音頻輸出[編輯 | 編輯原始碼]

HDMI 音頻輸出在 xf86-video-ati 軟件包中提供支持。要啟禁用,在內核參數中添加 radeon.audio=0

如果啟動後沒有視頻輸出,則請禁用這個參數。

注意:
  • 如果在安裝驅動後 HDMI 音頻沒有工作,請使用這裡提供的方法進行檢測。
  • 如果在 PulseAudio 中聲音出現問題,嘗試設置 tsched=0(參見 PulseAudio/Troubleshooting#Glitches, skips or crackling)並確保 rtkit 守護進程正在運行。
  • 因為 HDA 兼容硬件的相似性,你的聲卡可能使用相同的模塊。請使用推薦的方式改變默認聲卡,比如修改 alsa 配置文件的 defaults 節點。

多顯設置[編輯 | 編輯原始碼]

使用 RandR 擴展[編輯 | 編輯原始碼]

參見 Multihead#RandR

獨立的 X screen[編輯 | 編輯原始碼]

獨立的雙顯示器可以按正常方式配置,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

有些顯卡有多個輸出(HDMI,DVI 和 VGA),而雙屏顯示的時候它只使用 HDMI+DVI,這時你可以通過 "ZaphodHeads" "VGA-0" 來更改輸出。這在使用多輸出顯卡時很方便。

關閉垂直同步刷新[編輯 | 編輯原始碼]

radeon驅動默認啟用垂直同步刷新,除了跑分外各種情況下工作良好。要關閉它,可以設置 vblank_mode=0 環境變量或創建 ~/.drirc (如果已存在請修改),加入以下部分 :

~/.drirc
<driconf>
    <device screen="0" driver="dri2">
        <application name="Default">
            <option name="vblank_mode" value="0" />
        </application>
    </device>
</driconf>

請確保是 dri2 , 而不是你的顯卡型號(如 r600 )。

如果 vsync 還是啟用狀態,可以通過禁用/etc/X11/xorg.conf.d/20-radeon.conf. See #Driver options.

故障排除[編輯 | 編輯原始碼]

使用 EXA 時性能低[編輯 | 編輯原始碼]

注意: 僅適用於使用 EXA 的老顯卡(R600 或更老).新卡應該使用 Glamor 。

如果2D性能(比如在終端或瀏覽器的滾動滑塊)有問題, 你可以將 Option "MigrationHeuristic" "greedy" 添加到你的 xorg.conf 文件的 Device 部分. 禁用 EXAPixmaps 也可能避免一些問題,但是可能帶來別的問題,所以不建議使用。

這是一個樣例 /etc/X11/xorg.conf.d/20-radeon.conf:

Section "OutputClass"
        Identifier  "My Graphics Card"
        MatchDriver "radeon"
        Option "AccelMethod" "exa"
        Option  "MigrationHeuristic"  "greedy"
        #Option "EXAPixmaps" "off"
EndSection

添加沒有被偵測到的分辨率[編輯 | 編輯原始碼]

參見Xrandr的文章.

電視屏幕顯示黑邊[編輯 | 編輯原始碼]

我的Radeon HD 5770用HDMI連接到電視時, 電視顯示圖像模糊,周圍有2-3cm黑邊,用催化劑時不是這樣. 這是對付過掃描(Overscan)的(參見Wikipedia:Overscan),使用xrandr關閉它:

xrandr --output HDMI-0 --set underscan off

KMS啟用時,黑幕,沒有控制台,但是 X 能夠工作[編輯 | 編輯原始碼]

當在同一台PC使用兩張或以上的ATI顯卡時可能會遇到此問題. 例如 Fujitsu Siemens Amilo PA 3553 筆記本就有這個問題. 這是因為fbcon控制台驅動程序將自己映射到錯誤顯卡的錯誤 framebuffer 設備上. 在內核參數添加:

fbcon=map:1

這將告訴fbcon映射自己到 /dev/fb1 而不是 /dev/fb0.如果這並未解決你的問題,嘗試如下配置啟動:

fbcon=map:0

顯示器旋轉對光標起效卻對窗口/內容不起效[編輯 | 編輯原始碼]

啟用EXA代替glamor的新顯卡用戶可能會發現,用xrandr旋轉顯示器將導致光標和顯示器尺寸旋轉了,但窗口與裡面內容卻保持原來方向. 另外移動鼠標時光標按照原來的方向移動.若有此問題,在你的 /var/log/Xorg.0.log 中查找下面這一行:

(EE) RADEON(0): Rotation requires acceleration!

新顯卡上使用EXA時加速將被禁用(來源: 這裡). 你必須從啟用EXA (參見這裡) 和旋轉中二選一.

在ATI X1600 (RV530 series)上3D應用程序顯示黑窗口[編輯 | 編輯原始碼]

這三種方法可能有效:

  • pci=nomsi 添加到你的啟動器的內核參數.
  • 如果沒用的話,試試用noapic代替pci=nomsi.
  • 如果還是沒用,你可以試試vblank_mode=0 glxgears 或者 vblank_mode=1 glxgears,看看哪個對你有用. 然後安裝driconfAUR , 在~/.drirc裡設置此參數.

從休眠中喚醒後光標崩潰[編輯 | 編輯原始碼]

如果顯示器喚醒後光標垂直方向重複刷新,可以在配置文件 20-radeon.conf 中的 "Device" 部分裡設置 "SWCursor" "True"

多顯示器模式下DisplayPort黑屏[編輯 | 編輯原始碼]

嘗試以內核參數 radeon.audio=0 啟動。

R9-390 Poor Performance and/or Instability[編輯 | 編輯原始碼]

Firmware issues with R9-390 series cards include poor performance and crashes (frequently caused by gaming or using Google Maps) possibly related DPM. Comment 115 of this bug report includes instructions for a fix.

QHD / UHD / 4k support over HDMI for older Radeon cards[編輯 | 編輯原始碼]

Older cards have their pixel clock limited to 165MHz for HDMI. Hence, they do not support QHD or 4k only via dual-link DVI but not over HDMI.

One possibility to work around this is to use custom modes with lower refresh rate, e.g. 30Hz.

Another one is a kernel patch removing the pixel clock limit, but this may damage the card!

Official kernel bug ticket with patch for 4.8: https://bugzilla.kernel.org/show_bug.cgi?id=172421

The patch introduces a new kernel parameter radeon.hdmimhz which alters the pixel clock limit.

Be sure to use a high speed HDMI cable for this.

Horizontal flickering occasionally when using 4k DP output on 390X[編輯 | 編輯原始碼]

If you use 390X (or perhaps similar models) and the 4k output from DP, you may experiencing occasional horizontal artifacts / flickering (i.e. every half an hour or so, a horizontal strip of pixels with a height of ~100 pixels across the whole screen's width shaking up and down for a few seconds). This might be a bug of the radeon driver. Changing to AMDGPU seems to fix it.

See also[編輯 | 編輯原始碼]

Benchmark showing the open source driver is on par performance-wise with the proprietary driver for many cards.