Visitar URL original
[Bug]: 多显卡(mgpu)场景 "Failed to pick cursor plane format" 每帧刷屏 ERROR 日志(drm.c:1165,journal 约 8 条/秒、持续写盘) · Issue #1525 · linuxdeepin/treeland · GitHub
Skip to content

[Bug]: 多显卡(mgpu)场景 "Failed to pick cursor plane format" 每帧刷屏 ERROR 日志(drm.c:1165,journal 约 8 条/秒、持续写盘) #1525

Open

Description

@hotime

SUMMARY | 问题概要

treeland 运行时 journalctl 持续、高频地打印 wlroots 的 ERROR 日志 Failed to pick cursor plane format(约每秒 7~8 条,光标移动时持续不断),从不停止。功能上光标仍可用(走了 fallback),但属于纯日志噪声,且造成持续的 journal 写盘。已定位到源码:位于仓库内 vendored 的 3rdparty/wlroots(0.20.2)backend/drm/drm.c 的 drm_connector_set_cursor(),在 mgpu(多 GPU)渲染分支里,每次提交光标缓冲都会调用 drm_plane_pick_render_format(),本机 cursor plane 无法提供可用 render format 导致其每次都失败并打印一条 WLR_ERROR。这是一个稳定的硬件能力限制,却被放在高频 hot path 里逐次打印。触发条件:仅当有显示器由次 GPU(非主 GPU)驱动时,其光标才走此 mgpu 路径——本机即外接在 NVIDIA 独显上的 HDMI-A-1(接在 Intel 主 GPU 上的内屏 eDP-1 不走此路径)。

LAUNCH-WAY | 启动方式

ddm

BACKEND | 启动后端

DRM

STEPS TO REPRODUCE | 复现步骤

  1. 在一台走 mgpu(多 GPU)渲染路径的机器上正常启动 treeland(DRM 后端)。
  2. 打开终端执行 journalctl -f | grep -i "cursor plane"。
  3. 移动鼠标 / 让光标变化,或 simply 保持桌面运行。
  4. 观察终端持续、高频输出该 ERROR。

说明:触发前提是本机走 mgpu 渲染路径、且 GPU/DRM 驱动上报的 cursor plane 无法提供可用 render format。非 mgpu 路径不触发。

OBSERVED RESULT | 观察到的结果

treeland[PID]: [./3rdparty/wlroots/backend/drm/drm.c:1165] Failed to pick cursor plane format

只要合成器在跑、光标在动就一直打印,约 每秒 7~8 条,从不停止。光标功能正常(有 fallback),但 journal 被这条 ERROR 刷屏。

EXPECTED RESULT | 期望的结果

不再每帧重复打印同一条 ERROR 日志(例如只打印一次,或在该能力确定时评估一次即可),避免 journal 被刷屏和持续写盘。

ADDITIONAL INFORMATION | 额外补充

根因(源码定位) —— 3rdparty/wlroots/backend/drm/drm.c,函数 drm_connector_set_cursor(),mgpu 分支:

if (drm->mgpu_renderer.wlr_rend) {
    struct wlr_drm_format format = {0};
    if (!drm_plane_pick_render_format(plane, &format, &drm->mgpu_renderer)) {
        wlr_log(WLR_ERROR, "Failed to pick cursor plane format");
        return false;
    }
    ...
}

drm_connector_set_cursor() 每次提交光标缓冲都会被调用;drm_plane_pick_render_format() 每次失败 → 每次打一条 WLR_ERROR。失败是稳定的硬件能力限制,却在高频路径逐次打印,导致刷屏与持续写盘。

触发条件(从源码确认):

  • 该日志在 wlroots DRM 后端的 mgpu(多 GPU 渲染)分支里,且按 connector 所属的 GPU 生效:只有次 GPU(非主 GPU) 上的显示器,其光标提交才会走 mgpu 路径。
  • wlroots 启动时 wlr_session_find_gpus 枚举到多块可渲染 GPU(本机 Intel + NVIDIA):第一块为主 GPU(parent 为空、不建 mgpu renderer),其余每块都带 parent 并初始化 mgpu renderer(见 backend/drm/backend.c 的 attempt_drm_backend)。
  • 本机拓扑:内屏 eDP-1 接 Intel(主 GPU,不走 mgpu,无此日志);外接 HDMI-A-1 接 NVIDIA(次 GPU)→ 该屏光标走 mgpu → drm_plane_pick_render_format 失败 → 刷屏。
  • 即必要条件是"有一台显示器由次 GPU 驱动"(笔记本上通常就是接在独显上的外接显示器);仅有双 GPU 但次 GPU 不带显示器时,不会触发此日志。

影响:journal 约 7~8 行/秒,长期运行写盘量可观(对 SSD 不友好);淹没有效日志、干扰排查;无功能影响(光标仍可用)。

补充核查:在最新 master(0.11.0)上确认该处代码依旧存在(vendored wlroots 仍为 0.20.2,drm.c:1165 未变),问题未修复。

环境信息:

  • treeland 版本:0.9.1(也确认 0.11.0 / master 同样存在)
  • 系统 / 内核:deepin 25.2.2 ,内核 6.18.48-amd64-desktop-rolling
  • 显卡(双 GPU,两台显示器分跨两块 GPU,日志已确认走 mgpu 渲染路径):
    • Intel UHD Graphics 630 (CoffeeLake-H GT2) [8086:3e9b] —— card0
    • NVIDIA GeForce GTX 1660 Ti Mobile (TU116M) [10de:2191] —— card1
  • 显示器:2 块(eDP-1 内屏 1920x1080,接在 Intel card0;HDMI-A-1 外接 2560x1440,接在 NVIDIA card1)
  • wlroots:vendored 3rdparty/wlroots 0.20.2

Activity

  1. LFRon commented on Oct 24, 2026

    @LFRon
    Contributor

    这是NVIDIA独显+Intel/AMD核显场景吧,我电脑AMD独显+AMD核显是没问题的

  2. hotime commented on Oct 24, 2026

    @hotime
    Author

    2. 这是NVIDIA独显+Intel/AMD核显场景吧,我电脑AMD独显+AMD核显是没问题的

    是的,Nvidia独显。驱动使用的是仓库中的:nvidia-driver-595-open 595.71.05-0deepin3

  3. LFRon commented on Oct 25, 2026

    @LFRon
    Contributor

    3. > 2. 这是NVIDIA独显+Intel/AMD核显场景吧,我电脑AMD独显+AMD核显是没问题的

    是的,Nvidia独显。驱动使用的是仓库中的:nvidia-driver-595-open 595.71.05-0deepin3
    

    只能评价为:
    Image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions