引入了 Aya 庫,用於在 Rust 中建立 eBPF 處理程序

推出了 Aya 庫的第一個版本,它允許您使用 Rust 語言建立 eBPF 處理程序,這些處理程序在具有 JIT 的特殊虛擬機中的 Linux 核心中運行。 與其他 eBPF 開發工具不同,Aya 不使用 libbpf 和 bcc 編譯器,而是提供自己的用 Rust 編寫的實現,它使用 libc crate 套件直接存取核心系統呼叫。 建置 Aya 不需要 C 語言工具或核心頭檔。 該函式庫程式碼根據 MIT 和 Apache 2.0 授權分發。

主要特點:

  • 支援 BTF(BPF 類型格式),它以 BPF 偽代碼的形式提供類型信息,用於類型檢查並映射到當前核心提供的類型。 使用 BTF 可以建立通用的 eBPF 處理程序,無需重新編譯不同版本的 Linux 核心即可使用。
  • 支援「bpf-to-bpf」呼叫、全域變數和初始值設定項,這使您能夠以與使用aya 作為運行時的常規程序類似的方式為eBPF 設計程序,重新定義函數並考慮到eBPF 中的工作。
  • 支援各種核心類型,包括常規數組、哈希映射、堆疊、佇列、堆疊追蹤以及套接字和效能追蹤結構。
  • 能夠建立各種類型的 eBTF 程序,包括用於過濾和管理流量的程序、cgroup 處理程序和各種套接字操作、XDP 程序。
  • 支援以非阻塞模式 tokio 和 async-std 進行非同步請求處理的平台。
  • 快速彙編,無需與內核彙編和內核頭檔有任何關聯。

該專案仍被認為是實驗性的 - API 尚未穩定並仍在繼續開發。 此外,所有計劃的機會尚未實現。 開發人員預計到今年年底,Aya 的功能將與 libbpf 相當,並於 2022 年 XNUMX 月創建第一個穩定版本。 還計劃將為 Linux 核心編寫 Rust 程式碼所需的 Aya 部分與用於載入、附加 eBPF 程式並與之互動的使用者空間元件結合。

讓我們回想一下,eBPF 是內建在Linux 核心中的字節碼解釋器,它允許您創建網路操作處理程序、監視系統操作、攔截系統呼叫、控制存取、在保持計時的同時處理事件、計算操作的頻率和時間、執行使用 kprobes/uprobes/tracepoints 進行追蹤。 由於使用了 JIT 編譯,字節碼可以即時翻譯為機器指令,並以本機程式碼的效能執行。 XDP 提供了在網路驅動程式層級運行 BPF 程式的工具,能夠直接存取 DMA 封包緩衝區,從而讓您可以建立在重網負載下工作的高效能處理器。

來源: opennet.ru

添加評論