Disabilita la sincronizzazione verticale per glxgears


87

A volte è necessario verificare se l'accelerazione 3D di Linux funziona davvero (oltre glxinfoall'output). Questo può essere fatto rapidamente dallo glxgearsstrumento. Tuttavia, gli FPS sono spesso limitati alla frequenza di aggiornamento verticale del display (cioè 60 fps). Quindi lo strumento diventa più o meno inutile poiché anche un rendering software può produrre facilmente glxgears a 60FPS sulle moderne CPU.

Ho trovato piuttosto difficile ottenere una soluzione rapida e semplice per questo, rispondo alla mia stessa domanda. Si spera che ti faccia risparmiare tempo.

Risposte:


120

La vblank_modevariabile d'ambiente fa il trucco. Dovresti quindi ottenere diverse centinaia di FPS su hardware moderno. E ora puoi confrontare i risultati con gli altri.

$>   vblank_mode=0 glxgears

3
Esattamente quello che stavo cercando. Ricevo 59.984 FPS, che è la frequenza di aggiornamento. Impostazione vblank_mode=0Ora ottengo 1375.257 FPS su un vecchio driver video Intel i965 con OpenBSD 5.6.
Clint Pachl

34
Probabilmente vale la pena ricordare che funziona solo per i driver video open source Mesa
ali_m

1
Funziona per me utilizzando Radeon / Intel ibrido con Mesa
Mark K Cowan

questo tipo di funzionamento ma blocca l'intero computer, richiedendo un TTY pkill separato sulla mia macchina (arch)
phil294

75

Se stai utilizzando i driver closed-source NVIDIA puoi variare la modalità di sincronizzazione verticale al volo utilizzando la __GL_SYNC_TO_VBLANKvariabile d'ambiente :

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

Questo funziona per me su Ubuntu 14.04 utilizzando i driver NVIDIA 346.46.


Funziona anche su Ubuntu 16.04, 387.26 driver NVIDIA.
Alejo Bernardin

Mi sembra di ottenere risultati simili su tutte le mie macchine. Sono tutti un po 'sopra i 20mila FPS. È un limite per le schede Nvidia?
Aaron Franke

Ho ottenuto 47 mila FPS su una GTX1050
drescherjm

Ha funzionato con 13k FPS per una GTX 1050 Ti in Ubuntu 18.04.
fegemo

Funziona anche su Jetson Nano. Ottengo circa 2650 FPS.
robotrovsky

29

Per i driver grafici Intel e AMD / ATI opensource

Trova la sezione "Dispositivo" /etc/X11/xorg.confche contiene una delle seguenti direttive:

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

E aggiungi la seguente riga a quella sezione:

Option     "SwapbuffersWait"       "false"

Ed esegui la tua applicazione con vblank_modela variabile d'ambiente impostata su 0:

$ vblank_mode=0 glxgears

Per la grafica Nvidia con il driver Nvidia proprietario

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

La stessa modifica può essere apportata nella nvidia-settingsGUI deselezionando l'opzione in X Screen 0 / OpenGL Settings / Sync to VBlank. Oppure, se desideri solo testare l'impostazione senza modificare il tuo ~/.nvidia-settings-rcfile, puoi fare qualcosa come:

$ 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
Per Nvidia puoi eseguire nvidia-settings --load-config-only --assign="SyncToVBlank=0"solo per modificare le impostazioni del display X (ed evitare di modificare il file di configurazione o eseguire la GUI). Dopo l'esecuzione glxgearspuoi eseguire nvidia-settings --load-config-onlyper ripristinare le impostazioni di configurazione - cosa che probabilmente vorrai fare poiché è un'impostazione persistente per il display X in esecuzione (cioè non solo per la shell).
Michael Krebs

13

Mettendo insieme le altre risposte, ecco una riga di comando che funzionerà:

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

Questo ha il vantaggio di funzionare sia per i driver Mesa che per NVidia e non richiede alcuna modifica ai file di configurazione.


6

Disabilitare la casella di controllo Sincronizza con VBlank in nvidia-settings (scheda Impostazioni OpenGL) fa il trucco per me.


5

Ho trovato una soluzione che funziona nella scheda Intel e nella scheda NVIDIA utilizzando Bumblebee.

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


2

Per i driver Intel, esiste anche questo metodo

Disabilita sincronizzazione verticale (VSYNC)

L'intel-driver utilizza il Triple Buffering per la sincronizzazione verticale, questo consente prestazioni complete ed evita lo strappo. Per disattivare la sincronizzazione verticale (ad esempio per il benchmarking) usa questo .drirc nella tua home directory:

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

3
Questa è una risposta di solo collegamento. Il collegamento ad un po 'di documentazione va benissimo, ma non abbastanza da costituire una risposta da solo (anche i collegamenti muoiono, le pagine ospitate esternamente cambiano ecc.). Potresti riassumere i punti chiave nella tua risposta?
ali_m
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.