1. ภาพรวมและวัตถุประสงค์ของโครงการ
Eta Labs ได้เปรียบเทียบอิมพลีเมนเทชันของไลบรารีมาตรฐาน C/POSIX สำหรับ Linux โดยเน้นที่ความสามารถในการใช้งานและความเบา (“bloat”) เป็นหลัก โดยมีตัวที่นำมาเปรียบเทียบคือ musl, uClibc, dietlibc และ glibc และมีแผนจะเพิ่ม bionic และ BSD libc ในภายหลัง
2. การเปรียบเทียบการใช้หน่วยความจำและความเบา (Bloat)
muslและdietlibcมีขนาดเบามากและสามารถสร้างไฟล์ปฏิบัติการที่เล็กได้ (static hello: 13k เทียบกับ 662k ของ glibc)glibcมีขนาด.soรวมสูงถึง 7.9M จึงหนักที่สุด แต่ก็รวมความสามารถไว้มากมาย เช่น iconv- uClibc ถูกทดสอบในสถานะที่รวมฟีเจอร์เสริมไว้จำนวนมาก
3. การรับมือเมื่อทรัพยากรไม่เพียงพอ
muslมักรายงานความล้มเหลวอย่างชัดเจนและจัดการได้โดยไม่จบการทำงานแบบผิดปกติglibcและuClibcในบางกรณีอาจ abort หรือจัดการข้อยกเว้นได้ไม่เหมาะสมเมื่อหน่วยความจำไม่พอdietlibcมีบางฟีเจอร์ที่ยังไม่ได้อิมพลีเมนต์เลย หรือรองรับได้เพียงในระดับพื้นฐานมาก
4. การเปรียบเทียบประสิทธิภาพ
- glibc ให้ประสิทธิภาพดีที่สุดในงานจัดการหน่วยความจำ (เช่น strchr, memset) และ I/O (
putc/getc) - musl ให้ประสิทธิภาพที่สมดุลและมี overhead ต่ำ จึงถือว่าแข่งขันได้
- dietlibc ช้ากว่ามากในงานที่เกี่ยวกับ
strstr,putc/getcและการทำงานที่เกี่ยวข้องกับthread
5. เสถียรภาพของ ABI และความเข้ากันได้ของเวอร์ชัน
muslและglibcให้เสถียรภาพและความเข้ากันได้ของ ABI แต่มีเพียงglibcเท่านั้นที่รองรับการจัดการ symbol versiondietlibcและuClibcโดยรวมยังขาดความพร้อมหรือมีการรองรับแบบไม่เป็นทางการในด้านความเข้ากันได้ของ ABI และเวอร์ชัน
6. อัลกอริทึมและการอิมพลีเมนต์ภายใน
muslและglibcใช้การค้นหา substring ขั้นสูง (twoway), regular expression แบบอิง DFA และ malloc ที่เน้นประสิทธิภาพdietlibcใช้ naive quicksort และ regex แบบ backtracking ทำให้มีข้อด้อยด้านประสิทธิภาพและความเสถียร- อัลกอริทึมสำหรับการเรียงลำดับและการจัดสรรหน่วยความจำของ glibc ถูกยกระดับด้วย
introsort,ptmallocเป็นต้น
7. ขอบเขตการรองรับฟีเจอร์/มาตรฐาน
glibcรองรับฟีเจอร์ของ C99/C11 และ POSIX แทบทั้งหมด รวมถึง locale, iconv และความสามารถด้านดีบักอย่างกว้างขวางmuslอิมพลีเมนต์โดยคงการปฏิบัติตามฟีเจอร์ที่จำเป็นไว้พร้อมกับขนาดที่เล็กdietlibcมีฟีเจอร์ส่วนใหญ่ที่ยังไม่สมบูรณ์หรือขาดหาย และมีความเข้ากันได้กับ POSIX ต่ำ
8. การรองรับสถาปัตยกรรมและสภาพแวดล้อมการบิลด์
muslรองรับสถาปัตยกรรมหลักส่วนใหญ่ (x86, ARM, MIPS เป็นต้น) ได้อย่างกว้างขวาง และยังคำนึงถึงสภาพแวดล้อม non-MMU ด้วย- glibc มีการรองรับที่กว้างขวางที่สุดมาแต่เดิม และมีการเผยแพร่ใช้งานอย่างแพร่หลาย
dietlibcรองรับเพียงสถาปัตยกรรมขั้นต่ำ และมีข้อด้อยด้าน portability กับความยืดหยุ่นในการบิลด์
ยังไม่มีความคิดเห็น