eBPF


eBPF前生

BPF(Berkeley Packet Filter):用於過濾網絡報文(packet)
兩大特點:
1、過濾:根據用戶輸入規則過濾報文
2、拷貝:負責用網卡驅動層拷貝符合條件的數據包到用戶空間
目的:解決當時包過濾機制效率低下的問題

eBPF、XDP鏈接

https://docs.cilium.io/en/v1.8/bpf/
http://arthurchiao.art/blog/cilium-bpf-xdp-reference-guide-zh/#prog_type_xdp

BPF應用示例

tcpdump -d -i lo tcp and dst port 7070

作用:只抓取流經本機的數據包
-d: 將輸入的表達式轉化為人類可讀的看似匯編的代碼

#以下代碼可以在任意支持 tcpdump 的類 Unix 平台上運行,輸出大同小異   
bash-3.2$ sudo tcpdump -d -i lo tcp and dst port 7070
(000) ldh [12]
(001) jeq #0x86dd jt 2 jf 6 #檢測是否為 ipv6 報文,若為假(jf)則按照 ipv4 報文處理(L006)
(002) ldb [20]
(003) jeq #0x6 jt 4 jf 15 #檢測是否為 tcp 報文
(004) ldh [56]
(005) jeq #0x1b9e jt 14 jf 15 #檢測是否目標端口為 7070(0x1b9e),若為真(jt)則跳轉 L014
(006) jeq #0x800 jt 7 jf 15 #檢測是否為 ipv4 報文
(007) ldb [23]
(008) jeq #0x6 jt 9 jf 15 #檢測是否為 tcp 報文
(009) ldh [20]
(010) jset #0x1fff jt 15 jf 11 #檢測是否為 ip 分片(IP fragmentation)報文
(011) ldxb 4*([14]&0xf)
(012) ldh [x + 16] #找到 tcp 報文中 dest port 的所在位置
(013) jeq #0x1b9e jt 14 jf 15 #檢測是否目標端口為 7070(0x1b9e),若為真(jt)則跳轉 L014
(014) ret #262144 #該報文符合要求
(015) ret #0 #該報文不符合要求

tcp and dst port 8080:用戶輸入的過濾規則
Pseudo Machine Language(tcpdump經由libpcap轉碼而來的過濾包條件)

BPF JIT引入

JIT(Just-In-Time)Compiler(及時編譯器),在一些特定硬件平台,進行提速
bpf_int_jit_compile(): 將傳入的BPF偽代碼加以編譯,編譯結果取代的原有的處理函數
sk_run_filter(): 負責報文到來時進行過濾的操作,提升效率

BPF演進

eBPF(extend BPF)的演進,應用場景擴展:流控,應用性能調優/監控,內核跟蹤等,大大改進接口設計及易用性
硬件變革推動軟件變革,系統開銷已經從硬件轉到軟件:
1、硬件發展:如:NVMe
2、軟件發展:如:多核異步編程Seastar,用戶態高性能軟件棧SPDK,DPDK,內核態演進eBPF、io_uring

eBPF Hooks

Where can you hook? Kernel functions(kprobes), userspace functions(uprobes), system calls, fentry/fexit, tracepoints, network devices(tc/xdp), network routes, TCP congestion algorithms. sockets(data level)

eBPF架構

eBPF可將用戶態定義的代碼段動態注入內核執行,無需重新編譯內核
動態注入的過程:
1、用戶態編寫C代碼,動態注入內核中執行
2、Llvm編譯解析生成BPF字節碼
3、代碼安全檢查(兩輪檢查)
4、用戶空間與內核空間共享Map
5、無需重新編譯內核源碼,靈活高效,安全輕量
特點:
1、高效(先過濾后緩存)
2、靈活(用戶自定義,動態注入內核,無需重新編譯內核,可靈活掛載不同協議層Kernel函數)
3、安全(Verifier兩輪檢查)
4、輕量級

eBPF工具庫

BCC提供python庫,實現了map創建,代碼編譯,解析,注入等操作,使開發人員只需聚焦於C語言開發要注入的內核代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM