ปิดใช้งานการซิงค์แนวตั้งสำหรับ 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.