4. 渲染故障排查工具:dmesg日志分析、drm_info、modetest、igt-gpu-tools使用

当GPU渲染出现异常(如画面撕裂、黑屏、花屏、分辨率错误或HDR无法启用)时,系统日志与专用诊断工具是定位问题的第一道防线。本章将系统讲解四个核心排查工具的使用方法、输出解读与典型故障特征。

核心原则:排查渲染故障应遵循“从内核到用户态”的路径——先通过 dmesg 确认驱动加载与硬件状态,再用 drm_info 查看DRM子系统的拓扑与属性,接着用 modetest 验证显示模式设置,最后用 igt-gpu-tools 进行压力测试与合规性检查。
渲染故障排查工具工作流 dmesg 内核日志分析 drm_info DRM子系统拓扑 modetest 模式设置验证 igt-gpu-tools 压力与合规测试 排查顺序说明 ① dmesg 确认驱动加载 → ② drm_info 查看当前拓扑与属性 → ③ modetest 测试模式设置 → ④ igt-gpu-tools 深度压力测试 每个步骤发现问题后,可返回上一步细化排查,形成闭环。

4.1 dmesg 日志分析:驱动加载与硬件状态

dmesg 是内核环形缓冲区的输出接口,记录从引导到当前时刻的驱动加载、设备枚举、错误与警告信息。在DRM故障排查中,它是第一手证据来源。

4.1.1 关键过滤命令

# 查看 DRM 相关日志(推荐)
dmesg | grep -i drm

# 查看 GPU 驱动相关日志(以 i915/amdgpu/nouveau 为例)
dmesg | grep -iE "i915|amdgpu|nouveau"

# 查看 HDR/色彩空间相关日志
dmesg | grep -iE "hdr|color|bt2020|pq|eotf"

# 查看错误与警告级别日志
dmesg --level=err,warn | grep -iE "drm|gpu|display"

4.1.2 典型故障日志特征

日志模式 可能原因 排查方向
[drm] *ERROR* failed to set mode 模式设置失败,timing参数不合法 检查EDID、显示器支持的分辨率/刷新率
[drm] GPU HANG: ecode ... GPU挂起,渲染超时 检查驱动版本、固件、温度与电源管理
amdgpu: *ERROR* No EDID read 显示器EDID读取失败 检查HDMI/DP线缆、显示器电源、I2C总线
i915: Unsupported HDR format HDR元数据格式不被驱动支持 检查内核版本、驱动补丁、HDR标准兼容性
[drm] Connector state: disconnected 连接器状态异常,显示器未识别 检查物理连接、驱动加载顺序、ACPI事件
实战技巧:使用 dmesg -T 将时间戳转换为可读时间,便于与故障发生时刻对齐。对于频繁刷新的日志,使用 dmesg -w 实时跟踪新输出。

4.2 drm_info:DRM子系统拓扑与属性查看

drm_info 是DRM子系统的诊断工具,以树状结构展示所有DRM设备、CRTC、Encoder、Connector、Plane及其属性。它比 sysfs 更直观,比 modetest 更侧重静态信息。

4.2.1 基本用法

# 查看所有DRM设备信息
drm_info

# 查看指定设备(如 card0)
drm_info --device=/dev/dri/card0

# 输出为 JSON 格式(便于脚本解析)
drm_info --json

4.2.2 输出解读要点

  • CRTC:扫描控制器,负责将framebuffer合成并输出。关注其 mode 属性是否与期望分辨率一致。
  • Connector:物理接口(HDMI/DP/eDP)。关注 connection 状态(connected/disconnected)、edid 是否存在、hdr_output_metadata 是否支持。
  • Plane:硬件图层。关注 type(Primary/Overlay/Cursor)、format 是否包含所需像素格式(如 NV12、P010、ARGB2101010)。
  • Encoder:编码器。关注其与CRTC的绑定关系。
drm_info 输出结构示意 DRM Device card0 CRTC 0 CRTC 1 Encoder 0 Connector 0 mode: 1920x1080 mode: 3840x2160 connection: connected 每个节点均可展开查看详细属性,如 CRTC 的 mode、Connector 的 edid/hdr_output_metadata
注意:如果 drm_info 输出中 Connector 状态为 disconnected 但显示器物理连接正常,通常表示驱动未正确检测到显示器。此时应检查 dmesg 中是否有 EDID 读取错误,并尝试重新插拔线缆。

4.3 modetest:模式设置与显示测试

modetest 是 libdrm 提供的测试工具,用于枚举显示设备、测试模式设置、绘制测试图案。它可以直接操作DRM接口,绕过用户态合成器(如Wayland/Weston),是验证硬件显示能力的“裸金属”工具。

4.3.1 常用命令

# 列出所有DRM设备及其资源
modetest -M amdgpu

# 在指定连接器上测试模式(如 connector 35,分辨率 1920x1080)
modetest -M amdgpu -s 35:1920x1080-60

# 测试 overlay plane(如 plane 19,使用 NV12 格式)
modetest -M amdgpu -s 35:1920x1080-60 -P 19:1920x1080@NV12

# 测试 HDR 模式(需驱动支持)
modetest -M amdgpu -s 35:3840x2160-60 -C 35:BT2020

4.3.2 输出解读

输出字段 含义 故障排查关注点
Connector id: 35 连接器ID 确认与物理接口对应
Encoder id: 30 编码器ID 确认与CRTC绑定
CRTC id: 25 CRTC ID 确认当前使用的CRTC
Mode: 1920x1080-60 当前模式 检查是否与期望一致
Plane id: 19 Plane ID 确认plane类型与格式支持
Test: OK / FAIL 模式设置测试结果 FAIL表示该模式不被硬件支持
典型场景:当显示器黑屏但系统认为连接正常时,使用 modetest -s <connector_id>:<mode> 强制设置模式。如果屏幕点亮,说明问题出在用户态合成器(如Xorg/Wayland)的配置上;如果仍然黑屏,则可能是驱动或硬件问题。

4.4 igt-gpu-tools:压力测试与合规性检查

igt-gpu-tools(Intel GPU Tools)是DRM子系统最全面的测试套件,包含数百个测试用例,覆盖渲染、显示、电源管理、HDR、VRR等。虽然最初为Intel开发,但已被AMD和NVIDIA(开源驱动)广泛采用。

4.4.1 安装与基本使用

# 安装(以 Ubuntu/Debian 为例)
sudo apt install igt-gpu-tools

# 列出所有测试用例
sudo igt_list_tests

# 运行指定测试(如 kms_hdr)
sudo igt_runner kms_hdr

# 运行所有显示相关测试
sudo igt_runner kms_*

4.4.2 常用测试子集

测试子集 测试内容 典型故障检测
kms_hdr HDR元数据设置、BT2020色彩空间、PQ EOTF HDR无法启用、色彩偏移
kms_atomic Atomic模式设置、plane组合、CRTC切换 画面撕裂、模式切换失败
kms_plane Plane格式、缩放、旋转、alpha混合 图层显示异常、花屏
kms_vrr 可变刷新率(VRR/FreeSync) VRR不工作、画面抖动
kms_flip Page flip、帧同步、时序 画面卡顿、帧率不稳定
kms_dp_aux DP AUX通道通信、DPCD寄存器读写 DP显示器无法识别、HDR握手失败

4.4.3 测试结果解读

# 测试通过示例
IGT-Version: 1.28-git (x86_64) (Linux: 6.5.0-14-generic)
Subtest: test_hdr_metadata
(kms_hdr:1234) CRTC_INFO: HDR metadata set successfully
(kms_hdr:1234) CRTC_INFO: PQ EOTF enabled
Subtest: test_hdr_metadata: SUCCESS (0.001s)

# 测试失败示例
IGT-Version: 1.28-git (x86_64) (Linux: 6.5.0-14-generic)
Subtest: test_hdr_metadata
(kms_hdr:1234) CRTC_DEBUG: Failed to set HDR metadata: Invalid argument
(kms_hdr:1234) CRTC_ERROR: HDR metadata not supported by connector
Subtest: test_hdr_metadata: FAIL (0.002s)
调试建议:当 igt_runner 报告 FAIL 时,查看 dmesg 中对应的内核错误信息。例如,HDR测试失败时,dmesg 可能显示 Unsupported HDR format 或 Failed to set HDR metadata,这通常指向驱动对HDR标准的支持不完整。

4.5 工具协同使用案例:HDR无法启用排查

以下是一个完整的排查流程,展示四个工具如何协同工作:

  1. dmesg:检查驱动加载与HDR相关日志。
    dmesg | grep -iE "hdr|bt2020|pq" → 确认驱动是否支持HDR元数据。
  2. drm_info:查看Connector的 hdr_output_metadata 属性。
    drm_info | grep -A 10 "Connector.*HDMI" → 确认连接器是否报告HDR支持。
  3. modetest:测试HDR模式设置。
    modetest -M amdgpu -s 35:3840x2160-60 -C 35:BT2020 → 验证硬件能否接受HDR模式。
  4. igt-gpu-tools:运行HDR专项测试。
    sudo igt_runner kms_hdr → 获取详细的HDR功能测试报告。
HDR无法启用排查协同流程 Step 1: dmesg 驱动HDR支持 Step 2: drm_info 连接器属性 Step 3: modetest 模式设置验证 Step 4: igt 合规性测试 发现问题后返回上一步细化排查
常见陷阱:不要仅依赖单一工具。例如,modetest 测试通过不代表用户态应用(如游戏、媒体播放器)能正常使用HDR,因为用户态还需要正确设置DRM属性。始终结合 drm_info 确认属性状态,并用 igt 验证完整流程。