Wyłącz synchronizację pionową dla przekładni glxgears

85

Czasami musisz sprawdzić, czy akceleracja 3D w Linuksie naprawdę działa (poza glxinfowyjściem). Można to szybko zrobić za pomocą glxgearsnarzędzia. Jednak FPS są często ograniczone do pionowej częstotliwości odświeżania wyświetlaczy (tj. 60 fps). Narzędzie staje się więc mniej lub bardziej bezużyteczne, ponieważ nawet renderowanie programowe może łatwo generować przekładnie glxgears 60 klatek na sekundę na nowoczesnych procesorach.

Trudno mi było znaleźć szybkie i łatwe rozwiązanie tego problemu, odpowiadam na własne pytanie. Miejmy nadzieję, że zaoszczędzi to Twój czas.

mschmoock
źródło

Odpowiedzi:

119

vblank_modeZmienna środowiskowa załatwia sprawę. Powinieneś wtedy uzyskać kilkaset FPS na nowoczesnym sprzęcie. Teraz możesz porównać wyniki z innymi.

$>   vblank_mode=0 glxgears
mschmoock
źródło
3
Dokładnie to, czego szukałem. Otrzymywałem 59,984 FPS, czyli częstotliwość odświeżania. Ustawienie vblank_mode=0Otrzymuję teraz 1375,257 FPS na starym sterowniku wideo Intel i965 z OpenBSD 5.6.
Clint Pachl
33
Prawdopodobnie warto wspomnieć, że działa to tylko w przypadku sterowników wideo typu open source Mesa
ali_m
1
Działa dla mnie przy użyciu hybrydy Radeon / Intel z Mesą
Mark K Cowan
ten rodzaj działa, ale zawiesza cały komputer, wymagając oddzielnego TTY pkill na moim komputerze (arch)
phil294
73

Jeśli używasz zamkniętych sterowników NVIDIA, możesz zmieniać tryb synchronizacji pionowej w locie za pomocą __GL_SYNC_TO_VBLANKzmiennej środowiskowej :

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

Działa to dla mnie na Ubuntu 14.04 przy użyciu sterowników 346.46 NVIDIA.

ali_m
źródło
Działa również na sterownikach Ubuntu 16.04, 387.26 NVIDIA.
Alejo Bernardin
Wydaje się, że osiągam podobne wyniki na wszystkich moich komputerach. Wszystkie mają nieco ponad 20 tysięcy FPS. Czy to jest limit kart Nvidii?
Aaron Franke
Osiągnąłem 47 tysięcy FPS na GTX1050
drescherjm
Działał z 13k FPS dla GTX 1050 Ti w Ubuntu 18.04.
fegemo
Działa również na Jetson Nano. Dostaję około 2650 FPS.
robotrovsky
28

Dla kart graficznych Intel i sterowników kart graficznych AMD / ATI opensource

Znajdź sekcję „Urządzenie”, /etc/X11/xorg.confktóra zawiera jedną z następujących dyrektyw:

  • Driver "intel"
  • Driver "radeon"
  • Driver "fglrx"

I dodaj następujący wiersz do tej sekcji:

Option     "SwapbuffersWait"       "false"

I uruchom aplikację ze vblank_modezmienną środowiskową ustawioną na 0:

$ vblank_mode=0 glxgears

Dla grafiki Nvidia z zastrzeżonym sterownikiem Nvidia

$ echo "0/SyncToVBlank=0" >> ~/.nvidia-settings-rc

Tę samą zmianę można wprowadzić w nvidia-settingsinterfejsie GUI, odznaczając opcję w X Screen 0 / OpenGL Settings / Sync to VBlank. Lub, jeśli chcesz po prostu przetestować ustawienie bez modyfikowania ~/.nvidia-settings-rcpliku, możesz zrobić coś takiego:

$ 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
nocnokneo
źródło
1
W przypadku Nvidii możesz uruchomić, nvidia-settings --load-config-only --assign="SyncToVBlank=0"aby po prostu zmienić ustawienia wyświetlacza X (i uniknąć modyfikowania pliku konfiguracyjnego lub uruchamiania GUI). Po uruchomieniu glxgearsmożesz uruchomić, nvidia-settings --load-config-onlyaby przywrócić ustawienia konfiguracyjne - co prawdopodobnie będziesz chciał zrobić, ponieważ jest to trwałe ustawienie dla działającego wyświetlacza X (tj. Nie tylko dla powłoki).
Michael Krebs,
13

Łącząc wszystkie inne odpowiedzi, oto wiersz poleceń, który będzie działać:

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

Ma to zalety, ponieważ działa zarówno ze sterownikami Mesa, jak i NVidia i nie wymaga żadnych zmian w plikach konfiguracyjnych.

Krellan
źródło
6

Wyłączenie pola wyboru Synchronizuj z VBlank w ustawieniach nvidia (karta Ustawienia OpenGL) załatwia sprawę.

neutro
źródło
5

Znalazłem rozwiązanie, które działa na karcie intel i na karcie nvidia przy użyciu Bumblebee.

> eksport vblank_mode = 0
glxgears
...
optirun glxgears
...
eksport vblank_mode = 1

olmerg
źródło
2

W przypadku sterowników Intel istnieje również ta metoda

Wyłącz synchronizację pionową (VSYNC)

Sterownik Intel używa potrójnego buforowania do synchronizacji pionowej, co pozwala na pełną wydajność i zapobiega rozdzieraniu. Aby wyłączyć synchronizację pionową (np. Do testów porównawczych), użyj tego .drirc w swoim katalogu domowym:

<device screen="0" driver="dri2">
    <application name="Default">
        <option name="vblank_mode" value="0"/>
    </application>
</device>
kevinf
źródło
3
To jest odpowiedź zawierająca tylko łącze. Łączenie do niektórych dokumentów jest dobre i dobre, ale nie wystarcza, aby stanowić odpowiedź samo w sobie (również linki umierają, zmieniają się strony hostowane na zewnątrz itp.). Czy mógłbyś podsumować kluczowe punkty swojej odpowiedzi?
ali_m