Отключить вертикальную синхронизацию для glxgears

Иногда вам нужно проверить, действительно ли вы работаете на Linux 3D-ускорении (кроме вывода glxinfo). Это можно быстро выполнить с помощью инструмента glxgears. Однако FPS часто ограничиваются показателями вертикальной частоты обновления (то есть 60 кадров в секунду). Таким образом, инструмент становится более или менее бесполезным, поскольку даже программный рендеринг может легко производить 60FPS glxgears на современных процессорах.

Мне было довольно сложно получить быстрое и простое решение для этого, я отвечаю на собственный вопрос. Надеюсь, это сэкономит ваше время.

Ответ 1

Переменная среды vblank_mode делает трюк. Затем вы должны получить несколько сотен FPS на современном оборудовании. И теперь вы можете сравнивать результаты с другими.

$>   vblank_mode=0 glxgears

Ответ 2

Если вы используете драйверы с закрытым исходным кодом 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

Это работает для меня на Ubuntu 14.04 с использованием драйверов NVIDIA 346.46.

Ответ 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

Такое же изменение можно сделать в графическом интерфейсе nvidia-settings, сняв опцию в 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

Ответ 4

Отключение флажка Sync to VBlank в настройках nvidia (вкладка "Настройки OpenGL" ) делает трюк для меня.

Ответ 5

Я нашел решение, которое работает на карте Intel и на карте nvidia с помощью Bumblebee.

<Р → export vblank_mode = 0
glxgears
...
optirun glxgears
...
export vblank_mode = 1

Ответ 6

Собрав все остальные ответы вместе, приведем командную строку, которая будет работать:

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

Это дает преимущества работы с драйверами Mesa и NVidia и не требует никаких изменений в файлах конфигурации.

Ответ 7

Для драйверов Intel существует также этот метод

Отключить вертикальную синхронизацию (VSYNC)

Интеллектуальный драйвер использует Triple Buffering для вертикальной синхронизации, что обеспечивает полную производительность и позволяет избежать разрыва. Чтобы отключить вертикальную синхронизацию (например, для бенчмаркинга), используйте этот .drirc в своем домашнем каталоге:

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