Désactiver la synchronisation verticale pour glxgears

85

Parfois, vous devez vérifier si votre accélération Linux 3D fonctionne vraiment (en plus de la glxinfosortie). Cela peut être fait rapidement par l' glxgearsoutil. Cependant, les FPS sont souvent limités au taux de rafraîchissement vertical des affichages (c'est-à-dire 60 fps). Ainsi, l'outil devient plus ou moins inutile puisque même un rendu logiciel peut produire facilement des glxgears 60FPS sur les processeurs modernes.

J'ai eu du mal à trouver une solution rapide et facile pour cela, je réponds à ma propre question. J'espère que cela vous fera gagner du temps.

mschmoock
la source

Réponses:

119

La vblank_modevariable d'environnement fait l'affaire. Vous devriez alors obtenir plusieurs centaines de FPS sur du matériel moderne. Et vous êtes maintenant en mesure de comparer les résultats avec d'autres.

$>   vblank_mode=0 glxgears
mschmoock
la source
3
Exactement ce que je cherchais. J'obtenais 59,984 FPS, qui est le taux de rafraîchissement. Configuration vblank_mode=0J'obtiens maintenant 1375.257 FPS sur un ancien pilote vidéo Intel i965 exécutant OpenBSD 5.6.
Clint Pachl
33
Cela vaut probablement la peine de mentionner que cela ne fonctionne que pour les pilotes vidéo open source Mesa
ali_m
1
Fonctionne pour moi avec Radeon / Intel hybrid avec Mesa
Mark K Cowan
ce genre de travaux , mais se fige l'ensemble de l' ordinateur, ce qui nécessite pkill séparé ATS sur ma machine (arc)
phil294
73

Si vous utilisez les pilotes NVIDIA à source fermée, vous pouvez faire varier le mode de synchronisation verticale à la volée à l'aide de la __GL_SYNC_TO_VBLANKvariable d'environnement :

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

Cela fonctionne pour moi sur Ubuntu 14.04 en utilisant les pilotes NVIDIA 346.46.

ali_m
la source
Il fonctionne également sur les pilotes Ubuntu 16.04, 387.26 NVIDIA.
Alejo Bernardin
Je semble obtenir des résultats similaires sur toutes mes machines. Ils sont tous un peu plus de 20 000 FPS. Est-ce une limite de cartes Nvidia?
Aaron Franke
J'ai 47 mille FPS sur une GTX1050
drescherjm
Il fonctionnait avec 13k FPS pour une GTX 1050 Ti dans Ubuntu 18.04.
fegemo
Fonctionne également sur le Jetson Nano. J'obtiens environ 2650 FPS.
robotrovsky
28

Pour les graphiques Intel et les pilotes graphiques Open Source AMD / ATI

Recherchez la section "Appareil" /etc/X11/xorg.confqui contient l'une des directives suivantes:

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

Et ajoutez la ligne suivante à cette section:

Option     "SwapbuffersWait"       "false"

Et exécutez votre application avec vblank_modela variable d'environnement définie sur 0:

$ vblank_mode=0 glxgears

Pour les graphiques Nvidia avec le pilote propriétaire Nvidia

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

Le même changement peut être effectué dans l' nvidia-settingsinterface graphique en décochant l'option à X Screen 0 / OpenGL Settings / Sync to VBlank. Ou, si vous souhaitez simplement tester le paramètre sans modifier votre ~/.nvidia-settings-rcfichier, vous pouvez faire quelque chose comme:

$ 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
la source
1
Pour Nvidia, vous pouvez exécuter nvidia-settings --load-config-only --assign="SyncToVBlank=0"pour simplement modifier les paramètres de l'affichage X (et éviter de modifier le fichier de configuration ou d'exécuter l'interface graphique). Après l'exécution, glxgearsvous pouvez exécuter nvidia-settings --load-config-onlypour restaurer les paramètres de configuration - ce que vous voudrez probablement faire car c'est un paramètre persistant pour l'affichage X en cours d'exécution (c'est-à-dire pas seulement pour le shell).
Michael Krebs
13

En rassemblant les autres réponses, voici une ligne de commande qui fonctionnera:

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

Cela présente les avantages de fonctionner à la fois pour les pilotes Mesa et NVidia et de ne nécessiter aucune modification des fichiers de configuration.

Krellan
la source
6

La désactivation de la case à cocher Sync to VBlank dans nvidia-settings (onglet OpenGL Settings) fait l'affaire pour moi.

neutro
la source
5

J'ai trouvé une solution qui fonctionne dans la carte Intel et dans la carte nvidia en utilisant Bumblebee.

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

Olmerg
la source
2

Pour les pilotes Intel, il existe également cette méthode

Désactiver la synchronisation verticale (VSYNC)

Le pilote Intel utilise Triple Buffering pour la synchronisation verticale, ce qui permet des performances complètes et évite les déchirures. Pour désactiver la synchronisation verticale (par exemple pour l'analyse comparative), utilisez ce .drirc dans votre répertoire personnel:

<device screen="0" driver="dri2">
    <application name="Default">
        <option name="vblank_mode" value="0"/>
    </application>
</device>
kevinf
la source
3
Ceci est une réponse par lien uniquement. Lier à une documentation est bien beau, mais pas suffisant pour constituer une réponse en soi (les liens meurent également, les pages hébergées en externe changent, etc.). Pouvez-vous résumer les points clés de votre réponse?
ali_m