ในขณะที่หน้าต่างการรวม Linux 6.4 กำลังจะปิดในสุดสัปดาห์นี้ วันนี้ในวันสุดท้ายของช่วงเวลา Jens Axboe ส่งไพพ์การสนับสนุน FMODE_NOWAIT ซึ่งเป็นสิ่งที่เขาอธิบายว่าเป็นการปรับปรุงประสิทธิภาพและประสิทธิภาพครั้งใหญ่

ด้วยรูปแบบก่อนหน้าของ FMODE_NOWAIT ที่รองรับไปป์ แพตช์ Axboe อธิบายว่า:

“สิ่งหนึ่งที่ช้ากว่าที่ฉันต้องการเสมอสำหรับ io_uring คือการจัดการกับไพพ์ พวกเขาไม่รองรับ IOCB_NOWAIT ดังนั้นเราจำเป็นต้องถ่อไปที่ io-wq สำหรับการจัดการ ซีรีส์นี้เพิ่มการรองรับ FMODE_NOWAIT ให้กับไพพ์”

แต่สิ่งที่น่าสนใจจริงๆ คือขนาดของประสิทธิภาพ/ประสิทธิภาพที่ได้รับจากมัน:

“อยากรู้ว่าเป็นอย่างไร ฉันเขียนเกณฑ์มาตรฐานเล็ก ๆ ที่เปิด 128 ไปป์ จากนั้นทำการอ่านและเขียน 256 รอบ สิ่งนี้ถูกรัน 10 ครั้ง ละทิ้งการรันครั้งแรกเพราะมันช้ากว่าเล็กน้อยเสมอ ก่อนแพตช์:

เฉลี่ย: 262.52 msec
Stdev: 2.12 msec
ต่ำสุด: 261.07 msec
สูงสุด 267.91 msec

และหลังแพทช์:

เฉลี่ย: 24.14 msec
Stdev: 9.61 msec
ต่ำสุด: 17.84 msec
สูงสุด: 43.75 มิลลิวินาที

หรือปรับปรุงประสิทธิภาพ (และประสิทธิภาพ) ประมาณ 10 เท่า

ฉันรันแพตช์ผ่านท่อ ltp และการทดสอบการประกบ ไม่พบการถดถอย เมื่อดูที่การติดตาม io_uring เราจะเห็นว่าเราไม่มีการติดตาม io_uring_queue_async_work() อีกต่อไปหลังจากแพตช์ ซึ่งก่อนหน้านี้ทุกอย่างดำเนินการผ่าน io-wq”

ต่อมา เพิ่มในชุดแพทช์นั้น:

“ด้านบน การทดสอบใช้สำหรับไพพ์ที่ว่างเปล่าเมื่อมีการอ่าน หากการทดสอบถูกเปลี่ยนให้มีข้อมูลเมื่อใด ก็จะดูดียิ่งขึ้น:

ก่อน:

Avg: 249.24 msec
Stdev: 0.20 msec
ต่ำสุด: 248.96 msec
สูงสุด: 249.53 msec

หลัง:

เฉลี่ย: 10.86 msec
Stdev: 0.91 msec
ต่ำสุด: 10.02 msec
สูงสุด: 12.67 มิลลิวินาที

หรือประมาณการปรับปรุง 23 เท่า”

แพตช์ที่ตั้งค่าไว้สำหรับการรวมเข้ากับ Linux 6.4 ตั้งค่าให้ FMODE_NOWAIT รองรับไพพ์ แต่ปิดใช้งานหากใช้ ประกบ/vmsplice บนท่อ คำขอดึงข้อมูลนี้คือสิ่งที่เกิดขึ้นแล้ว รอการสนับสนุนไปป์ FMODE_NOWAIT

Categories: IT Info