eBPF,即擴展的伯克利包過濾器(Extended Berkeley Packet Filter),是從早期的BPF技術發展而來,起初用于高效地過濾網絡數據包。隨著時間的推移,eBPF已經成為一個強大的、靈活的內核技術,不僅限于網絡數據包處理,還可以用于跟蹤、安全、網絡策略實施、性能分析等多個領域。
知道名字和縮寫
起源與發展
-
BPF起源:BPF首次出現在1992年的BSD操作系統中,由Steven McCanne和Van Jacobson設計。它作為一種高效的用戶級數據包捕獲機制,利用內核中的虛擬機執行用戶定義的過濾程序,避免了不必要的用戶空間到內核空間的數據復制。
-
eBPF的進化:隨著時間的推移,BPF經歷了多次改進和擴展,形成了今天的eBPF。eBPF擁有更豐富的指令集、更大的寄存器集合,以及更強的安全性和靈活性。它可以編寫更為復雜的程序,并且能夠在內核中執行各種任務,遠遠超出了最初的包過濾功能。
知道最初的起源,來源于 BPF,用于處理網絡包。
核心特點
-
字節碼執行:用戶編寫eBPF程序,然后使用LLVM/CLang等編譯器將其編譯成字節碼。這個字節碼隨后被加載到內核中。
-
安全驗證:內核在執行eBPF字節碼前會進行嚴格的驗證,確保程序沒有死循環、不會消耗過多資源或影響內核穩定性,這是通過一個復雜的驗證器實現的。(因為要放到內核中運行,嚴格的檢查是很好理解的,不然就崩潰了)
-
動態加載與執行:通過
bpf()
系統調用,eBPF程序可以動態加載到內核中,并在需要時執行。JIT(即時編譯)技術可進一步將字節碼轉換成本地機器碼,以提高執行效率。 -
廣泛的鉤子函數:eBPF程序可以通過各種鉤子(hook)插入到內核的多個位置,包括但不限于系統調用入口/出口、網絡棧的各個層級(如XDP,即eXpress Data Path)、kprobes(內核函數探測點)和uprobes(用戶空間函數探測點)等,使得它能夠對系統行為進行深度監控和操控。
-
應用領域:
- 網絡:eBPF可用于高級網絡策略實施,比如使用XDP進行高性能的數據包處理。
- 性能監控:eBPF可以幫助收集詳細的性能指標,如CPU使用情況、磁盤I/O、系統調用跟蹤等。
- 安全:實現細粒度的安全策略,比如進程監控、審計、防火墻規則等。
- 調試與診斷:提供強大的內核和用戶空間程序的調試能力。
工作流程
- 編寫與編譯:開發者使用eBPF語言或LLVM前端語言編寫程序,并通過LLVM編譯成字節碼。
- 加載與驗證:通過
bpf()
系統調用將字節碼加載到內核,內核驗證程序的安全性。 - 即時編譯(JIT):內核使用JIT技術將字節碼編譯成本地機器碼,提高執行效率。
- 掛載與觸發:根據程序的用途,將其掛載到相應的內核鉤子點。當鉤子點被觸發時,eBPF程序自動執行。
這個工作流程就是一個簡單的總結,實際上開發人員在編寫 eBPF 時可以通過現在各種前端或者框架,很方便的進行使用。
eBPF技術以其高度的靈活性、安全性以及低開銷的特點,正在成為現代云原生、容器化環境、以及需要高性能監控和安全控制場景下的關鍵技術。隨著持續的發展和社區的支持,eBPF的應用前景非常廣闊。
參考資料
1.超細節!十年碼農講述eBPF和XDP技術!知乎
https://zhuanlan.zhihu.com/p/558509760
2.eBPF怎么玩(一)嗶哩嗶哩
https://m.bilibili.com/read/cv15768069/
3.全面介紹eBPF-概念-charlieroro-博客園
https://www.cnblogs.com/charlieroro/articles/13403672.html
4.ebpf深入理解和應用介紹-CSDN博客
https://m.blog.csdn.net/gengzhikui1992/article/details/105364645
5.01|技術概覽:eBPF的發展歷程及工作原理-知乎
https://zhuanlan.zhihu.com/p/458753388
6.【萬字干貨!eBPF的原理與入門技巧-知乎
https://zhuanlan.zhihu.com/p/529225001
7.游戲王 把卡破壞和把卡送入墓地有什么區別?芝士回答
https://page.sm.cn/blm/midpage-317/
8.游戲王特召只能攻擊表示?芝士回答
https://page.sm.cn/blm/midpage-317
9.羅克韋爾ABPF40P系列變頻器-變頻器產業網
http://m.ebpq.cn/mall/41722.html
10.一文看懂eBPF、eBPF的使用(超詳細)嗶哩嗶哩
https://www.bilibili.com/read/mobile?id=16232093