17 điểm bởi baeba 2025-05-12 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

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)

  • musldietlibc rấ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).
  • glibc nặng nhất với tổng kích thước .so lê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

  • musl thường báo lỗi rõ ràng và xử lý mà không bị dừng bất thường.
  • glibcuClibc trong 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.
  • dietlibc hoặ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/getcthread.

5. Độ ổn định ABI và khả năng tương thích phiên bản

  • muslglibc cung cấp tính ổn định và khả năng tương thích ABI, nhưng chỉ glibc hỗ trợ quản lý phiên bản symbol.
  • dietlibcuClibc nhì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ộ

  • muslglibc sử 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.
  • dietlibc dù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

  • glibc hỗ 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.
  • dietlibc có 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

  • musl hỗ 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.
  • dietlibc chỉ 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.

Chưa có bình luận nào.