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

85

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

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

mschmoock
источник

Ответы:

119

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

$>   vblank_mode=0 glxgears
mschmoock
источник
3
Именно то, что я искал. Я получал 59,984 FPS, что соответствует частоте обновления. Настройка vblank_mode=0Теперь я получаю 1375,257 FPS на старом видеодрайвере Intel i965 под управлением OpenBSD 5.6.
Клинт Пахл,
33
Вероятно, стоит упомянуть, что это работает только для видеодрайверов с открытым исходным кодом Mesa
ali_m
1
У меня работает с использованием гибрида Radeon / Intel с Mesa
Марк К. Коуэн,
этот вид работает, но приводит к зависанию всего компьютера, требуя отдельного TTY pkill на моем компьютере (арка)
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

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

ali_m
источник
Он также работает с драйверами Ubuntu 16.04, 387.26 NVIDIA.
Alejo Bernardin
Кажется, я получаю аналогичные результаты на всех своих машинах. Все они чуть выше 20 тысяч FPS. Это лимит карт Nvidia?
Аарон Франке
Я получил 47 тысяч FPS на GTX1050
drescherjm
Он работал с 13k FPS для GTX 1050 Ti в Ubuntu 18.04.
fegemo 08
Также работает на Jetson Nano. У меня примерно 2650 FPS.
robotrovsky
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графическом интерфейсе, сняв флажок с 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 (и не изменять файл конфигурации или запускать графический интерфейс). После запуска glxgearsвы можете запустить, nvidia-settings --load-config-onlyчтобы восстановить настройки конфигурации - что вы, вероятно, захотите сделать, поскольку это постоянная настройка для работающего дисплея X (то есть не только для оболочки).
Майкл Кребс
13

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

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

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

Креллан
источник
6

Отключение флажка «Синхронизировать с VBlank» в настройках nvidia (вкладка «Настройки OpenGL») помогает мне.

нейтро
источник
5

Я нашел решение, которое работает в карте Intel и карте NVIDIA с использованием Bumblebee.

> экспорт vblank_mode = 0
glxgears
...
optirun glxgears
...
экспорт vblank_mode = 1

Ольмерг
источник
2

Для драйверов Intel тоже есть такой способ

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

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

<device screen="0" driver="dri2">
    <application name="Default">
        <option name="vblank_mode" value="0"/>
    </application>
</device>
Кевинф
источник
3
Это ответ только по ссылке. Ссылки на некоторую документацию - это хорошо, но этого недостаточно, чтобы составить ответ сам по себе (также умирают ссылки, изменяются внешние страницы и т. Д.). Не могли бы вы резюмировать ключевые моменты своего ответа?
ali_m