ATI
本文介绍支持旧款 AMD (原 ATI) GPU 的 radeon 开源驱动。
选择合适的驱动程序
请阅读 Graphics processing unit#Installation 来识别您的硬件并找到合适的驱动。本页面包含 ATI 的相关说明。
如果不确定,请先尝试 AMDGPU 驱动,它适用于 2015 年后发布的大多数显卡。请参考 功能矩阵 查看驱动支持情况,并使用 解码表 将市场名称(如 Radeon HD4330)转换为芯片代号(如 R700)。
安装
安装 mesa 软件包,它提供了用于 3D 加速的 DRI 驱动以及用于 硬件视频解码 的 VA-API/VDPAU 驱动。对于非常老旧的 GPU(R200 及更早版本),请安装 mesa-amber。
- 对于 32 位应用程序支持,请从 multilib 仓库安装 lib32-mesa(或 lib32-mesa-amber)软件包。
- 由于存在基于内核 DRM 驱动运行的 默认 Xorg modesetting 驱动,因此不再需要旧的 xf86-video-ati 软件包。
加载
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。
监控
监控 GPU 通常用于检查温度以及 GPU 的 P-状态。请参阅 Graphics processing unit#Monitoring 获取 CLI 和 GUI 工具列表。此处未列出的历史工具 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"
ColorTiling 和 ColorTiling2D 默认应处于启用状态。平铺模式可为 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。
[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 抬头显示 (HUD)
radeon 驱动支持激活抬头显示 (HUD),它可以在渲染应用程序(如游戏)上方绘制透明图形和文本。它们可以显示诸如当前帧率、每个 CPU 核心的 CPU 负载或所有核心的平均值等信息。HUD 由 GALLIUM_HUD 环境变量控制,可以传递以下参数列表(以及其他参数):
- "fps" - 显示当前帧率
- "cpu" - 显示平均 CPU 负载
- "cpu0" - 显示第一个 CPU 核心的负载
- "cpu0+cpu1" - 显示前两个 CPU 核心的负载
- "draw-calls" - 显示对象中每个材质被绘制到屏幕的次数
- "requested-VRAM" - 显示 GPU 上使用的 VRAM 量
- "samples-passed" - 显示显示的像素数
要查看完整参数列表以及有关操作 GALLIUM_HUD 的说明,您可以将 "help" 参数传递给简单的应用程序(如 glxgears)并在终端中查看相应的输出。
# GALLIUM_HUD="help" glxgears
混合显卡/AMD 动态可切换显卡
这是近期笔记本电脑上采用的技术,配备了两个 GPU:一个节能(通常为 Intel 集显)和一个功能强大但功耗较高(通常为 Radeon 或 Nvidia)的 GPU。有两种工作方式:
- 如果不运行“高负载 GPU”应用程序,则可以禁用独显(参见 Ubuntu wiki)。
# echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
- PRIME:是在 Linux 上使用混合显卡的正规方式,但仍需要用户进行少量的手动干预。
省电
您可以选择以下三种方法之一:
更多详细信息请参见 https://www.x.org/wiki/RadeonFeature/#index3h2。
动态电源管理 (DPM)
自内核 3.13 起,DPM 已为 许多 AMD Radeon 硬件 默认启用。如果您想禁用它并改用其他方法,请在 内核参数 中添加 radeon.dpm=0。
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使用默认时钟,不改变电源状态。这是默认行为。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=="card0", SUBSYSTEM=="drm", DRIVERS=="radeon", ATTR{device/power_method}="profile", ATTR{device/power_profile}="low"
作为另一个示例,可以永久强制 动态电源管理 为特定性能水平:
/etc/udev/rules.d/30-radeon-pm.rules
KERNEL=="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 工具或 /sys/class/hwmon 中的 sysfs 获取温度。
风扇转速
虽然上述节能功能应该能很好地处理风扇转速,但某些卡在空闲状态下可能仍然太吵。在这种情况下,并且当您的显卡支持时,您可以手动更改风扇转速。
- 请记住,以下方法将风扇速度设置为固定值,因此它不会根据 GPU 的压力进行调节,这可能导致在高负载下过热。
- 应用低于标准的值时,请检查 GPU 温度。
要控制 GPU 风扇,请参阅 Fan speed control#AMDGPU sysfs fan control(amdgpu 和 radeon 对此有相同的控制方式)。
关于持久性,请参见 #Persistent configuration 中的示例。
如果不需要固定值,还可以通过编写脚本手动定义自定义风扇曲线,根据当前温度设置风扇转速(当前值位于 /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
克隆模式:
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 音频
HDMI 音频在 xf86-video-ati 视频驱动中得到支持。要禁用 HDMI 音频,请在 内核参数 中添加 radeon.audio=0。
如果启动后没有视频,则必须禁用该驱动选项。
- 如果安装驱动后 HDMI 音频无法工作,请使用 Advanced Linux Sound Architecture/Troubleshooting#HDMI output does not work 中的步骤测试您的设置。
- 如果 PulseAudio 中的声音失真,请尝试设置
tsched=0(详见 PulseAudio/Troubleshooting#Troubleshooting buffer underruns (glitches, skips, crackling)),并确保rtkit守护进程正在运行。 - 由于 HDA 兼容硬件非常普遍,您的声卡可能使用相同的模块。请使用建议的方法之一进行 设置默认声卡,包括使用 ALSA 配置中的
defaults节点。
多屏显示设置
使用 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 输出进行双头设置。
关闭垂直同步 (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>
如果垂直同步仍然启用,可以通过编辑 /etc/X11/xorg.conf.d/20-radeon.conf 来禁用它。参见 #Driver options。
故障排除
使用 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。如果这不能解决您的问题,请尝试在启动时添加:
fbcon=map:0
作为代替。
ATI X1600 (RV530 系列) 3D 应用程序显示黑窗口
有三种可能的解决方案:
- 尝试将
pci=nomsi添加到引导加载程序的 内核参数 中。 - 如果无效,您可以尝试添加
noapic而不是pci=nomsi。 - 如果以上都不起作用,您可以尝试运行
vblank_mode=0 glxgears或vblank_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。因此,它们不支持通过 HDMI 实现 QHD 或 4k,仅支持双通道 DVI。
绕过此限制的一种可能性是使用 较低刷新率(如 30Hz)的自定义模式。
另一种方法是应用内核补丁以移除像素时钟限制,但这可能会损坏显卡!
包含 4.8 补丁的官方内核错误工单:https://bugzilla.kernel.org/show_bug.cgi?id=172421
该补丁引入了一个新的内核参数 radeon.hdmimhz,用于改变像素时钟限制。
请务必为此使用高速 HDMI 线缆。
390X 在 4k DP 输出时偶尔出现水平闪烁
如果您使用 390X(或类似型号)并使用 DP 输出 4k 信号,可能会遇到偶发的水平伪影/闪烁(例如每半小时左右,屏幕上会出现一个高度约 100 像素的水平像素条上下震动几秒钟)。这可能是 radeon 驱动的 bug。切换到 AMDGPU 似乎可以解决该问题。
参见
基准测试显示,对于许多显卡,开源驱动在性能上与专有驱动相当。