ATI

出自 ArchWiki

本文介绍了支持较旧 AMD (以前称为 ATI) GPU 的 radeon 开源驱动。

选择正确的驱动

根据您拥有的显卡,在Xorg#AMD 中找到正确的驱动。此页面包含 ATI 的说明。

如果不确定,请首先尝试 AMDGPU 驱动,它将满足 2015 年之后发布的大多数显卡的需求。请参阅 功能矩阵 以了解此驱动支持的功能,并参阅 解码表 以将市场名称 (例如 Radeon HD4330) 转换为芯片名称 (例如 R700)。

安装

安装 mesa 软件包,它提供用于 3D 加速的 DRI 驱动和用于硬件视频解码加速的 VA-API/VDPAU 驱动。或者对于非常旧的 GPU (R200 及更早版本),安装 mesa-amber

加载

radeon 内核模块应该在系统启动时自动加载。

如果它没有发生,那么

Xorg 配置

Xorg 将自动加载驱动程序,并将使用您显示器的 EDID 来设置原生分辨率。配置仅在需要调整驱动程序时才需要。

如果您想要手动配置,请创建 /etc/X11/xorg.conf.d/20-radeon.conf,并添加以下内容

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

使用此部分,您可以启用功能并调整驱动程序设置。

性能调优

启用视频加速

请参阅 Hardware video acceleration#AMD/ATI

图形工具

  • radeon-profile — 用于显示 Radeon 显卡信息的 Qt 应用程序。
https://github.com/marazmista/radeon-profile || radeon-profile-gitAUR
  • CoreCtrl — 流行的通用 GPU/CPU 控制器。有关高级用法,请参阅他们的 Setup 页面。
https://gitlab.com/corectrl/corectrl || corectrl

驱动选项

以下选项适用于 /etc/X11/xorg.conf.d/20-radeon.conf

在应用驱动选项之前,请先阅读 radeon(4)RadeonFeature

加速架构;Glamor 可用作通过 OpenGL 实现的 2D 加速方法,并且对于 R600 (Radeon HD2000 系列) 和更新的显卡,它是默认的。较旧的显卡使用 EXA。

Option "AccelMethod" "glamor"

DRI3 默认启用 自 xf86-video-ati 7.8.0 起

TearFree 是一种撕裂预防选项,它通过使用硬件页面翻转机制来防止撕裂

Option "TearFree" "on"

ColorTilingColorTiling2D 应该默认启用。平铺模式可以为 3D 应用程序提供显着的性能优势。如果 DRM 模块太旧或当前显示配置不支持它,则禁用它。KMS ColorTiling2D 仅在 R600 (Radeon HD2000 系列) 和更新的芯片上受支持

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

当使用 Glamor 作为加速架构时,可以启用 ShadowPrimary 选项,该选项为快速 CPU 访问像素数据启用所谓的“阴影主”缓冲区,并为每个显示控制器 (CRTC) 分配单独的扫描输出缓冲区。这可能会提高某些 2D 工作负载的性能,但可能会以其他工作负载 (例如 3D、视频) 为代价。请注意,启用此选项当前会禁用 Option "EnablePageFlip"

Option "ShadowPrimary" "on"

EXAVSync 仅在使用 EXA 时可用,并且可以启用以通过延迟引擎直到显示控制器已通过目标区域来避免撕裂。它以性能为代价减少撕裂,并且已知在某些芯片上引起不稳定

Option "EXAVSync" "yes"

以下是 /etc/X11/xorg.conf.d/20-radeon.conf 的示例配置文件

Section "OutputClass"
  Identifier "Radeon"
  MatchDriver "radeon"
  Driver "radeon"
  Option "AccelMethod" "glamor"
  Option "DRI" "3"
  Option "TearFree" "on"
  Option "ColorTiling" "on"
  Option "ColorTiling2D" "on"
EndSection

内核参数

提示: 您可能想要使用 systool 调试新参数,如 内核模块#获取信息 中所述。

如果未自动检测到,则可以通过添加 radeon.gartsize=32 作为内核参数来定义 gartsize

注意: 对于现代 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 中的 PCI Express 2.0 默认开启。

在某些主板上可能不稳定。可以通过添加 radeon.pcie_gen2=0 作为内核参数来禁用它。

有关更多信息,请参阅 Phoronix 文章

Gallium Heads-Up 显示

radeon 驱动程序支持激活抬头显示器 (HUD),它可以在渲染的应用程序 (例如游戏) 之上绘制透明图形和文本。这些可以显示诸如当前帧速率或每个 CPU 核心或所有核心平均值的 CPU 负载等值。HUD 由 GALLIUM_HUD 环境变量控制,并且可以传递以下参数列表以及其他参数

  • "fps" - 显示当前每秒帧数
  • "cpu" - 显示平均 CPU 负载
  • "cpu0" - 显示第一个 CPU 核心的 CPU 负载
  • "cpu0+cpu1" - 显示前两个 CPU 核心的 CPU 负载
  • "draw-calls" - 显示对象中每个材质被绘制到屏幕的次数
  • "requested-VRAM" - 显示 GPU 上正在使用的 VRAM 量
  • "pixels-rendered" - 显示正在显示的像素数

要查看完整参数列表以及有关操作 GALLIUM_HUD 的一些注意事项,您还可以将 "help" 参数传递给一个简单的应用程序 (例如 glxgears) 并查看相应的终端输出

# GALLIUM_HUD="help" glxgears

更多信息可以从这个 邮件列表帖子这篇博客文章 中找到。

混合显卡/AMD 动态可切换显卡

它是最近配备两个 GPU 的笔记本电脑上使用的技术,一个节能 (通常是 Intel 集成显卡),另一个更强大且更耗电 (通常是 Radeon 或 Nvidia)。有两种方法可以让它工作

  • 如果不需要运行“GPU 密集型”应用程序,则可以禁用独立显卡 (请参阅 Ubuntu wiki)
    # echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
  • PRIME:是在 Linux 上使用混合显卡的正确方法,但仍然需要用户进行一些手动干预。

节能

注意: 所有包含 vbios 中适当电源状态表的芯片 (R1xx 及更新版本) 都支持电源管理。“dpm” 仅在 R6xx 及更新的芯片上受支持。

使用 radeon 驱动程序时,默认情况下禁用节能,如果需要,必须手动启用。

您可以在三种不同的方法之间进行选择

  1. dpm (自内核 3.13 起默认启用)
  2. dynpm
  3. profile

有关更多详细信息,请参阅 https://www.x.org/wiki/RadeonFeature/#index3h2

动态电源管理

自内核 3.13 起,DPM 默认对许多 AMD Radeon 硬件启用。如果您想禁用它,请将参数 radeon.dpm=0 添加到内核参数中。

提示: DPM 在 R6xx gpu 上工作,但在内核中默认不启用(仅 R7xx 及更高版本)。设置 radeon.dpm=1 内核参数将启用 dpm。

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 空闲时性能会降低。重新计时尝试在垂直消隐期间进行,但由于重新计时功能的时序,并不总是能在消隐期间完成,这可能会导致显示闪烁。因此,动态电源管理仅在单个显示器处于活动状态时才有效。

可以通过简单地运行以下命令来激活它

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

基于配置文件的频率切换

此方法允许您选择五个配置文件之一(如下所述)。在大多数情况下,不同的配置文件最终会更改 GPU 的频率/电压。此方法不如动态频率切换激进,但更稳定且无闪烁,并且适用于多个活动显示器。

要激活此方法,请运行以下命令

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

选择一个可用的配置文件

  • default 使用默认时钟,并且不更改电源状态。这是默认行为。
  • automidhigh 电源状态之间选择,具体取决于系统是否使用电池供电。
  • 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"

其他注意事项

要查看 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 芯片的 asic 上获取温度,您需要为板上使用的传感器加载相应的 hwmon 驱动程序(lm63、lm64 等)。drm 将尝试加载相应的 hwmon 驱动程序。在使用内部热传感器的板上,drm 将自动设置 hwmon 接口。当加载相应的驱动程序后,可以通过 lm_sensors 工具或通过 sysfs 在 /sys/class/hwmon 中访问温度。

风扇速度

虽然上述节能功能应该可以很好地处理风扇速度,但某些显卡在空闲状态下可能仍然太吵。在这种情况下,并且当您的显卡支持时,您可以手动更改风扇速度。

警告
  • 请记住,以下方法将风扇速度设置为固定值,因此它不会随着 GPU 的压力而调整,这可能会导致在高负载下过热。
  • 应用低于标准值时,请检查 GPU 温度。

要控制 GPU 风扇,请参阅 风扇速度控制#AMDGPU sysfs 风扇控制(amdgpu 和 radeon 在这方面使用相同的控件)。

有关持久性配置,请参阅 #持久配置 中的示例。

如果不需要固定值,则可以手动定义自定义风扇曲线,例如,编写一个脚本,其中风扇速度根据当前温度(/sys/class/drm/card0/device/hwmon/hwmon0/temp1_input 中的当前值)进行设置。

通过安装 radeon-profile-gitAUR,可以使用 GUI 解决方案。

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

设置要使用的电视标准

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"

您可以使用以下命令获取视频输出列表

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

HDMI 音频

xf86-video-ati 视频驱动程序中支持 HDMI 音频。要禁用 HDMI 音频,请将 radeon.audio=0 添加到您的 内核参数

如果在启动后没有视频,则必须禁用驱动程序选项。

注意

多显示器设置

使用 RandR 扩展

请参阅 Multihead#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

当使用具有两个以上输出的显卡时,这可能是一个救星。例如,一个 HDMI 输出、一个 DVI、一个 VGA,除非您明确指定 "ZaphodHeads" "VGA-0",否则双头设置只会选择和使用 HDMI+DVI 输出。

关闭垂直同步

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)。

如果垂直同步仍然启用,您可以通过编辑 /etc/X11/xorg.conf.d/20-radeon.conf 来禁用它。请参阅 #驱动程序选项

故障排除

使用 EXA 时的性能和/或伪影问题

注意: 这仅适用于早于 R600 的显卡(Radeon X1000 系列及更早版本)。较新的显卡您应该使用 Glamor 而不是 EXA。

如果遇到 2D 性能问题,例如终端或网页浏览器中滚动缓慢,添加 Option "MigrationHeuristic" "greedy" 作为设备选项可能会解决该问题。

此外,禁用 EXAPixmaps 可能会解决伪影问题,尽管通常不建议这样做,并且可能会导致其他问题。

/etc/X11/xorg.conf.d/20-radeon.conf
Section "OutputClass"
    Identifier "Radeon"
    MatchDriver "radeon"
    Option "AccelMethod" "exa"
    Option "MigrationHeuristic" "greedy"
    #Option "EXAPixmaps" "off"
EndSection

添加未检测到/不支持的分辨率

请参阅 Xrandr#添加未检测到的分辨率

电视屏幕周围显示黑色边框

注意: 在尝试以下解决方案之前,请确保电视已正确设置(请参阅手册)。

当使用 HDMI 端口连接电视时,电视可能会显示模糊的图像,周围有 2-3 厘米的边框。这可以防止过扫描(请参阅 Wikipedia:Overscan),但可以使用 xrandr 关闭

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

黑屏且没有控制台,但 KMS 中的 X 工作正常

这是在使用同一台 PC 上的两张或多张 ATI 显卡时可能出现的无控制台问题的解决方案。例如,Fujitsu Siemens Amilo PA 3553 笔记本电脑就存在此问题。这是由于 fbcon 控制台驱动程序将自身映射到错误的帧缓冲设备,该设备存在于错误的显卡上。可以通过使用以下 内核参数 来解决此问题

fbcon=map:1

这将告诉 fbcon 将自身映射到 /dev/fb1 帧缓冲设备,而不是 /dev/fb0,在我们的例子中,/dev/fb0 存在于错误的显卡上。如果这不能解决您的问题,请尝试使用以下命令启动

fbcon=map:0

代替。

ATI X1600 (RV530 系列) 3D 应用程序显示黑色窗口

有三种可能的解决方案

  • 尝试将 pci=nomsi 添加到您的启动加载程序 内核参数
  • 如果这不起作用,您可以尝试添加 noapic 而不是 pci=nomsi
  • 如果以上方法均不起作用,那么您可以尝试运行 vblank_mode=0 glxgearsvblank_mode=1 glxgears,看看哪个对您有效,然后永久设置该选项

从睡眠状态唤醒后光标损坏

如果光标损坏(例如,在显示器从睡眠状态唤醒后垂直重复自身),请在 /etc/X11/xorg.conf.d/20-radeon.conf 配置文件的 "OutputClass" 部分中设置 "SWCursor" "True"

DisplayPort 在多显示器模式下保持黑屏

尝试使用 内核参数 radeon.audio=0 启动。

R9-390 性能不佳和/或不稳定

R9-390 系列显卡的固件问题包括性能不佳和崩溃(通常由游戏或使用 Google 地图引起),可能与 DPM 相关。在错误报告上有一个评论,其中包含修复说明。

旧款 Radeon 显卡通过 HDMI 支持 QHD / UHD / 4k

旧款显卡的 HDMI 像素时钟频率限制为 165MHz。因此,它们不支持 QHD 或 4k,只能通过双链路 DVI 而不能通过 HDMI 支持。

一种解决方法是使用具有较低刷新率的自定义模式,例如 30Hz。

另一种方法是使用内核补丁删除像素时钟限制,但这可能会损坏显卡!

适用于 4.8 的官方内核错误票证和补丁:https://bugzilla.kernel.org/show_bug.cgi?id=172421

该补丁引入了一个新的内核参数 radeon.hdmimhz,它可以更改像素时钟限制。

请务必为此使用高速 HDMI 电缆。

在 390X 上使用 4k DP 输出时偶尔出现水平闪烁

如果您使用 390X(或类似的型号)以及 DP 的 4k 输出,您可能会遇到偶尔的水平伪影/闪烁(即,大约每半小时左右,屏幕宽度上约 100 像素高的水平条带上下抖动几秒钟)。这可能是 radeon 驱动程序的一个错误。切换到 AMDGPU 似乎可以解决此问题。

另请参阅

基准测试表明,对于许多显卡,开源驱动程序的性能与专有驱动程序相当。