Wild, công cụ liên kết tốc độ cao cho Linux
(github.com/davidlattimore)-
Liên kết Wild
- Wild là một công cụ hướng tới việc liên kết cực nhanh cho quá trình phát triển lặp đi lặp lại.
- Dù chưa triển khai liên kết tăng dần, hiện tại công cụ vẫn cho hiệu năng khá nhanh.
- Với các bản build production, nên dùng các trình liên kết đã trưởng thành như GNU ld hoặc LLD.
- Nếu muốn thời gian build nhanh trong quá trình phát triển, bạn có thể thử Wild.
- Có thể sử dụng nếu bạn đang phát triển trên Linux x86-64, và khi gặp vấn đề thì nên gửi bug report.
-
Cài đặt
- Để cài binary dựng sẵn, bạn có thể sao chép lệnh từ trang phát hành để sử dụng.
- Bạn cũng có thể tự sao chép binary
wildvào đường dẫn của mình. - Để tự build và cài đặt trực tiếp, dùng lệnh
cargo install --locked --bin wild --git https://github.com/davidlattimore/wild.git wild.
-
Dùng làm trình liên kết mặc định
- Để dùng Wild làm trình liên kết mặc định khi build mã Rust, hãy thêm cấu hình vào
~/.cargo/config.toml.
- Để dùng Wild làm trình liên kết mặc định khi build mã Rust, hãy thêm cấu hình vào
-
Hỏi & đáp
- Vì sao lại thêm một trình liên kết nữa?
- Mold vốn đã rất nhanh nhưng không hỗ trợ liên kết tăng dần. Wild nhắm tới liên kết tăng dần.
- Công cụ được viết bằng Rust, nên được kỳ vọng có thể giải quyết độ phức tạp của liên kết tăng dần.
- Những gì đang hoạt động
- Nền tảng/kiến trúc currently được hỗ trợ: Linux x86-64
- Có thể xuất binary liên kết tĩnh, binary liên kết động, và shared object (tệp
.so) - Đã xác nhận tương thích với Rust proc-macros
- Vượt qua các bài kiểm thử với những crate phổ biến trên crates.io
- Hỗ trợ thông tin debug
- Những gì vẫn chưa được hỗ trợ
- Liên kết tăng dần, hỗ trợ kiến trúc ngoài x86-64, hỗ trợ nhiều cờ liên kết khác nhau, hỗ trợ Mac và Windows, v.v.
- Vì sao lại thêm một trình liên kết nữa?
-
Benchmark
- Mục tiêu của Wild là đạt hiệu năng rất nhanh thông qua liên kết tăng dần.
- Ngay cả với liên kết không tăng dần, công cụ cũng nhắm tới hiệu năng nhanh nhất có thể.
- Theo kết quả benchmark, khi không có thông tin debug, Wild cho hiệu năng rất nhanh.
- Khi bao gồm thông tin debug, hiệu năng có phần giảm đi.
-
Liên kết mã Rust
- Bạn có thể dùng lệnh
cargo testđể build và kiểm thử crate bằng Wild. - Cần cài sẵn trình biên dịch Clang; GCC không cho phép dùng trình liên kết tùy ý.
- Bạn có thể dùng lệnh
-
Đóng góp
- Tham khảo CONTRIBUTING.md để biết cách đóng góp cho Wild.
-
Tài trợ
- Nếu tài trợ cho dự án này, tác giả có thể làm việc toàn thời gian lâu hơn.
-
Giấy phép
- Có thể chọn Apache License, Version 2.0 hoặc giấy phép MIT.
1 bình luận
Ý kiến trên Hacker News
Dù sau khi mold đổi giấy phép từ AGPL sang MIT thì nhu cầu về một linker nhanh mới đã giảm đi, việc dự án này xuất hiện vẫn gây bất ngờ. Điểm đáng chú ý là trong một số trường hợp nó nhanh gấp 2 lần mold
Trước đây đã xem qua dự án này, nhưng có vẻ nó vẫn chưa sẵn sàng cho production. Vì vậy vẫn đang dùng mold
Với người dùng macOS, Apple đã phát hành một linker mới từ 1–2 năm trước, và khi dùng cùng Rust thì cần thêm một thiết lập cụ thể vào
config.tomlSẽ rất mới mẻ nếu trình biên dịch C/C++ có thể build toàn bộ chương trình thành một đơn vị duy nhất mà không cần bước link. Các thư viện bên ngoài chủ yếu được liên kết động nên việc loại bỏ quá trình link cũng không thành vấn đề
Mối quan tâm tới các linker nhanh đã liên tục tăng lên, như Gold năm 2008, Lld năm 2015, và mold năm 2021
Sự phổ biến của Rust đang làm tăng mối quan tâm tới các linker nhanh, vì binary Rust tốn nhiều thời gian ở bước link. Đây không chỉ là vấn đề của riêng Rust mà còn do liên kết tĩnh và tối ưu hóa của LLVM
"Linkers and Loaders" của John Levine là một cuốn sách hay về chủ đề này, và khi đọc vài năm trước thì thấy rất thú vị
Kết quả so sánh hiệu năng giữa wild, mold và ld cho thấy với các dự án được tổ chức tốt, thời gian link không phải vấn đề quá lớn
Benchmark hiệu năng được chạy trên laptop System76 Lemur Pro mẫu 2020, có 4 nhân (8 luồng) và RAM 42GB
Cũng có người thắc mắc linker là gì
Có câu hỏi liệu nó có thể link được nhân Linux hay không, và đây từng là một cột mốc hữu ích của LLD