bpftime:用於 Uprobe 和 Syscall 的用戶空間 eBPF 運行時

BP時間

左,帶 eBPF 的原始核心 |右:bpftime

Bpftime 是一個定位為運行時和虛擬機器的項目,旨在 在用戶空間中執行 eBPF 驅動程式。

BP時間 啟用 eBPF 追蹤和流程幹預程序 完全在用戶空間運行,使用 uprobe 和系統呼叫攔截等功能。

關於bpftime

bpftime 的顯著特徵之一是它 顯著減少過載的能力 透過消除不必要的上下文切換。 函數的使用 尿管探頭和輸尿管探頭 由Linux核心提供, bpftime 可以實現多達十倍的開銷減少 這不僅提高了效能,還大大簡化了調試過程。

值得一提的是, 攔截系統調用並整合檢查 的uprobe 使用程式碼重寫技術實現 可執行檔(二進位重寫)。該技術涉及修改正在運行的應用程式的機器程式碼,其中對系統呼叫、入口點和本地函數的呼叫被轉換為偵錯處理程序所取代。

此外,bpftime 具有可在沒有 Linux 核心的系統上使用的優點 並且不需要提升權限即可將 eBPF 應用程式載入到核心中。這使得它在各種環境和系統配置中都具有高度的可訪問性和多功能性。

BP時間 提供廣泛的操作 操縱和控制函數、附加處理程序、過濾系統呼叫以及執行各種操作,包括:

  • 更換或修改功能。
  • 連接控制器(掛鉤)和過濾器。
  • 重定向、阻止或取代系統呼叫參數。
  • 攔截函數的入口點和出口點。
  • 替換程式碼中任意偏移的處理程序。

Bpftime 的一個顯著特徵是 能夠附加到系統上任何正在運行的進程 無需重新啟動或重建它。可以透過替換進程中的 Bpftime 來運行進程 追蹤 並透過上傳 LD_PRELOAD.

透過 bpftime,BCC、bpftrace 和 Deepflow 等追蹤系統可以在使用者空間中運作。例如,我們示範了使用BCC框架的sslsniff腳本來分析並儲存nginx中的加密流量。在測試中,當在核心端執行 sslsniff 時,nginx 效能下降了 58%,當將驅動程式移至使用者空間時,效能下降了 12,3%。

此外,作為 Bpftime 的一部分, 正在開發一個運行時,允許 eBPF 程式附加到系統調用 並測試追蹤點。帶有 JIT 的 eBPF 虛擬機器允許在使用者進程層級隔離執行 eBPF 程序,並支援 AOT 編譯。後台程序促進與核心的交互並組織與子系統的協作 向上探測 刪除內核。

虛擬機 eGMP 被封裝為插件庫並提供類似的API 烏布夫,這使得 eBPF 功能可以輕鬆整合到其他專案中。對於來自多個進程的資料的匯總聚合,支援建立位於共享記憶體中的聯合 eBPF 映射。

總而言之,Bpftime 不僅提供了一整套用於在運行時操作和控制函數的工具,而且還 可以輕鬆地將 eBPF 功能整合到其他專案中,從而為各種應用和使用場景提供靈活且強大的解決方案。此外,對為在核心中使用而編寫的標準 eBPF 驅動程式的支援以及使用基於 clang 和 libbpf 的標準工具進行編譯可確保高效且一致的開發體驗。

對於對該專案感興趣的人,您應該知道該專案程式碼是用 C/C++ 編寫的,並在 MIT 許可證下分發,這確保了其對社群的可訪問性和透明度。

如果你想 了解更多,您可以在中查看詳細信息 以下鏈接。


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。