Deaktivieren Sie die vertikale Synchronisierung für glxgears

85

Manchmal müssen Sie überprüfen, ob Ihre Linux 3D-Beschleunigung wirklich funktioniert (neben der glxinfoAusgabe). Dies kann vom glxgearsWerkzeug schnell erledigt werden . Die FPS sind jedoch häufig auf die vertikale Bildwiederholfrequenz der Anzeigen beschränkt (dh 60 fps). So wird das Tool mehr oder weniger nutzlos, da selbst ein Software-Rendering auf modernen CPUs problemlos 60-fps-Glxgears erzeugen kann.

Ich fand es ziemlich schwierig, eine schnelle und einfache Lösung dafür zu finden. Ich beantworte meine eigene Frage. Hoffentlich spart es Ihre Zeit.

mschmoock
quelle

Antworten:

117

Die vblank_modeUmgebungsvariable macht den Trick. Sie sollten dann mehrere hundert FPS auf moderner Hardware erhalten. Und Sie können jetzt die Ergebnisse mit anderen vergleichen.

$>   vblank_mode=0 glxgears
mschmoock
quelle
3
Genau das, wonach ich gesucht habe. Ich habe 59.984 FPS erhalten, was der Bildwiederholfrequenz entspricht. Einstellung vblank_mode=0Ich erhalte jetzt 1375,257 FPS auf einem alten Intel i965-Grafiktreiber mit OpenBSD 5.6.
Clint Pachl
32
Es ist wahrscheinlich erwähnenswert, dass dies nur für die Open-Source-
Videotreiber von
1
Funktioniert für mich mit Radeon / Intel Hybrid mit Mesa
Mark K Cowan
Diese Art von funktioniert, friert aber den gesamten Computer ein und erfordert einen separaten TTY-Pkill auf meinem Computer (Bogen)
phil294
73

Wenn Sie die NVIDIA-Closed-Source-Treiber verwenden, können Sie den vertikalen Synchronisierungsmodus im laufenden Betrieb mithilfe der __GL_SYNC_TO_VBLANKUmgebungsvariablen ändern :

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

Dies funktioniert für mich unter Ubuntu 14.04 mit den 346.46 NVIDIA-Treibern.

ali_m
quelle
Es funktioniert auch mit Ubuntu 16.04, 387.26 NVIDIA-Treibern.
Alejo Bernardin
Ich scheine auf allen meinen Maschinen ähnliche Ergebnisse zu erzielen. Sie sind alle etwas über 20.000 FPS. Ist dies ein Limit für Nvidia-Karten?
Aaron Franke
Ich habe 47.000 FPS auf einem GTX1050
drescherjm
Es funktionierte mit 13k FPS für eine GTX 1050 Ti in Ubuntu 18.04.
Fegemo
Funktioniert auch auf dem Jetson Nano. Ich bekomme ungefähr 2650 FPS.
Robotrovsky
28

Für Intel-Grafik- und AMD / ATI-OpenSource-Grafiktreiber

Suchen Sie den Abschnitt "Gerät", der /etc/X11/xorg.confeine der folgenden Anweisungen enthält:

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

Fügen Sie diesem Abschnitt die folgende Zeile hinzu:

Option     "SwapbuffersWait"       "false"

Führen Sie Ihre Anwendung mit der vblank_modeUmgebungsvariablen aus, die auf Folgendes festgelegt ist 0:

$ vblank_mode=0 glxgears

Für Nvidia-Grafiken mit dem proprietären Nvidia-Treiber

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

Die gleiche Änderung kann in der nvidia-settingsGUI vorgenommen werden, indem die Option unter deaktiviert wird X Screen 0 / OpenGL Settings / Sync to VBlank. Wenn Sie die Einstellung nur testen möchten, ohne Ihre ~/.nvidia-settings-rcDatei zu ändern, können Sie Folgendes tun:

$ 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
quelle
1
Für Nvidia können Sie nvidia-settings --load-config-only --assign="SyncToVBlank=0"nur die Einstellungen der X-Anzeige ändern (und vermeiden, die Konfigurationsdatei zu ändern oder die GUI auszuführen ). Nach dem Ausführen können glxgearsSie ausführen nvidia-settings --load-config-only, um die Konfigurationseinstellungen wiederherzustellen. Dies möchten Sie wahrscheinlich tun, da dies eine dauerhafte Einstellung für die laufende X-Anzeige ist (dh nicht nur für die Shell).
Michael Krebs
13

Wenn Sie die anderen Antworten zusammenfassen, ist hier eine Befehlszeile, die funktioniert:

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

Dies hat den Vorteil, dass sowohl für Mesa- als auch für NVidia-Treiber gearbeitet werden kann und keine Änderungen an den Konfigurationsdateien erforderlich sind.

Krellan
quelle
6

Das Deaktivieren des Kontrollkästchens Mit VBlank synchronisieren in den nvidia-Einstellungen (Registerkarte OpenGL-Einstellungen) macht den Trick für mich.

Neutro
quelle
5

Ich habe mit Bumblebee eine Lösung gefunden, die in der Intel-Karte und in der NVIDIA-Karte funktioniert.

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

olmerg
quelle
2

Für Intel-Treiber gibt es auch diese Methode

Deaktivieren Sie die vertikale Synchronisation (VSYNC)

Der Intel-Treiber verwendet Triple Buffering für die vertikale Synchronisation. Dies ermöglicht volle Leistung und vermeidet ein Zerreißen. Verwenden Sie diese .drirc in Ihrem Home-Verzeichnis, um die vertikale Synchronisation zu deaktivieren (z. B. für das Benchmarking):

<device screen="0" driver="dri2">
    <application name="Default">
        <option name="vblank_mode" value="0"/>
    </application>
</device>
Kevinf
quelle
3
Dies ist eine reine Linkantwort. Das Verknüpfen mit einigen Dokumentationen ist gut und schön, reicht jedoch nicht aus, um eine Antwort für sich zu bilden (auch Links sterben, Änderungen an extern gehosteten Seiten usw.). Könnten Sie bitte die wichtigsten Punkte Ihrer Antwort zusammenfassen?
Ali_m