ปิดใช้งานการซิงค์แนวตั้งสำหรับ glxgears


87

บางครั้งคุณต้องตรวจสอบว่าการเร่งความเร็ว Linux 3D ของคุณใช้งานได้จริงหรือไม่ (นอกเหนือจากglxinfoเอาต์พุต) ซึ่งสามารถทำได้อย่างรวดเร็วโดยglxgearsเครื่องมือ อย่างไรก็ตาม FPS มักถูก จำกัด ไว้ที่อัตราการรีเฟรชในแนวตั้ง (เช่น 60 fps) ดังนั้นเครื่องมือจึงไร้ประโยชน์มากขึ้นหรือน้อยลงเนื่องจากแม้แต่การเรนเดอร์ซอฟต์แวร์ก็สามารถสร้าง glxgears 60FPS ได้อย่างง่ายดายบน CPU สมัยใหม่

ฉันพบว่ามันค่อนข้างยากที่จะหาวิธีแก้ปัญหาที่ง่ายและรวดเร็วสำหรับเรื่องนี้ฉันตอบคำถามของตัวเอง หวังว่าจะช่วยประหยัดเวลาของคุณ

คำตอบ:


120

vblank_modeตัวแปรสภาพแวดล้อมไม่หลอกลวง จากนั้นคุณควรได้รับ FPS หลายร้อยบนฮาร์ดแวร์ที่ทันสมัย และตอนนี้คุณสามารถเปรียบเทียบผลลัพธ์กับผู้อื่นได้แล้ว

$>   vblank_mode=0 glxgears

3
สิ่งที่ฉันกำลังมองหา ฉันได้รับ 59.984 FPS ซึ่งเป็นอัตราการรีเฟรช การตั้งค่าvblank_mode=0ตอนนี้ฉันได้รับ 1375.257 FPS บนไดรเวอร์วิดีโอ Intel i965 รุ่นเก่าที่ใช้ OpenBSD 5.6
— Clint Pachl

34
อาจเป็นเรื่องที่ควรค่าแก่การกล่าวถึงว่าใช้งานได้กับไดรเวอร์วิดีโอโอเพนซอร์สของ Mesa เท่านั้น
— ali_m

1
ใช้งานได้สำหรับฉันโดยใช้ Radeon / Intel hybrid กับ Mesa
— Mark K Cowan

ทำงานแบบนี้ แต่ค้างคอมพิวเตอร์ทั้งเครื่องโดยต้องแยก TTY pkill ในเครื่องของฉัน (arch)
— phil294

75

หากคุณใช้ไดรเวอร์ NVIDIA แบบปิดคุณสามารถเปลี่ยนโหมดการซิงค์แนวตั้งได้ทันทีโดยใช้__GL_SYNC_TO_VBLANKตัวแปรสภาพแวดล้อม :

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

สิ่งนี้ใช้ได้กับฉันบน Ubuntu 14.04 โดยใช้ไดรเวอร์ NVIDIA 346.46


นอกจากนี้ยังทำงานบนไดรเวอร์ Ubuntu 16.04, 387.26 NVIDIA
— Alejo Bernardin

ดูเหมือนว่าฉันจะได้ผลลัพธ์ที่คล้ายกันในทุกเครื่องของฉัน พวกมันทั้งหมดสูงกว่า 20,000 FPS เล็กน้อย การ์ด Nvidia มีขีด จำกัด หรือไม่
— Aaron Franke

ฉันได้รับ 47,000 FPS บน GTX1050
— drescherjm

ทำงานร่วมกับ 13k FPS สำหรับ GTX 1050 Ti ใน Ubuntu 18.04
— fegemo

ยังทำงานบน Jetson Nano ฉันได้รับประมาณ 2650 FPS
— robotrovsky

29

สำหรับไดรเวอร์กราฟิก Intel graphics และ AMD / ATI opensource

ค้นหาส่วน "อุปกรณ์" /etc/X11/xorg.confซึ่งมีหนึ่งในคำสั่งต่อไปนี้:

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

และเพิ่มบรรทัดต่อไปนี้ในส่วนนั้น:

Option     "SwapbuffersWait"       "false"

และเรียกใช้แอปพลิเคชันของคุณโดยvblank_modeตั้งค่าตัวแปรสภาพแวดล้อมเป็น0:

$ vblank_mode=0 glxgears

สำหรับกราฟิก Nvidia พร้อมไดรเวอร์ Nvidia ที่เป็นกรรมสิทธิ์

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

การเปลี่ยนแปลงเดียวกันสามารถทำได้ในnvidia-settingsGUI โดยยกเลิกการเลือกตัวเลือกที่X Screen 0 / OpenGL Settings / Sync to VBlank. หรือหากคุณต้องการทดสอบการตั้งค่าโดยไม่ต้องแก้ไข~/.nvidia-settings-rcไฟล์ของคุณคุณสามารถดำเนินการดังนี้:

$ 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"เพื่อเปลี่ยนการตั้งค่าของจอแสดงผล X (และหลีกเลี่ยงการแก้ไขไฟล์กำหนดค่าหรือเรียกใช้ GUI) หลังจากเรียกใช้glxgearsคุณสามารถเรียกnvidia-settings --load-config-onlyคืนการตั้งค่าการกำหนดค่าซึ่งคุณอาจต้องการทำเนื่องจากเป็นการตั้งค่าถาวรสำหรับการแสดงผล X ที่กำลังทำงานอยู่ (เช่นไม่ใช่เฉพาะสำหรับเชลล์)
— Michael Krebs

13

เมื่อนำคำตอบอื่น ๆ มารวมกันนี่คือบรรทัดคำสั่งที่ใช้งานได้:

env vblank_mode=0 __GL_SYNC_TO_VBLANK=0 glxgears

สิ่งนี้มีข้อดีของการทำงานสำหรับทั้งไดรเวอร์ Mesa และ NVidia และไม่ต้องการการเปลี่ยนแปลงใด ๆ กับไฟล์การกำหนดค่า


6

การปิดใช้งานช่องทำเครื่องหมาย Sync to VBlank ใน nvidia-settings (แท็บ OpenGL Settings) เป็นเคล็ดลับสำหรับฉัน


5

ฉันพบวิธีแก้ปัญหาที่ใช้งานได้ในการ์ด intel และในการ์ด nvidia โดยใช้ Bumblebee

> ส่งออก vblank_mode = 0
glxgears
...
optirun glxgears
...
ส่งออก vblank_mode = 1


2

สำหรับไดรเวอร์ intel ก็มีวิธีนี้เช่นกัน

ปิดใช้งานการซิงโครไนซ์แนวตั้ง (VSYNC)

ไดร์เวอร์ intel ใช้ Triple Buffering สำหรับการซิงโครไนซ์แนวตั้งซึ่งช่วยให้ทำงานได้เต็มประสิทธิภาพและหลีกเลี่ยงการฉีกขาด หากต้องการปิดการซิงโครไนซ์แนวตั้ง (เช่นสำหรับการเปรียบเทียบ) ให้ใช้. drirc นี้ในโฮมไดเร็กทอรีของคุณ:

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

3
นี่คือคำตอบแบบลิงก์เท่านั้น การเชื่อมโยงไปยังเอกสารบางส่วนเป็นสิ่งที่ดีและดี แต่ไม่เพียงพอที่จะสร้างคำตอบด้วยตัวมันเอง (เช่นลิงก์ตายหน้าที่โฮสต์ภายนอกเปลี่ยนเป็นต้น) คุณช่วยสรุปประเด็นสำคัญในคำตอบของคุณได้ไหม
— ali_m
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.