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.

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

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.


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

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.


6

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


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


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>

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.