Surface Go 2修复桌面动画卡顿参考办法

Surface Go 2 Linux 唤醒后图形卡顿问题解决方案

一、问题概述

在 Surface Go 2 上运行 ZorinOS(Wayland 会话、surface‑linux 内核)时,系统从睡眠唤醒后出现:

  • GNOME Shell 桌面动画卡顿、掉帧;
  • Parsec 远程解码硬件模式下延迟 40–50 ms、声音卡顿;
  • XWayland CPU 占用高达 15–20%。

二、诊断思路

  1. 日志定位
    • Wayland 会话下 GetVSyncParametersIfAvailable() failed 报错;
    • 内核层面 i915 驱动未报错,解码器(vcs0)空闲;
    • XWayland 无错误日志。
  2. Hypothesis
    • Framebuffer 混合(simple‑framebuffer + i915drmfb)导致 KMS page‑flip 事件丢失,合成器拿不到 VSync;
    • PSR/DC 电源策略也会导致唤醒后 pipe 不同步。
  3. 验证
    • 切换到 Xorg 会话,XWayland CPU 占用降至 0–5%,Par sec 延迟恢复;
    • 核心层面 GPU 恢复正常。

三、解决方案步骤

1. 禁用简单 Framebuffer

  • 编辑 /etc/default/grub
    sudo nano /etc/default/grub
    # 将以下加入 GRUB_CMDLINE_LINUX_DEFAULT:
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=efifb:off video=vesafb:off"
    
  • 更新并重启:
    sudo update-grub
    sudo reboot
    

目的:让 i915drmfb 从引导阶段起接管 framebuffer,避免 mixed‑FB 导致的 page‑flip 丢失。

2. 强制 VAAPI 使用 iHD 驱动

  • 创建或编辑 /etc/libva.conf
    LIBVA_DRIVER_NAME=iHD
    

目的:让所有硬件解码调用走 Intel VAAPI,不再 fallback 到不存在的 CUDA / VDPAU。

3. 启用 GNOME 三缓冲

gsettings set org.gnome.mutter experimental-features "['triple-buffering']"

目的:增加合成缓冲,减少丢帧对动画和 XWayland 应用的影响。

四、验证与效果

重启并在 Wayland 会话下:

  1. 检查日志
    sudo journalctl -k -b | grep -Ei 'drm|i915|flip|vsync'
    journalctl --user -b | grep -i gnome-shell
    sudo journalctl -b _COMM=Xwayland
    
    • 不再出现 GetVSyncParametersIfAvailable() 报错;
    • XWayland 日志无错误。
  2. 监测 CPU 占用
    btop
    
    • XWayland 占用稳定在 0–5%。
  3. 测试 Parsec
    • 硬件解码延迟恢复至 < 20 ms,声音流畅;
    • 切换软硬件编码稳定。

五、注意事项

  • 启动画面(splash)在禁用 framebuffer 后可能回退到字符模式;可酌情关闭。
  • 若日后想恢复默认,只需移除 GRUB 中相关参数并 update-grub
  • 可随时切换回 Xorg 会话进行二次测试。

此文档记录 Surface Go 2 在 ZorinOS(surface‑linux 内核)下的唤醒后图形卡顿根本解决方案。