So sánh các triển khai thư viện chuẩn C/POSIX cho Linux
(etalabs.net)1. Tổng quan dự án và mục tiêu
Eta Labs đã so sánh các triển khai thư viện chuẩn C/POSIX cho Linux với trọng tâm là tính năng và độ gọn nhẹ (“bloat”). Các đối tượng được so sánh gồm musl, uClibc, dietlibc và glibc; trong tương lai dự kiến sẽ bổ sung thêm bionic và các libc của BSD.
2. So sánh mức sử dụng bộ nhớ và độ gọn nhẹ (Bloat)
muslvàdietlibcrất nhẹ và có thể tạo ra các tệp thực thi rất nhỏ (hello static: 13k so với 662k của glibc).glibcnặng nhất với tổng kích thước.solên tới 7.9M, nhưng bao gồm nhiều tính năng như iconv.- uClibc được thử nghiệm trong trạng thái đã включить nhiều tính năng tùy chọn.
3. Ứng phó trong tình huống thiếu tài nguyên
muslthường báo lỗi rõ ràng và xử lý mà không bị dừng bất thường.glibcvàuClibctrong một số trường hợp có thể abort khi thiếu bộ nhớ hoặc không xử lý ngoại lệ đúng cách.dietlibchoặc là hoàn toàn chưa triển khai một số tính năng, hoặc chỉ xử lý ở mức rất sơ sài.
4. So sánh hiệu năng
- glibc cho hiệu năng tốt nhất trong các phép toán bộ nhớ (
strchr,memset...) và I/O (putc/getc). - musl cho hiệu năng cân bằng, overhead thấp và đủ sức cạnh tranh.
- dietlibc chậm vượt trội ở các phép toán liên quan đến
strstr,putc/getcvàthread.
5. Độ ổn định ABI và khả năng tương thích phiên bản
muslvàglibccung cấp tính ổn định và khả năng tương thích ABI, nhưng chỉglibchỗ trợ quản lý phiên bản symbol.dietlibcvàuClibcnhìn chung còn thiếu sót hoặc chỉ ở mức không chính thức về tương thích ABI và tương thích phiên bản.
6. Thuật toán và triển khai nội bộ
muslvàglibcsử dụng tìm kiếm substring nâng cao (twoway), biểu thức chính quy dựa trên DFA và malloc tối ưu cho hiệu năng.dietlibcdùng quicksort kiểu naive và regex backtracking nên yếu hơn về hiệu năng và độ ổn định.- Các thuật toán sắp xếp và cấp phát bộ nhớ trong glibc được nâng cao với
introsort,ptmalloc...
7. Phạm vi hỗ trợ tính năng/chuẩn
glibchỗ trợ gần như mọi tính năng của C99/C11 và POSIX, đồng thời rất rộng về locale, iconv và cả tính năng gỡ lỗi.muslđược triển khai nhỏ gọn nhưng vẫn tuân thủ các tính năng thiết yếu.dietlibccó phần lớn tính năng chưa hoàn chỉnh hoặc còn thiếu, và mức tương thích POSIX cũng thấp.
8. Hỗ trợ kiến trúc và môi trường build
muslhỗ trợ rộng rãi hầu hết các kiến trúc chính (x86, ARM, MIPS...) và còn tính đến cả môi trường non-MMU.- glibc từ lâu đã có phạm vi hỗ trợ rộng nhất theo truyền thống và được phân phối rất phổ biến.
dietlibcchỉ hỗ trợ số ít kiến trúc tối thiểu, và kém hơn về tính di động cũng như độ linh hoạt khi build.
Chưa có bình luận nào.