显式同步

主要观点:明确同步被合并到 Wayland 协议中,引发诸多疑问,此篇解释其含义、必要性及优势。
关键信息

  • 同步需求:应用渲染非立即完成,需记录命令列表让 GPU 按节奏执行,以提高性能,避免 CPU 和 GPU 空闲等待,同时需处理渲染命令间的同步,否则可能读取未完成渲染的图像。
  • “旧”模型:传统图形 API 如 OpenGL 采用隐式同步,内核和图形驱动会处理命令间的同步,Linux 图形栈的 dma 缓冲区基础设施也用此模型,但会导致应用不知同步到哪些任务,Wayland 合成器曾受此影响。
  • “新”模型:明确同步让应用明确告知相关组件渲染何时完成及同步哪些任务,Vulkan 采用,Wayland 协议也用于 OpenGL 和 Vulkan 驱动与合成器的同步,新协议可创建和共享同步原语而无需先提交 GPU 工作,能避免意外同步并提升性能,但性能提升较小。
  • 为何引起关注:专有 NVIDIA 驱动不支持隐式同步,常用合成器和 NVIDIA 驱动也不支持第一个明确同步协议,导致 Wayland 上出现明显闪烁和帧 pacing 问题,虽有一些 workaround 但效果不佳,随着合成器和 Xwayland 及 NVIDIA 驱动实现明确同步协议,该问题将解决。
    重要细节
  • 隐式同步可能使合成器选取未准备好的应用图像导致展示延迟和帧丢失。
  • 已有用于明确同步的协议[zwp_linux_explicit_synchronization_unstable_v1],但与隐式同步有相同限制,新协议可先创建共享同步原语。
  • 性能提升虽小,但对某些情况有帮助,且问题并非对所有人都明显,与使用的应用、硬件等因素有关。
阅读 17
0 条评论