Glxgears için dikey senkronizasyonu devre dışı bırakın


87

Bazen, Linux 3D hızlandırmanızın gerçekten çalışıp çalışmadığını kontrol etmeniz gerekir ( glxinfoçıktının yanı sıra ). Bu, glxgearsaraçla hızlı bir şekilde yapılabilir . Bununla birlikte, FPS genellikle ekran dikey yenileme hızı (yani 60 fps) ile sınırlıdır. Bu nedenle, bir yazılım oluşturucu bile modern CPU'larda kolayca 60FPS glxgears üretebildiğinden, araç az çok işe yaramaz hale gelir.

Bunun için hızlı ve kolay bir çözüm bulmayı oldukça zor buldum, kendi soruma cevap veriyorum. Umarım zaman kazandırır.

Yanıtlar:


120

vblank_modeOrtam değişkeni hile yok. Daha sonra modern donanımda birkaç yüz FPS almalısınız. Ve artık sonuçları başkalarıyla karşılaştırabilirsiniz.

$>   vblank_mode=0 glxgears

3
Tam olarak aradığım şey. Yenileme hızı olan 59.984 FPS alıyordum. Ayar vblank_mode=0Şimdi OpenBSD 5.6 çalıştıran eski bir Intel i965 video sürücüsünde 1375.257 FPS alıyorum.
Clint Pachl

33
Bu sadece Mesa açık kaynaklı sürücü için çalışır söz değer demektir
ali_m

1
Mesa ile Radeon / Intel hibrit kullanarak benim için çalışıyor
Mark K Cowan

bu tür çalışır, ancak tüm bilgisayarı dondurur, makinemde ayrı TTY
pkill'i

75

NVIDIA kapalı kaynak sürücülerini kullanıyorsanız, __GL_SYNC_TO_VBLANKortam değişkenini kullanarak dikey senkronizasyon modunu anında değiştirebilirsiniz :

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

Bu, 346.46 NVIDIA sürücülerini kullanarak Ubuntu 14.04'te benim için çalışıyor.


Ayrıca Ubuntu 16.04, 387.26 NVIDIA sürücülerinde de çalışır.
Alejo Bernardin

Tüm makinelerimde benzer sonuçlar alıyorum. Hepsi 20 bin FPS'nin biraz üzerinde. Bu bir Nvidia kart sınırı mı?
Aaron Franke

GTX1050'de 47 bin FPS aldım
drescherjm

Ubuntu 18.04'te GTX 1050 Ti için 13k FPS ile çalıştı.
fegemo

Jetson Nano'da da çalışır. Yaklaşık 2650 FPS alıyorum.
robotrovsky

29

Intel grafikleri ve AMD / ATI açık kaynaklı grafik sürücüleri için

/etc/X11/xorg.confAşağıdaki yönergelerden birini içeren "Aygıt" bölümünü bulun :

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

Ve bu bölüme aşağıdaki satırı ekleyin:

Option     "SwapbuffersWait"       "false"

Ve uygulamanızı vblank_modeortam değişkeni şu şekilde ayarlanmış şekilde çalıştırın 0:

$ vblank_mode=0 glxgears

Tescilli Nvidia sürücüsüne sahip Nvidia grafikleri için

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

Aynı değişiklik nvidia-settingsGUI'de seçeneğinin işareti kaldırılarak da yapılabilir X Screen 0 / OpenGL Settings / Sync to VBlank. Veya, ayarınızı ~/.nvidia-settings-rcdosyanızı değiştirmeden test etmek isterseniz, aşağıdaki gibi bir şey yapabilirsiniz:

$ 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
Nvidia nvidia-settings --load-config-only --assign="SyncToVBlank=0"için yalnızca X ekranının ayarlarını değiştirmek için çalıştırabilirsiniz (ve yapılandırma dosyasını değiştirmekten veya GUI'yi çalıştırmaktan kaçının). glxgearsÇalıştırdıktan sonra nvidia-settings --load-config-only, yapılandırma ayarlarını geri yüklemek için çalıştırabilirsiniz - bu, çalışan X ekranı için kalıcı bir ayar olduğundan (yani sadece kabuk için değil) muhtemelen yapmak isteyeceksiniz.
Michael Krebs

13

Diğer yanıtları bir araya getirsek işte işe yarayacak bir komut satırı:

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

Bunun hem Mesa hem de NVidia sürücüleri için çalışmanın avantajları vardır ve yapılandırma dosyalarında herhangi bir değişiklik gerektirmez.


6

Nvidia ayarlarında (OpenGL Ayarları sekmesi) VBlank ile Eşitle onay kutusunu devre dışı bırakmak benim için hile yapıyor.


5

Bumblebee kullanarak intel kartta ve nvidia kartında çalışan bir çözüm buldum.

> vblank_mode dışa aktar = 0
glxgears
...
optirun glxgears
...
vblank_mode dışa aktar = 1


2

Intel sürücüleri için bu yöntem de var

Dikey Senkronizasyonu (VSYNC) Devre Dışı Bırak

Intel sürücü, dikey senkronizasyon için Üçlü Tamponlama kullanır, bu tam performansa izin verir ve yırtılmayı önler. Dikey senkronizasyonu kapatmak için (örneğin kıyaslama için) ana dizininizde bu .drirc dosyasını kullanın:

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

3
Bu yalnızca bağlantı içeren bir yanıttır. Bazı belgelere bağlantı vermek tamamen iyi ve iyidir, ancak tek başına bir yanıt oluşturmak için yeterli değildir (bağlantılar da kesilir, harici olarak barındırılan sayfalar değişir vb.). Cevabınızdaki kilit noktaları özetleyebilir misiniz?
ali_m
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.