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


85

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

Мені було досить важко знайти швидке та просте рішення для цього, я відповідаю на власне запитання. Сподіваємось, це економить ваш час.

Відповіді:


119

vblank_modeЗмінна середовища робить трюк. Потім ви повинні отримати кілька сотень кадрів в секунду на сучасному обладнанні. І тепер ви можете порівняти результати з іншими.

$>   vblank_mode=0 glxgears

3
Саме те, що я шукав. Я отримував 59,984 FPS, що є частотою оновлення. Налаштування. vblank_mode=0Зараз я отримую 1375,257 FPS на старому відеодрайвері Intel i965 під управлінням OpenBSD 5.6.
Клінт Пахль,

33
Напевно, варто згадати, що це працює лише для відеодрайверів з відкритим кодом Mesa
ali_m

1
Мені працює для використання гібриду Radeon / Intel з Mesa
Mark K Cowan

цей вид працює, але заморожує весь комп’ютер, вимагаючи окремого 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.


Він також працює на драйверах Ubuntu 16.04, 387.26 NVIDIA.
Alejo Bernardin

Здається, я отримую подібні результати на всіх своїх машинах. Вони всі трохи вище 20 тисяч кадрів в секунду. Це обмеження для карток Nvidia?
Аарон Франке,

Я отримав 47 тисяч кадрів в секунду на GTX1050
drescherjm

Він працював із 13k FPS для GTX 1050 Ti в Ubuntu 18.04.
fegemo

Також працює над Jetson Nano. Я отримую приблизно 2650 кадрів в секунду.
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 (тобто не тільки для оболонки).
Michael Krebs

13

Поклавши всі відповіді разом, ось командний рядок, який буде працювати:

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

Це має переваги роботи як для драйверів Mesa, так і для NVidia, і не вимагає жодних змін у файлах конфігурації.


6

Вимкнення прапорця Sync to VBlank у nvidia-settings (вкладка OpenGL Settings) робить для мене фокус.


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.