游戏卡顿白皮书 › L2 客户端操作系统与设备
显存(VRAM)不足 VRAM over-commit
原因 ID co-vram · 主责 研发团队·客户端开发 · 配合 外部·外部
在含图示和实验的完整版中打开此卡片 →
画质选项要求的内存超过显卡显存时,操作系统要把纹理换到系统内存再取回,画面就会一卡一卡。
起因 高纹理选项,加上人多处的各种装备、特效,把显存占满 → 结果 操作系统把暂时不用的纹理移到系统内存,需要时再经由较慢的 PCIe 总线取回 → 画面表现 每当出现新场景或新角色就顿一下,纹理一段时间内是模糊的
- 症状
- 一卡一卡, 卡住
- 因素
- 停顿
- 谁会遇到
- 只有我
- 何时出现
- 人多的时候, 移动中/切换地图时
- 负责方
- 主责 研发团队·客户端开发 · 配合 外部·外部
- 研发团队要做的事
- 按显存大小设定选项默认值,超出显存预算时自动降低纹理质量,人多的地方简化角色纹理。
- 外部要做的事
- 引导玩家降低纹理选项;双开时把选项再调低一些。
- 数值参考
- 显存每秒能读几百 GB,而与系统内存往来的 PCIe 总线视代际不同每秒约 16~64 GB,慢十倍以上。
- 监控图上
- 触顶后走平 · 专用 GPU 内存、共享 GPU 内存
- 查看位置
- 把任务管理器“性能”选项卡 GPU 项的专用 GPU 内存、共享 GPU 内存曲线(“详细信息”选项卡中也可添加按进程的列)与 PresentMon 帧耗时一起看
- 确认依据
- 专用 GPU 内存贴着上限走平、共享 GPU 内存上升期间,频繁顿一下,降低纹理选项后消失
- 排除依据
- 专用 GPU 内存有余量,看“存储设备过慢导致资源流式加载滞后”或“主线程同步加载/Shader 编译”
- 确认手段
- 需在玩家侧环境确认
- 深入了解
- 在 Windows 任务管理器的 GPU 项中,“专用 GPU 内存”占满、“共享 GPU 内存”上升,就是这种状态。同一台电脑双开时会更快占满(看“内存/显存不足导致流式加载失败”)。
出处
- Residency Microsoft
进程可用的显存有预算,超出时内核会把独立显卡的一部分堆移到系统内存(这是最后手段,建议做好预算管理) - GPUs in the task manager Microsoft
任务管理器中的专用 GPU 内存是显卡的 VRAM,共享 GPU 内存是 GPU 和 CPU 共用的系统内存 - CUDA C++ Best Practices Guide NVIDIA
显存带宽(V100 为 898 GB/s)远大于 PCIe x16 第 3 代(16 GB/s),所以建议减少与系统内存之间的传输 - PresentMon Capture Application (README-CaptureApplication.md) Intel
用 FrameTime(帧与帧之间的 CPU 时间)录制每帧耗时
相关原因
同一层:L2 客户端操作系统与设备
其他层中同样导致“一卡一卡”的原因
查看含图示和实验的原卡片