本周,最后一批 DRM-Misc-Next 功能补丁已提交至 DRM-Next,准备在本月晚些时候 Linux 7.3 合并窗口开启前排队等待合入。其中最引人注目的是 TTM 内存管理代码在低于保护限制分配时变得更加主动。这一改进得益于 Valve 的开源 Linux 图形团队。
自去年以来,Valve Linux 图形团队的 Natalie Vock 一直在研究设备内存保护无法阻止分配最终落入 GTT 的情况——当 vRAM 稀缺且应用/游戏开始争抢显存空间时。经过八轮修订,这些对通用 TTM 内存管理代码和 cgroup 设备内存代码的改进现已确定合入 Linux 7.3。
Vock 在补丁封面信中总结了这一情况:
"我一直在研究一些 dmem 保护无法阻止分配最终落入 GTT 的情况——当 VRAM 变得稀缺且应用开始激烈竞争时。
简而言之,这是因为其他(未受保护的)应用会在受保护应用之前填满 VRAM。这导致 TTM 退缩,并在此之前尝试在 GTT 中分配,最终分配就被放置在那里。现有的驱逐保护无法阻止这种情况,因为从未尝试过驱逐(尽管你可以将退缩视为立即驱逐到 GTT)。
本系列补丁试图通过为受 cgroups 保护的分配添加一个特例来缓解这一问题:TTM 不会立即退缩,而是会尝试从该域驱逐未受保护的缓冲区,为受保护的缓冲区腾出空间。这确保了应用能够真正使用系统授予它们的所有内存保护,而不会容易出现乒乓效应(只有受保护的分配可以驱逐未受保护的分配,反之则不行)。"
Vock 一直在致力于改善 vRAM 容量有限系统上的 Linux 游戏体验。
这些补丁属于本周的 drm-misc-next 拉取请求的一部分。其中还包括 DMEMCG 的驱逐支持,并已在 AMDGPU 和 Xe 驱动中启用。
UDMABUF 代码还移除了一个人为的 64MB 限制,该限制是 Xaver Hugl 在近期改进 KDE 多 GPU/eGPU 体验时发现的。Allwinner Sun4i DRM 驱动也改进了 YUV 和 4K 支持。
Nouveau 驱动现在也支持设备内存控制组(DMEMCG),该支持由 Natalie Vock 编写,作为其他改进的一部分。