免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

RustAya 編寫 eBPF 程序


RustAya 編寫 eBPF 程序

文章插圖
本文地址:https://www.ebpf.top/post/ebpf_rust_aya
1. 前言【RustAya 編寫 eBPF 程序】Linux 內(nèi)核 6.1 版本中有一個非常引人注意的變化:引入了對 Rust 編程語言的支持 。Rust 是一種系統(tǒng)編程語言,Rust 通過提供非常強大的編譯時保證和對內(nèi)存生命周期的明確控制 。在內(nèi)核開發(fā)中引入 Rust 語言,將會為內(nèi)核開發(fā)的早期帶來更多的安全保障 。eBPF 是在內(nèi)核中基于事件運行用戶自定義程序的技術,其驗證器機制可以保障運行在內(nèi)核中 eBPF 程序的安全性 。
Rust 與 eBPF 有著一個共同的目標:保證內(nèi)核安全,只是兩者側重的維度有所不同 。
盡管使用 Rust 編寫 eBPF 程序多數(shù)情況下都需要通過不安全的方式在內(nèi)核進行內(nèi)存讀寫,但是基于 Rust 和 Aya,的確能夠給我們帶來一個快速和高效的開發(fā)體驗,這包括自動生成整個程序框架(eBPF 程序及對應的用戶空間代碼)、參數(shù)檢查確認、錯誤處理、統(tǒng)一的相關構建和管理方式等等。
Aya 是一個以可操作性和開發(fā)者體驗為重點的 eBPF 庫,完全是在 Rust 基礎上建立的,只使用 libc 包來執(zhí)行系統(tǒng)調(diào)用 。Aya 官方倉庫地址為 https://github.com/aya-rs/aya/,當前版本為v0.1.11,項目還處于偏早期 。基于 Aya 庫開發(fā) eBPF 程序可以給我們帶來以下的便利:
  • 基于 Rust 的 Cargo 工具來管理、構建和測試項目;
  • 支持 CO-RE 直接生成與 Rust 與內(nèi)核文件的綁定;
  • 用戶工具代碼(Rust)與運行在的內(nèi)核中的 eBPF 代碼輕松共享代碼;
  • 對于 LLVM、libbpf、bcc 等完全沒有任何依賴;
本文僅是基于 Aya 編寫 eBPF 程序及用戶空間程序的生成和測試的過程記錄,不涉及到對于生成 Rust 代碼的詳細解讀 。
2. Rust 開發(fā)環(huán)境搭建2.1 創(chuàng)建 VM 虛擬機為了使用 Rust 進行 eBPF 程序編寫,那么我們首先需要在本地搭建一個 Rust 開發(fā)環(huán)境 。這里我仍然采用 multipass 工具快速搭建一個 Ubuntu 22.04 LTS 的環(huán)境 。
$ multipass launch --name rust-aya -d 20G默認磁盤為 5G,比較容易造成磁盤空間滿,因此這里將磁盤空間大小設置為 20G,你可以根據(jù)自己的情況調(diào)整 。
對于已經(jīng)創(chuàng)建的 mulipass 實例可以在創(chuàng)建后進行調(diào)整,則需要 multipass 版本大于 1.10,而且需要調(diào)整的實例處于停止狀態(tài),詳細可參見調(diào)整實例配置,例如 multipass set local.rust-aya.cpus=4 或 multipass set local.rust-aya.memory=8G 分別用于調(diào)整實例的 CPU 和 MEM 大小 。
2.2 安裝 Rust 開發(fā)環(huán)境通常情況下,Rust 開發(fā)環(huán)境推薦通過 rustup 工具管理,我們可以通過以下命令快速安裝該工具:
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh一般情況下我們選擇默認選項安裝 。整個安裝過程會下載一個腳本完成 rustup 工具安裝,同時也會安裝最新的 Rust 穩(wěn)定版本 。如果安裝順利,我們可以在最后看到如下的信息:
... stable-x86_64-unknown-linux-gnu installed - rustc 1.65.0 (897e37553 2022-11-02)Rust is installed now. Great!To get started you may need to restart your current shell.This would reload your PATH environment variable to includeCargo's bin directory ($HOME/.cargo/bin).To configure your current shell, run:source "$HOME/.cargo/env"在 rustup 工具安裝完成后,我們可以使用其安裝 Rust 穩(wěn)定版(實際上默認已經(jīng)安裝)和 nightly,其中 nightly 為開發(fā)者體驗新功能的發(fā)布通道,Rust 2021 年開始支持編譯 eBPF,當前使用 Aya 需要基于 Rust Nightly 版本 。
Rust 有 3 個發(fā)布通道:
  • Nightly
  • Beta
  • Stable(穩(wěn)定版)
大部分 Rust 開發(fā)者主要采用穩(wěn)定版通道,不過希望實驗新功能的開發(fā)者可能會使用 nightly 或 beta 版 。詳情參見附錄 G:Rust 是如何開發(fā)的與 “Nightly Rust”

經(jīng)驗總結擴展閱讀