Aya,第一個在 Rust 中創建 eBPF 控制器的庫

Linus Torvalds 以及許多開發人員 內核和不同的發行版 表達了他們對 Rust 的喜愛 甚至不止一次提出了在 Linux 內核上用這種編程語言實現控制器的主題。

關於這一點,已經有各種各樣的作品為人所知,其中 我們已經在博客上提到過 我們可以舉個例子 實驗 成功 來自替代實用程序套件 coreutils,用 Rust 重寫 (這包括 sort、cat、chmod、chown、chroot、cp、date、dd、echo、hostname、id、ln 和 ls 等實用程序)。

鑑於此,Linus Torvalds 並沒有完全表達他對這一舉措的支持,並表達了負面觀點(您可以查閱詳細信息) 在以下鏈接中。)

儘管萊納斯嚴厲批評, 作品 關於實施 Rust在內核中並沒有停止前進的腳步 以及最近 Aya 庫的第一個版本推出,它允許您在 Rust 中創建 eBPF 驅動程序,並在特殊的 JIT 虛擬機中的 Linux 內核中運行。

與其他 EBPF 開發工具不同, Aya 不使用 libbpf 和 BCC 編譯器提供了自己用 Rust 編寫的實現 它使用 libc crate 包直接訪問內核系統調用。 構建 Aya 不需要 C 語言工具或內核頭文件。

對於那些誰 不知道 eBPF,他們應該知道這是一個字節碼解釋器 內置於 Linux 內核中,允許您創建網絡操作控制器、監視系統性能、攔截系統調用、控制訪問、處理定時事件、計算操作頻率和時間,以及使用 kprobes/uprobes/tracepoints 進行跟踪。

由於 JIT 編譯,字節碼可以即時翻譯為機器指令 並以本機代碼的性能運行。 XDP 提供了一種在網絡驅動程序級別運行 BPF 程序的方法,可以直接訪問數據包 DMA 緩衝區,從而允許您為高網絡負載條件創建高性能驅動程序。

關於綾

提到的主要功能 的 Aya 我們可以發現 支持 BTF (BPF Type Format),以BPF偽代碼的形式提供類型信息,用於檢查和比較當前內核提供的類型。 使用 BTF 可以創建通用的 eBPF 驅動程序,無需使用不同版本的 Linux 內核重新編譯它們即可使用。

和他一樣 支持 bpf 到 bpf 調用, 全局變量和初始值設定項,它允許通過與使用 aya 作為執行時間的傳統程序進行類比來設計 eBPF 程序,並考慮 eBPF 中的工作覆蓋函數。

另一方面,它也有 支持內部內核類型, 包括常規數組、哈希映射、堆棧、隊列、堆棧跟踪以及套接字和性能跟踪的結構。

坦比恩 具有創建各類eBTF程序的能力,包括流量過濾和管理程序、cgroup 和各種套接字驅動程序、XDP 程序,以及非阻塞 tokyo 模式和 async-std 下異步請求處理的平台支持。
快速構建,不依賴於內核構建或內核頭文件。

重要的是要提到 該項目仍被認為是實驗性的,因為 API 尚未穩定 並不斷發展。 此外,並非所有設想的功能都已實現。

到今年年底,開發人員希望使 Aya 的功能與 libbpf 相當。 並於2022年XNUMX月形成第一個穩定版本。 還計劃將為 Linux 內核編寫 Rust 代碼所需的 Aya 部分與用於加載、附加 eBPF 程序並與之交互的用戶空間組件結合起來。

終於 如果你有興趣了解更多 關於它,你可以 檢查以下鏈接中的詳細信息。


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責資料:AB Internet Networks 2008 SL
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。