ATI - Arch Linux 中文维基

跳至內容

# ATI

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 ATI，最近一次同步於 2023-01-19，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- AMDGPU
- Vulkan
- Xorg

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

## 選擇正確的驅動

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

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

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

## 安裝

安裝軟體包 mesa包，它提供 DRI 和 3D 加速。

- 若需要x86_64下的32位支持,可以從 multilib 安裝 lib32-mesa包.
- 要使用 Xorg 2D 加速 DDX 驅動，請安裝軟體包 xf86-video-ati包.

加速視頻解碼方面，libva-mesa-driver包 和 lib32-libva-mesa-driver包提供了VA-API, mesa-vdpau包 和 lib32-mesa-vdpau包 提供 VDPAU。

## 載入

參考 Kernel mode setting#Early KMS start。

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

要是沒有的話...

- 確保內核參數中沒有 `nomodeset` 或 `vga=`,因為現在 radeon 需要內核級顯示模式設置。
- 另外，確保 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"

ColorTiling 和 ColorTiling2D 是絕對安全的,並且默認被啟用. 大多數用戶能注意到性能的提升,但是這個功能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` 根據系統是否使用電池，在電源狀態 `mid` 和 `high` 間自動切換
- `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.

分類：​

- 圖形
- X 伺服器

ATI
新增話題