Вимкнути вертикальну синхронізацію для 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.