对glxgear禁用垂直同步


85

有时,您需要检查Linux 3D加速是否确实有效(除了glxinfo输出)。该glxgears工具可以快速完成此操作。但是,FPS通常限于显示器的垂直刷新率(即60 fps)。因此该工具或多或少变得无用,因为即使是软件渲染也可以在现代CPU上轻松生成60FPS glxgear。

我发现很难快速而轻松地解决此问题,我回答了我自己的问题。希望它可以节省您的时间。

Answers:


119

vblank_mode环境变量的伎俩。然后,您应该在现代硬件上获得数百FPS。现在,您可以将结果与其他人进行比较。

$>   vblank_mode=0 glxgears

3
正是我想要的。我的刷新率为59.984 FPS。设置vblank_mode=0我现在在运行OpenBSD 5.6的旧Intel i965视频驱动程序上获得了1375.257 FPS。
克林特·帕奇

33
可能值得一提的是,这仅适用于Mesa开源视频驱动程序
ali_m 2015年

1
使用Radeon / Intel混合动力与Mesa为我工作
Mark K Cowan

这种工作会冻结整个计算机,因此需要在我的计算机上使用单独的TTY pkill(arch)
phil294

73

如果您使用的是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 '18年

我在所有机器上似乎都得到了类似的结果。它们都超过2万FPS。这是Nvidia卡的限制吗?
亚伦·弗兰克

我在GTX1050上获得了47,000 FPS
drescherjm

它在Ubuntu 18.04中为GTX 1050 Ti使用13k FPS。
fegemo

也可以在Jetson Nano上使用。我得到大约2650 FPS。
robotrovsky '19

28

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

查找“设备”部分,/etc/X11/xorg.conf其中包含以下指令之一:

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

并将以下行添加到该部分:

Option     "SwapbuffersWait"       "false"

并在vblank_mode环境变量设置为的情况下运行您的应用程序0

$ vblank_mode=0 glxgears

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

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

nvidia-settings通过取消选中的选项,可以在GUI中进行相同的更改X Screen 0 / OpenGL Settings / Sync to 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显示器的持久设置(即,不仅限于外壳)。
Michael Krebs 2014年

13

将其他所有答案放在一起,下面是一个可以使用的命令行:

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

这具有可同时用于Mesa和NVidia驱动程序的优点,并且不需要对配置文件进行任何更改。


6

禁用nvidia-settings(“ OpenGL设置”选项卡)中的“与VBlank同步”复选框对我来说有用。


5

我找到了一种解决方案,该解决方案可使用Bumblebee在intel卡和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 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.