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 程序並與之交互的用戶空間組件結合起來。
終於 如果你有興趣了解更多 關於它,你可以 檢查以下鏈接中的詳細信息。