1、獨立于操作系統的eBPF組件架構(eBPFCA)第二屆 eBPF開發者大會w w w.e b p f t r a v e l.c o m中 國 西 安分享人:胡慶偉時間:2024年4月 eBPFCA概述第二屆 eBPF開發者大會w w w.e b p f t r a v e l.c o m中 國 西 安eBPF:eBPF是Linux內核一種革命性的技術,起源于Linux內核,可以在內核中運行沙盒程序。由于內核具有監控和控制整個系統的特權,它通常是實現可觀測性、安全性和網絡功能的理想場所。第 二 屆 e B P F 開 發 者 大 會 eBPFCA概述第 二 屆 e B P F 開 發 者 大
2、會 eBPFCA概述eBPF優勢:安全、高性能、擴展性應用程序可移植性強、工具鏈完善eBPF應用:探測、追蹤、與內核合作提高效率第 二 屆 e B P F 開 發 者 大 會 eBPFCA概述1.探測、可觀測行往往在系統成熟后會考慮;2.eBPF的可移植性不只體現在不同Linux版本的適配;3.不同操作系統更方便的支持eBPF獨立于操作系統的eBPF組件架構(eBPFCA)第 二 屆 e B P F 開 發 者 大 會 eBPFCA概述eBPFCA實現內核中eBPF的通用部分,向上為用戶提供類似或相同于eBPF的接口。其中包括eBPF程序load、attach、字節碼翻譯等操作。為了eBPFC
3、A能夠方便的與操作系統結合,eBPFCA將所有依賴操作系統的操作集中在操作系統服務層(OS Server Layer,簡稱OSL)。第 二 屆 e B P F 開 發 者 大 會 eBPFCA概述1.提供基本eBPF服務的操作系統獨立層(OS-independent);2.提供eBPFCA與特定操作系統的操作系統服務層(OSL)。操作系統OS-independent eBPFCAOS Services LayereBPFCA eBPFCA分析第二屆 eBPF開發者大會w w w.e b p f t r a v e l.c o m中 國 西 安第 二 屆 e B P F 開 發 者 大 會 eB
4、PFCA分析Linux中eBPF的cmd:BPF_MAP_CREATE BPF_MAP_LOOKUP_ELEM BPF_PROG_LOAD BPF_OBJ_GET BPF_PROG_ATTACH.為用戶提供與Linux中eBPF相同的使用方法。處理過程與linux現有eBPF的處理過程相同。第 二 屆 e B P F 開 發 者 大 會 eBPFCA分析 eBPF的使用和處理過程中大多是和操作系統其他機制無關的。使用方法和處理過程的特點:分析操作系統其他機制有關的部分,僅有附加操作需要與操作系統進行配合。eBPF通用部分(eBPF General)第 二 屆 e B P F 開 發 者 大 會
5、 eBPFCA分析1.注冊kprobe:獲得探測點的地址,將探測點地址處的指令替換為break指令;準備一片可執行的內存,將原指令和一個SS單步調試指令寫入;記錄探測點地址的下一個指令地址。2.觸發break異常:當系統運行到第1步替換的break指令時,會產生一個break異常,隨后系統跳轉到異常處理程序中進行break異常處理。在break異常處理中,修改異常返回地址為第1步準備的保存有原指令和一個SS單步調試指令的地址處。這樣做的目的是為了讓原指令得到運行。3.觸發SS單步異常:當第2步的break異常處理完成后,由于修改了break異常的返回地址為保存有原指令和一個SS單步調試指令的地
6、址處,所以break異常返回后,跳轉到該處運行,執行完原指令后會觸發一個SS單步調試指令,在單步調試指令中修改返回地址為探測點的下一條指令地址。SS單步調試異常返回后,就回到了正常的執行流中。kprobe附加操作分析,kprobe主要流程:第 二 屆 e B P F 開 發 者 大 會 eBPFCA分析kprobe附加操作分析,kprobe主要流程:ORIregister_kprobe.textBRK#.text.textORISSbreak handleSShandleaddr;symbol_name;opcode;ainsn insn;restore;kprobe第 二 屆 e B P F
7、 開 發 者 大 會 eBPFCA分析提取kprobe處理流程中與操作系統系統相關的部分:1.獲取探測點地址:kprobe通常使用函數名指定探測點,需要系統為kprobe提供符號所在的位置。2.break異常處理:上述kprobe處理流程中的兩個中斷都是通過break異常進行的,兩個異常的不同點僅在于操作碼后幾位不同,可以通過軟件進行解析。kprobe獲得符號名可以作為OSL層的一個接口,為kprobe的OS-independent部分提供獲取符號所在地址的功能。break異常處理中的主要處理邏輯可以作為OS-independent的部分,操作系統需要提供異常入口,并提供注冊接口,將OS-in
8、dependent的處理流程注冊進異常處理中。第 二 屆 e B P F 開 發 者 大 會 eBPFCA分析將eBPF General和kprobe結合起來,就形成了支持kprobe的eBPFCA。綜上,得到更細致的eBPFCA框架:操作系統eBPF GeneralOS-independenteBPF GeneralOSLeBPFCAkprobeOS-independentkprobe OSL kprobe示例第二屆 eBPF開發者大會w w w.e b p f t r a v e l.c o m中 國 西 安第 二 屆 e B P F 開 發 者 大 會 kprobe示例運行平臺:宿主機:
9、ubuntu20.04虛擬機:qemu-system-loongarch64(3A5000)操作系統:小型操作系統(支持任務切換)第 二 屆 e B P F 開 發 者 大 會 kprobe示例源碼結構:使用示例:運行結果:總結第二屆 eBPF開發者大會w w w.e b p f t r a v e l.c o m中 國 西 安第 二 屆 e B P F 開 發 者 大 會 總結1.kprobe示例的實現,得到相對獨立的kprobe。2.eBPFCA分析中kprobe的分析,提供了一個如何將附加操作獨立的例子:2.分析kprobe的流程;3.梳理kprobe的流程中操作系統無關和操作系統相關部
10、分;4.操作系統無關部分作為OS-independent,相關部分作為OSL;5.kprobe的OSL中依賴操作系統其他機制的部分需要制定協議。3.kprobe提供一個示例,可推廣至其他附加操作。第 二 屆 e B P F 開 發 者 大 會 總結最終eBPFCA框架:操作系統eBPF GeneralOS-independenteBPF GeneralOSLeBPFCAkprobeOS-independentkprobe OSL.OS-independent.OSL感謝觀看第二屆 eBPF開發者大會w w w.e b p f t r a v e l.c o m中 國 西 安分享人:胡慶偉時間:2024年4月