禁用垂直同步以运行glxgears

104
有时候你需要检查 Linux 3D 加速是否真正生效(除了 glxinfo 输出之外)。这可以通过使用 glxgears 工具来快速完成。然而,其中的 FPS 常常受到显示器垂直刷新率的限制(即 60 fps)。因此,该工具变得不那么有用,因为即使软件渲染也可以在现代 CPU 上轻松产生 60FPS 的 glxgears。
我发现很难找到一个快速简便的解决方案,所以我自己回答了这个问题。希望能为你节省时间。
7个回答

145

vblank_mode 环境变量可以起到作用。在现代硬件上,您应该能够获得几百帧每秒的速度。现在您可以将结果与其他人进行比较。

$>   vblank_mode=0 glxgears

4
正是我所期望的。我之前的刷新率是59.984 FPS。通过设置 vblank_mode=0 ,我现在在运行OpenBSD 5.6 的老旧Intel i965视频驱动程序上获得了1375.257 FPS。 - Clint Pachl
41
值得一提的是,这仅适用于Mesa开源视频驱动程序。 - ali_m
1
使用Mesa,我的Radeon/Intel混合显卡可以正常工作。 - Mark K Cowan
这种方法可以工作,但会冻结整个计算机,需要在我的机器上(arch)使用单独的TTY pkill。 - phil294
vblank_mode=2 是启用垂直同步,vblank_mode=1 是禁用。vblank_mode=0 也可以禁用,但除了 "2" 以外的任何其他值都可以。 - desgua

102

如果您正在使用NVIDIA闭源驱动程序,您可以使用__GL_SYNC_TO_VBLANK环境变量实时改变垂直同步模式:

~$ __GL_SYNC_TO_VBLANK=1 glxgears
Running synchronized to the vertical refresh.  The framerate should be
approximately the same as the monitor refresh rate.
299 frames in 5.0 seconds = 59.631 FPS

~$ __GL_SYNC_TO_VBLANK=0 glxgears
123259 frames in 5.0 seconds = 24651.678 FPS

这对我来说在使用346.46 NVIDIA驱动程序的Ubuntu 14.04上有效。


它也适用于Ubuntu 16.04,387.26 NVIDIA驱动程序。 - Alejo Bernardin
我似乎在所有的机器上得到了类似的结果。它们都略高于20,000 FPS。这是Nvidia卡的限制吗? - Aaron Franke
我在GTX1050上获得了47,000 FPS。 - drescherjm
在Ubuntu 18.04中,GTX 1050 Ti的帧速率达到了13k FPS。 - fegemo
也适用于Jetson Nano。我大约获得了2650 FPS。 - robotrovsky
显示剩余2条评论

31

适用于Intel图形和AMD/ATI开源图形驱动程序

/etc/X11/xorg.conf文件中查找“Device”部分,该部分包含以下指令之一:

  • Driver "intel"
  • Driver "radeon"
  • Driver "fglrx"

然后在该部分添加以下行:

Option     "SwapbuffersWait"       "false"

使用设置为0vblank_mode环境变量来运行您的应用程序:

$ vblank_mode=0 glxgears

对于使用专有Nvidia驱动程序的Nvidia图形

$ echo "0/SyncToVBlank=0" >> ~/.nvidia-settings-rc

您可以在nvidia-settings图形用户界面中通过取消选中X屏幕0 / OpenGL设置 / 同步到VBlank 选项来进行相同的更改。或者,如果您只想测试该设置而不修改您的~/.nvidia-settings-rc文件,您可以执行以下操作:

$ nvidia-settings --load-config-only --assign="SyncToVBlank=0"  # disable vertical sync
$ glxgears  # test it out
$ nvidia-settings --load-config-only  # restore your original vertical sync setting

1
对于Nvidia,您可以运行nvidia-settings --load-config-only --assign="SyncToVBlank=0"来仅更改X显示的设置(避免修改配置文件或运行GUI)。在运行glxgears之后,您可以运行nvidia-settings --load-config-only来恢复配置设置 - 这是您可能希望这样做的原因,因为它是正在运行的X显示的持久设置(即不仅仅是对于shell)。 - Michael Krebs

22

将其他答案整合起来,以下是可行的命令行:

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

这种方法的优点在于适用于Mesa和NVidia驱动程序,并且不需要对配置文件进行任何更改。


适用于基于 Ubuntu 22.04 LTS 的 PopOS 22.04 LTS!!! - MarcoZen

7
在nvidia-settings(OpenGL设置选项卡)中禁用“同步到VBlank”复选框对我有用。

5

我找到了一个解决方案,可以在英特尔卡和使用Bumblebee的Nvidia卡上运行。

> 导出vblank_mode=0
glxgears
...
optirun glxgears
...
导出vblank_mode=1


2

对于英特尔驱动程序,还有这种方法

禁用垂直同步(VSYNC)

英特尔驱动程序使用三重缓冲进行垂直同步,这可以实现完全的性能并避免撕裂。要关闭垂直同步(例如进行基准测试),请在您的主目录中使用此 .drirc 文件:

<device screen="0" driver="dri2">
    <application name="Default">
        <option name="vblank_mode" value="0"/>
    </application>
</device>

3
这是一个仅包含链接的回答。提供文档链接固然好,但仅此而已并不足以构成一个完整的回答(同时链接可能会失效,外部页面也可能会更改等)。请您能否总结一下您回答中的关键点? - ali_m

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接