窗口越大,图形越卡(可能与 Nvidia PRIME 有关,也可能与 GLES3 有关)

窗口越大,图形越卡(可能与 Nvidia PRIME 有关,也可能与 GLES3 有关)

我在 Ubuntu 19.04 上安装有 Nvidia GTX 1050 Mobile,并使用 ppa 中的最新 nvidia-driver-430。

在 PRIME 配置文件中,我选择了 Nvidia 而不是 Intel。这似乎是公认的(OpenGL ES 3.0 渲染器:GeForce GTX 1050 带 Max-Q Design/PCIe/SSE2)。nvidia-smi还报告 GPU 处于负载状态。

然而,奇怪的是:渲染 3D OpenGL 图形的窗口大小对性能有很大影响。大多数时候(并非总是!)720p 或更低的窗口性能与我预期的一样好,并且 CPU 负载最小。然而,将其调整为更大的尺寸会导致一切(甚至操作系统本身)由于图形处理负载而变得非常滞后。

我认为英特尔显卡在较大的窗口下使用。原因是当发生这种情况时 CPU 使用率会大幅增加。不过nvidia-smiGPU-Util 仍显示为 100%,并且程序在Processes选项卡中...

我真的很感激一些帮助,因为全屏窗口的性能确实令人难以忍受。

我主要注意到这是 Godot 引擎的一个大问题。编辑:它也只发生在使用 GLES3 的 Godot 中,而不会发生在 GLES2 中,所以这可能是我的系统的 GLES3 问题!

编辑:这是一个示例,展示了将窗口大小调整到略高于滞后阈值,然后再调低时 CPU 使用率的情况:https://i.stack.imgur.com/AKMDZ.png对于更复杂的 3D 场景,跳跃可能会更高。当发生这种情况时,在几乎空白的场景中,FPS 会从 >60 降至 10 左右。

每次重启后,该阈值似乎都会有点不同。

答案1

我终于明白了这一点:

导致此问题的直接原因是我的 VRAM 已满!这解释了为什么窗口大小存在一定的阈值:当窗口太大时,VRAM 容量达到 100%,导致整个操作系统滞后。这很有道理!

为什么 Godot 使用了这么多 VRAM?我不知道。但是,我安装了 Bumblebee,这样我就可以只将 Godot 委托给 GPU。现在事实证明,当使用 Bumblebee 时optirun,VRAM 使用率实际上是正常的!

现在,让 Bumblebee 工作起来本身就是一整章的内容,但这里的回应对我帮助最大:https://bugs.launchpad.net/ubuntu/+source/bumblebee/+bug/1758243

总结:显然,仅使用不带 Nvidia Optimus 的 GPU(在同时具有集成显卡和 Nvidia GPU 的笔记本电脑上)会导致某些程序的 VRAM 使用率无缘无故地大幅上升。设置 Primus/Bumblebee 并使用optirun可修复此问题。

相关内容