【问题标题】:Disable vertical sync for glxgears禁用 glxgears 的垂直同步
【发布时间】:2013-06-19 16:09:38
【问题描述】:

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

我发现很难找到一个快速简单的解决方案,我回答了我自己的问题。希望它能节省您的时间。

【问题讨论】:

    标签: linux 3d glx


    【解决方案1】:

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

    $>   vblank_mode=0 glxgears
    

    【讨论】:

    • 正是我想要的。我得到了 59.984 FPS,这是刷新率。设置 vblank_mode=0 我现在在运行 OpenBSD 5.6 的旧 Intel i965 视频驱动程序上获得 1375.257 FPS。
    • 值得一提的是,这仅适用于 Mesa 开源视频驱动程序
    • 使用 Radeon/Intel 混合和 Mesa 为我工作
    • 这种工作但会冻结整个计算机,需要在我的机器上单独的 TTY pkill (arch)
    • vblank_mode=2 是启用垂直同步,vblank_mode=1 是禁用。 vblank_mode=0 也可以禁用除“2”之外的任何其他内容。
    【解决方案2】:

    如果您使用的是 NVIDIA 闭源驱动程序,您可以使用 __GL_SYNC_TO_VBLANK environment variable 动态更改垂直同步模式:

    ~$ __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
    

    这适用于我在 Ubuntu 14.04 上使用 346.46 NVIDIA 驱动程序。

    【讨论】:

    • 它也适用于 Ubuntu 16.04、387.26 NVIDIA 驱动程序。
    • 我似乎在所有机器上都得到了类似的结果。它们都略高于 20,000 FPS。这是 Nvidia 卡的限制吗?
    • 我在 GTX1050 上获得了 47000 FPS
    • 它在 Ubuntu 18.04 中以 13k FPS 运行 GTX 1050 Ti。
    • 也适用于 Jetson Nano。我得到大约 2650 FPS。
    【解决方案3】:

    适用于 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
    

    通过取消选中X Screen 0 / OpenGL Settings / Sync to VBlank 的选项,可以在nvidia-settings GUI 中进行相同的更改。或者,如果您只想测试设置而不修改您的 ~/.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
    

    【讨论】:

    • 对于 Nvidia,您可以运行 nvidia-settings --load-config-only --assign="SyncToVBlank=0" 来更改 X 显示器的设置(并避免修改配置文件或运行 GUI)。运行glxgears 后,您可以运行nvidia-settings --load-config-only 来恢复配置设置——您可能想要这样做,因为它是运行X 显示的持久设置(即不仅仅是shell)。
    【解决方案4】:

    将其他答案放在一起,这是一个可行的命令行:

    env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears
    

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

    【讨论】:

      【解决方案5】:

      禁用 nvidia-settings(OpenGL 设置选项卡)中的 Sync to VBlank 复选框对我有用。

      【讨论】:

        【解决方案6】:

        我找到了一个适用于英特尔卡和使用 Bumblebee 的 nvidia 卡的解决方案。

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

        【讨论】:

          【解决方案7】:

          对于intel驱动,还有this method

          禁用垂直同步 (VSYNC)

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

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

          【讨论】:

          • 这是一个仅链接的答案。链接到一些文档很好,但不足以单独构成一个答案(链接也死掉了,外部托管的页面发生了变化等)。能否请您总结一下答案中的要点?
          猜你喜欢
          • 2020-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-11
          • 2013-06-19
          • 1970-01-01
          • 2013-04-23
          相关资源
          最近更新 更多