นักพัฒนาได้สร้าง lsr ซึ่งเป็นตัวแทนของคำสั่ง ls แบบดั้งเดิมของ Unix ที่ใช้อินเทอร์เฟซ io_uring ของ Linux เพื่อให้ได้ประสิทธิภาพที่ดีขึ้นอย่างมีนัยสำคัญ โปรเจกต์นี้แสดงให้เห็นว่าอินเทอร์เฟซเคอร์เนลสมัยใหม่สามารถลดการเรียกระบบและปรับปรุงความเร็วในการแสดงรายการไฟล์ได้อย่างมาก แม้ว่าจะกระตุ้นให้เกิดการอภิปรายในวงกว้างเกี่ยวกับความท้าทายในการนำ io_uring มาใช้
การเพิ่มประสิทธิภาพผ่านการลดการเรียกระบบ
การปรับปรุงที่โดดเด่นที่สุดมาจากความสามารถของ lsr ในการรวมการดำเนินการผ่าน io_uring ซึ่งลดการเรียกระบบได้ถึง 35 เท่าเมื่อเปรียบเทียบกับการใช้งานแบบดั้งเดิม เมื่อแสดงรายการไฟล์ 10,000 ไฟล์ lsr ต้องการการเรียกระบบเพียง 848 ครั้ง เทียบกับ GNU ls ที่ต้องการ 30,396 ครั้ง ซึ่งแปลเป็นการปรับปรุงความเร็วได้ 70% โดย lsr ใช้เวลาเพียง 22.1 มิลลิวินาทีเทียบกับ ls ที่ใช้เวลา 38.0 มิลลิวินาที
ข้อได้เปรียบด้านประสิทธิภาพจะชัดเจนมากขึ้นกับไดเรกทอรีขนาดใหญ่ สมาชิกชุมชนได้สังเกตว่าไดเรกทอรีที่มีไฟล์หลายล้านไฟล์ซึ่งอาจใช้เวลาหลายนาทีในการประมวลผลด้วยเครื่องมือมาตรฐาน อาจได้รับประโยชน์อย่างมากจากวิธีการนี้
การเปรียบเทียบประสิทธิภาพ (10,000 ไฟล์)
- lsr: 22.1 ms, 848 syscalls
- GNU ls: 38.0 ms, 30,396 syscalls
- busybox ls: 32.5 ms, 20,383 syscalls
- eza: 40.2 ms, 10,364 syscalls
- lsd: 153.4 ms, 100,512 syscalls
ความกังวลด้านความปลอดภัยจำกัดการนำ io_uring มาใช้
แม้จะมีประโยชน์ด้านประสิทธิภาพ แต่การอภิปรายในชุมชนเผยให้เห็นว่าทำไม io_uring จึงไม่ได้รับการนำมาใช้อย่างแพร่หลายในเครื่องมือบรรทัดคำสั่ง อินเทอร์เฟซนี้เผชิญกับปัญหาความปลอดภัยอย่างต่อเนื่อง โดยมีการค้นพบช่องโหว่เมื่อไม่กี่เดือนที่ผ่านมา องค์กรขนาดใหญ่หลายแห่งได้ปิดใช้งาน io_uring ในเคอร์เนลของพวกเขาเนื่องจากความกังวลด้านความปลอดภัย
io_uring เป็นฝันร้ายด้านความปลอดภัย
ความท้าทายด้านความปลอดภัยเกิดจากการออกแบบของ io_uring ซึ่งอนุญาตให้โปรเซสสั่งให้เคอร์เนลดำเนินการโดยไม่ต้องผ่านการเรียกระบบแบบดั้งเดิม สิ่งนี้หลีกเลี่ยงมาตรการความปลอดภัยที่มีอยู่หลายอย่างเช่นตัวกรอง seccomp ทำให้เกิดช่องทางการโจมตีใหม่ที่ทีมความปลอดภัยต้องดิ้นรนเพื่อตรวจสอบและควบคุม
ข้อจำกัดในทางปฏิบัติและความท้าทายด้านความเข้ากันได้
แม้ว่า lsr จะทำงานบนระบบ macOS และ BSD แต่ประโยชน์ของ io_uring จะใช้ได้เฉพาะกับระบบ Linux เท่านั้น ข้อจำกัดของแพลตฟอร์มนี้ร่วมกับความต้องการเคอร์เนลเวอร์ชันที่ค่อนข้างใหม่ ทำให้การนำไปใช้งานในทางปฏิบัติมีข้อจำกัด นักพัฒนาหลายคนให้ความสำคัญกับความสามารถในการพกพามากกว่าประสิทธิภาพ โดยเฉพาะสำหรับเครื่องมือพื้นฐานเช่น ls ที่ต้องทำงานในสภาพแวดล้อมที่หลากหลาย
โปรเจกต์นี้ยังเน้นให้เห็นความท้าทายทางสถาปัตยกรรมในการนำ io_uring มาใช้ เครื่องมือบรรทัดคำสั่งส่วนใหญ่ใช้การเขียนโปรแกรมแบบลำดับที่ตรงไปตรงมา แต่ io_uring ต้องการสถาปัตยกรรมแบบเหตุการณ์เพื่อให้มีประสิทธิภาพ ซึ่งหมายความว่าต้องเขียนใหม่อย่างมีนัยสำคัญมากกว่าการปรับปรุงเครื่องมือที่มีอยู่แบบง่าย ๆ
ความต้องการของระบบ
- Linux (เพื่อประโยชน์จาก io_uring)
- Zig 0.14.0 สำหรับการคอมไพล์
- ใช้งานได้บน macOS/BSD แต่ไม่ได้ประโยชน์ด้านประสิทธิภาพ
- การติดตั้ง:
zig build -Doptimize-ReleaseSmall -prefix $HOME/.local
การตอบสนองของชุมชนและผลกระทบในอนาคต
โปรเจกต์นี้ได้รับความสนใจไม่เพียงแค่จากการปรับปรุงประสิทธิภาพ แต่ยังเป็นการสาธิตศักยภาพของ io_uring สมาชิกชุมชนบางคนเรียกร้องให้มีความพยายามในการทำให้ทันสมัยในลักษณะเดียวกันกับยูทิลิตี้หลักอื่น ๆ แม้ว่าคนอื่น ๆ จะตั้งคำถามว่าความซับซ้อนและการแลกเปลี่ยนด้านความปลอดภัยนั้นคุ้มค่าหรือไม่สำหรับเครื่องมือที่ทำงานได้อย่างเพียงพออยู่แล้ว
ผู้เขียนยอมรับว่าการประหยัดเวลาในทางปฏิบัติมีน้อยมากสำหรับผู้ใช้ส่วนใหญ่ - อาจจะประมาณห้าวินาทีตลอดการใช้งานทั้งชีวิต อย่างไรก็ตาม โปรเจกต์นี้ทำหน้าที่เป็นตัวอย่างเพื่อการศึกษาว่าอินเทอร์เฟซเคอร์เนลสมัยใหม่สามารถถูกใช้ประโยชน์ได้อย่างไรหากความท้าทายของระบบนิเวศได้รับการแก้ไข
หมายเหตุ: io_uring เป็นอินเทอร์เฟซเคอร์เนล Linux ที่อนุญาตให้แอปพลิเคชันส่งการดำเนินการ I/O หลายรายการได้อย่างมีประสิทธิภาพโดยไม่ต้องทำการเรียกระบบแยกสำหรับแต่ละการดำเนินการ
อ้างอิง: lsr
![]() |
---|
ภาพหน้าจอของหน้า repository GitHub สำหรับ "targzr" ที่แสดงให้เห็นการพัฒนาที่มีความคึกคักในชุมชน open-source |