Khoảng một năm trước, Ubuntu đã thay đổi cấp độ nén mặc định cho việc xử lý initramfs của nó xuống cấp độ Zstd một để xử lý thời gian tạo initramfs chậm trên các bảng phát triển/hệ thống cấp thấp. Nhưng kể từ đó, điều đó đã dẫn đến kích thước initramfs lớn hơn và gây ra các lỗi khác như lấp đầy phân vùng/boot trên hệ thống Ubuntu nhanh hơn. Do đó, các nhà phát triển đã quay trở lại bảng vẽ và đang cố gắng tìm ra một con đường phía trước để xử lý initramfs tốt hơn, hoạt động tốt cho các máy tính bảng đơn cấp thấp đồng thời tiết kiệm không gian tối đa và hoạt động tốt cho tất cả các trường hợp sử dụng Ubuntu.

Nhà phát triển Ubuntu/Debian, Benjamin Drung, đã và đang làm việc để tìm ra sự cân bằng phù hợp của các tùy chọn nén để initramfs của Ubuntu trở nên nhanh và mang lại khả năng nén tốt. Đề xuất ban đầu của anh ấy được đưa ra vào tuần trước trên danh sách ubuntu-devel bao gồm:

“Tôi đề xuất phương pháp sau để giải quyết nhược điểm: Tạo các kho lưu trữ cpio (được nén bằng xz-9) cho các mô-đun hạt nhân và các tệp phần sụn khi xây dựng gói Debian nhân/phần sụn. Sau đó gửi các kho lưu trữ cpio đó trong gói (hoặc trong một gói nhị phân riêng biệt). Sau đó, CPU tải nó đặt trên các trình tạo. Kho lưu trữ cpio sẽ chứa các mô-đun cho MODULES=most.

mkinitramfs sau đó sẽ tìm kiếm các kho lưu trữ cpio đó và sử dụng chúng trong trường hợp chúng hiện diện. Một initramfs như vậy sẽ trông như thế này:

* Kho lưu trữ cpio vi mã AMD/Intel (trên amd64)
* kho lưu trữ cpio chính được nén bằng các mô-đun nhân zstd-1
* từ Gói Debian được nén bằng các tệp chương trình cơ sở xz-9
* từ gói Debian được nén bằng xz-9

Sau khi làm việc trên initramfs-tools như một phần công việc hàng ngày của tôi, các ngón tay của tôi bị ngứa và tôi phải tạo một bản nháp nhanh và bẩn vào thời gian rảnh buổi tối. Bạn có thể tìm thấy kết quả của hai giờ qua trong [1]. Bản nháp này có một tập lệnh mkinitramfs-kernel để tạo một kho lưu trữ cpio chứa các mô-đun hạt nhân và chương trình cơ sở (cần được phân tách sau này).

Kết quả thử nghiệm mặt trăng trên AMD Ryzen 7 5700G của tôi có vẻ đầy hứa hẹn: Xây dựng 6.2.0-24-generic-modules-most.cpio.xz mất khoảng 90 giây và có kích thước 54,9 MiB. Tạo initramfs tăng tốc từ khoảng 8,7 giây lên 3,5 giây (tiết kiệm 60%). Kích thước giảm từ 133,1 MiB xuống 80,7 MiB (tiết kiệm 39,4 %). Vì vậy, quá trình khởi động cần ít hơn 52,4 MiB, nhưng/lib/mô-đun cần 54,9 MiB cho kho lưu trữ cpio.

Hạn chế là việc xây dựng hạt nhân sẽ mất nhiều thời gian hơn, gói chiếm nhiều dung lượng hơn trên kho lưu trữ và máy nhân bản, đồng thời việc tải chúng xuống có thể mất nhiều thời gian hơn do kết nối chậm.”


Kỹ sư Canonical Dimitri John Ledkov đồng thời bày tỏ một cách tiếp cận khả thi khác:

“Tạo kho lưu trữ nén xz-9 của tất cả các mô-đun, vẫn bị phạt khi giải nén hầu hết chúng, và sau đó không sửa đổi chúng. Tôi đã hy vọng đạt được một cách tiếp cận tinh thần tương tự, nhưng không có thời gian để thực hiện là:

1) thay đổi mô-đun linux và chương trình cơ sở linux thành.ko.zst firmware.bin.zst được nén bằng zstd-19 tại thời điểm xây dựng.deb 2) điều này giúp tiết kiệm kích thước cài đặt của các gói, với kích thước tải xuống chỉ tăng nhẹ
3) sửa đổi các công cụ initramfs để đưa các tệp nén vào một initrd riêng biệt, không được nén (tức là loại trừ.zst các tệp từ kho lưu trữ cpio chính được nén mặc định và thêm chúng vào kho lưu trữ cpio chính thứ hai không được nén)
4) điều này sẽ đạt được khả năng tạo initrd nhanh, sẽ có kích thước nhỏ hơn ở trạng thái hiện tại và sẽ khởi động nhanh hơn vì nó sẽ chỉ giải nén các mô-đun/phần sụn mà nó thực sự cần khi khởi động

Để thử nghiệm cục bộ, bạn có thể giải nén.ko với zstd tại chỗ trong/lib/modules/; và chạy lại depmod. Sau đó, để kiểm tra các thay đổi của công cụ initramfs bỏ qua các tệp nén.zst và thêm chúng như trong một cpio nối thêm không nén.”

Con đường đó hiện đang được khám phá. Chưa có gì chắc chắn mặc dù vậy nhưng trong mọi trường hợp, có vẻ như sẽ có điều gì đó xảy ra khi thay đổi cách xử lý nén initramfs trên Ubuntu để mang lại sự cân bằng tốt hơn giữa kích thước nén/yêu cầu lưu trữ, thời gian nén và yêu cầu giải nén để phù hợp với nhiều loại phần cứng mà Ubuntu thấy sử dụng. mọi thay đổi sẽ xảy ra đối với chu kỳ Ubuntu 23.10 để có đủ thời gian thử nghiệm trước khi phát hành Ubuntu 24.04 LTS vào năm tới.

Categories: IT Info