Desativar sincronização vertical para glxgears

87

Às vezes você precisa verificar se a aceleração 3D do Linux está realmente funcionando (além da glxinfosaída). Isso pode ser feito rapidamente pela glxgearsferramenta. No entanto, os FPS são frequentemente limitados à taxa de atualização vertical da tela (ou seja, 60 fps). Portanto, a ferramenta se torna mais ou menos inútil, já que até mesmo um software de renderização pode produzir glxgears a 60FPS facilmente em CPUs modernas.

Achei bastante difícil encontrar uma solução rápida e fácil para isso, eu respondo minha própria pergunta. Esperançosamente, isso economiza seu tempo.

mschmoock
fonte

Respostas:

120

A vblank_modevariável de ambiente faz o truque. Você deve obter várias centenas de FPS em hardware moderno. E agora você pode comparar os resultados com outros.

$>   vblank_mode=0 glxgears
mschmoock
fonte
3
Exatamente o que eu estava procurando. Eu estava obtendo 59,984 FPS, que é a taxa de atualização. Configuração vblank_mode=0Agora estou obtendo 1375,257 FPS em um driver de vídeo Intel i965 antigo executando o OpenBSD 5.6.
Clint Pachl
33
Provavelmente vale a pena mencionar que isso só funciona para os drivers de vídeo de código aberto Mesa
ali_m
1
Funciona para mim usando híbrido Radeon / Intel com Mesa
Mark K Cowan
este tipo de funciona, mas congela todo o computador, exigindo TTY pkill separado em minha máquina (arch)
phil294
75

Se estiver usando os drivers de código fechado da NVIDIA, você pode variar o modo de sincronização vertical em tempo real usando a __GL_SYNC_TO_VBLANKvariável de 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

Isso funciona para mim no Ubuntu 14.04 usando os drivers 346.46 NVIDIA.

ali_m
fonte
Ele também funciona nos drivers da NVIDIA Ubuntu 16.04, 387.26.
Alejo Bernardin
Parece que obtenho resultados semelhantes em todas as minhas máquinas. Estão todos um pouco acima de 20 mil FPS. Este é um limite de placas Nvidia?
Aaron Franke
Consegui 47 mil FPS em uma GTX1050
drescherjm de
Funcionou com 13k FPS para uma GTX 1050 Ti no Ubuntu 18.04.
fegemo
Também funciona no Jetson Nano. Recebo cerca de 2650 FPS.
robotrovsky
29

Para gráficos Intel e drivers gráficos de código aberto AMD / ATI

Encontre a seção "Dispositivo" /etc/X11/xorg.confque contém uma das seguintes diretivas:

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

E adicione a seguinte linha a essa seção:

Option     "SwapbuffersWait"       "false"

E execute seu aplicativo com vblank_modea variável de ambiente definida como 0:

$ vblank_mode=0 glxgears

Para gráficos Nvidia com o driver proprietário Nvidia

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

A mesma alteração pode ser feita na nvidia-settingsGUI desmarcando a opção em X Screen 0 / OpenGL Settings / Sync to VBlank. Ou, se quiser apenas testar a configuração sem modificar seu ~/.nvidia-settings-rcarquivo, você pode fazer algo como:

$ 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
fonte
1
Para Nvidia, você pode executar nvidia-settings --load-config-only --assign="SyncToVBlank=0"apenas para alterar as configurações do monitor X (e evitar modificar o arquivo de configuração ou executar a GUI). Depois de executar, glxgearsvocê pode executar nvidia-settings --load-config-onlypara restaurar as configurações - o que você provavelmente desejará fazer, pois é uma configuração persistente para a exibição do X em execução (ou seja, não apenas para o shell).
Michael Krebs
13

Juntando as outras respostas, aqui está uma linha de comando que funcionará:

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

Isso tem a vantagem de funcionar com os drivers Mesa e NVidia e não requer nenhuma alteração nos arquivos de configuração.

Krellan
fonte
6

Desativar a caixa de seleção Sync to VBlank em nvidia-settings (guia OpenGL Settings) resolve o problema para mim.

neutro
fonte
5

Eu encontrei uma solução que funciona na placa intel e na placa nvidia usando Bumblebee.

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

Olmerg
fonte
2

Para drivers Intel, também existe este método

Desativar sincronização vertical (VSYNC)

O intel-driver usa Triple Buffering para sincronização vertical, isso permite desempenho total e evita tearing. Para desligar a sincronização vertical (por exemplo, para benchmarking), use este .drirc em seu diretório inicial:

<device screen="0" driver="dri2">
    <application name="Default">
        <option name="vblank_mode" value="0"/>
    </application>
</device>
kevinf
fonte
3
Esta é uma resposta apenas com link. O link para alguma documentação é muito bom, mas não o suficiente para constituir uma resposta por si só (também os links morrem, páginas hospedadas externamente mudam etc.). Você poderia resumir os pontos principais em sua resposta?
ali_m