问题的根源在于Linux内核缺乏对显存使用优先级的判断能力,当显存不足时,系统会随机将程序数据迁移至GTT(图形转换表,即系统内存中的GPU寻址区域),而不会区分前台游戏和后台程序。
Vock以《赛博朋克2077》为例进行测试,在8GB显卡上,游戏仅使用了约6GB显存,有1.37GB数据被迁移至GTT,导致帧率不稳定和卡顿。
Vock开发的解决方案包含两个核心组件,其一是dmemcg-booster,可标记需要"保护"的前台程序,使其显存数据不会被系统驱逐,转而将后台任务挤入速度更慢的系统内存。
应用该补丁后,《赛博朋克2077》的显存占用从6GB提升至7.4GB,GTT占用从1.37GB降至仅650MB,游戏运行流畅度明显改善。
其二是plasma-foreground-booster,可自动识别KDE桌面环境中的前台窗口并为其分配显存优先级。
目前这些补丁正在集成到CatchyOS中,并已提交Linux内核合并申请。
需要注意的是,该方案仅适用于AMD显卡,NVIDIA显卡由于闭源驱动的内存管理机制无法使用。