Aya, thư viện đầu tiên tạo bộ điều khiển eBPF trong Rust

Linus torvalds cũng như nhiều nhà phát triển Kernel và các bản phân phối khác nhau đã bày tỏ sự thích thú của họ về Rust và thậm chí nhiều lần vấn đề triển khai các trình điều khiển bằng ngôn ngữ lập trình này trên Nhân Linux đã được trình bày.

Và về điều này, nhiều tác phẩm khác nhau đã được phát hành, trong đó chúng tôi đã đề cập ở đây trên blog và chúng tôi có thể đề cập đến ví dụ thí nghiệm thành công từ bộ tiện ích thay thế, coreutils, được viết lại bằng Rust (Điều này bao gồm các tiện ích như sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln và ls).

Vì vậy, Linus torvalds đã không hoàn toàn đưa ra quan điểm ủng hộ sáng kiến ​​này và đã bày tỏ những điểm tiêu cực (bạn có thể tham khảo chi tiết Trong liên kết sau.)

Bất chấp những lời chỉ trích gay gắt từ Linus, công trình về việc thực hiện Rust trong Kernel vẫn không ngừng tiếp tục và gần đây phiên bản đầu tiên của thư viện Aya đã được giới thiệu, cho phép bạn tạo trình điều khiển eBPF trong Rust chạy bên trong nhân Linux trong một máy ảo JIT đặc biệt.

Không giống như các công cụ phát triển EBPF khác, Aya không sử dụng libbpf và trình biên dịch BCCnhưng cung cấp triển khai của riêng nó được viết bằng Rust sử dụng gói ngăn kéo libc để truy cập trực tiếp vào các lệnh gọi hệ thống hạt nhân. Xây dựng Aya không yêu cầu các công cụ ngôn ngữ C hoặc tiêu đề hạt nhân.

Dành cho những ai không biết về eBPF, họ nên biết rằng đây là một trình thông dịch bytecode được tích hợp trong nhân Linux cho phép bạn tạo các trình xử lý hoạt động mạng, giám sát hoạt động của hệ thống, chặn các cuộc gọi hệ thống, kiểm soát truy cập, xử lý các sự kiện với thời gian, tính toán tần suất và thời gian của các hoạt động và theo dõi bằng cách sử dụng kprobes / uprobes / tracepoints.

Nhờ biên dịch JIT, mã bytecode được dịch thành các lệnh máy một cách nhanh chóng và chạy với hiệu suất của mã gốc. XDP cung cấp một phương tiện để chạy các chương trình BPF ở cấp trình điều khiển mạng, với quyền truy cập trực tiếp vào bộ đệm gói DMA, cho phép bạn tạo trình điều khiển hiệu suất cao cho các điều kiện tải mạng cao.

Về Aya

Trong số các tính năng chính được đề cập từ Aya, chúng tôi có thể tìm thấy rằng có sự hỗ trợ cho BTF (Định dạng kiểu BPF), cung cấp thông tin kiểu trong mã giả BPF để kiểm tra và so sánh các kiểu được cung cấp bởi hạt nhân hiện tại. Sử dụng BTF giúp bạn có thể tạo các trình điều khiển eBPF chung có thể được sử dụng mà không cần phải biên dịch lại chúng với các phiên bản khác nhau của nhân Linux.

Cũng như hỗ trợ cho các cuộc gọi bpf-to-bpf, biến toàn cục và trình khởi tạo, cho phép thiết kế các chương trình cho eBPF tương tự với các chương trình thông thường sử dụng aya làm thời gian thực hiện, hủy bỏ các chức năng có tính đến công việc trong eBPF.

Mặt khác, nó cũng có hỗ trợ cho các loại nhân nội bộ, bao gồm mảng thông thường, bản đồ băm, ngăn xếp, hàng đợi, dấu vết ngăn xếp và cấu trúc cho các ổ cắm và theo dõi hiệu suất.

Ngoài ra có khả năng tạo nhiều loại chương trình eBTF khác nhau, bao gồm các chương trình để lọc và quản lý lưu lượng, cgroup và các trình điều khiển socket khác nhau, các chương trình XDP và cũng hỗ trợ nền tảng để xử lý yêu cầu không đồng bộ ở chế độ tokyo và async-std.
Biên dịch nhanh chóng, không bị ràng buộc với biên dịch hạt nhân hoặc tiêu đề hạt nhân.

Điều quan trọng là phải đề cập đến dự án vẫn được coi là thử nghiệm vì API chưa ổn định và tiếp tục phát triển. Ngoài ra, không phải tất cả các chức năng đã hình thành vẫn chưa được thực hiện.

Vào cuối năm nay, các nhà phát triển hy vọng sẽ đưa chức năng của Aya ngang bằng với libbpf và vào tháng 2022 năm XNUMX, hình thành phiên bản ổn định đầu tiên. Nó cũng được lên kế hoạch để kết hợp các phần Aya cần thiết để viết mã Rust cho nhân Linux với các thành phần không gian người dùng được sử dụng để tải, đính kèm và tương tác với các chương trình eBPF.

Cuối cùng nếu bạn muốn biết thêm về nó, bạn có thể kiểm tra các chi tiết trong liên kết sau đây.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: AB Internet Networks 2008 SL
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.