【性能工程 - eBPF 技術】小白也能學會的 eBPF 技術——初步了解 eBPF 技術(一)

eBPF,即擴展的伯克利包過濾器(Extended Berkeley Packet Filter),是從早期的BPF技術發展而來,起初用于高效地過濾網絡數據包。隨著時間的推移,eBPF已經成為一個強大的、靈活的內核技術,不僅限于網絡數據包處理,還可以用于跟蹤、安全、網絡策略實施、性能分析等多個領域。

知道名字和縮寫

起源與發展

  • BPF起源:BPF首次出現在1992年的BSD操作系統中,由Steven McCanne和Van Jacobson設計。它作為一種高效的用戶級數據包捕獲機制,利用內核中的虛擬機執行用戶定義的過濾程序,避免了不必要的用戶空間到內核空間的數據復制

  • eBPF的進化:隨著時間的推移,BPF經歷了多次改進和擴展,形成了今天的eBPF。eBPF擁有更豐富的指令集、更大的寄存器集合,以及更強的安全性和靈活性。它可以編寫更為復雜的程序,并且能夠在內核中執行各種任務,遠遠超出了最初的包過濾功能。

知道最初的起源,來源于 BPF,用于處理網絡包。

核心特點

  1. 字節碼執行:用戶編寫eBPF程序,然后使用LLVM/CLang等編譯器將其編譯成字節碼。這個字節碼隨后被加載到內核中。

  2. 安全驗證內核在執行eBPF字節碼前會進行嚴格的驗證,確保程序沒有死循環、不會消耗過多資源或影響內核穩定性,這是通過一個復雜的驗證器實現的。(因為要放到內核中運行,嚴格的檢查是很好理解的,不然就崩潰了)

  3. 動態加載與執行:通過bpf()系統調用,eBPF程序可以動態加載到內核中,并在需要時執行。JIT(即時編譯)技術可進一步將字節碼轉換成本地機器碼,以提高執行效率。

  4. 廣泛的鉤子函數:eBPF程序可以通過各種鉤子(hook)插入到內核的多個位置,包括但不限于系統調用入口/出口、網絡棧的各個層級(如XDP,即eXpress Data Path)、kprobes(內核函數探測點)和uprobes(用戶空間函數探測點)等,使得它能夠對系統行為進行深度監控和操控。

  5. 應用領域

    • 網絡:eBPF可用于高級網絡策略實施,比如使用XDP進行高性能的數據包處理。
    • 性能監控:eBPF可以幫助收集詳細的性能指標,如CPU使用情況、磁盤I/O、系統調用跟蹤等。
    • 安全:實現細粒度的安全策略,比如進程監控、審計、防火墻規則等。
    • 調試與診斷:提供強大的內核和用戶空間程序的調試能力。

工作流程

  1. 編寫與編譯:開發者使用eBPF語言或LLVM前端語言編寫程序,并通過LLVM編譯成字節碼。
  2. 加載與驗證:通過bpf()系統調用將字節碼加載到內核,內核驗證程序的安全性。
  3. 即時編譯(JIT):內核使用JIT技術將字節碼編譯成本地機器碼,提高執行效率。
  4. 掛載與觸發:根據程序的用途,將其掛載到相應的內核鉤子點。當鉤子點被觸發時,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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43335.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43335.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43335.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

echart5.5.1版本,倒三角柱狀圖

加載方法 initChart1(title, id, tag) {var myChart echarts5.init(this.$refs[id]);const _this this;var option {title:{text: title||"",show: title?true:false,top: 24,left: 24},grid:{left: 54,top: 74,bottom: 44,right: 30,},xAxis: {type: category,d…

【Spring成神之路】老兄,來一杯Spring AOP源碼嗎?

文章目錄 一、引言二、Spring AOP的使用三、Spring AOP的組件3.1 Pointcut源碼3.2 Advice源碼3.3 Advisor源碼3.4 Aspect源碼 四、Spring AOP源碼刨析4.1 configureAutoProxyCreator源碼解析4.2 parsePointcut源碼解析4.3 parseAdvisor源碼解析4.4 parseAspect源碼解析4.5 小總…

電腦缺少dll文件是怎么回事?教你5種有效的解決方法

當您的計算機顯示DLL文件已經遺失時,您應如何應對呢?實際上,針對此類DLL文件的處置過程相對來說較為簡易。今日,我們在此為大家詳細介紹此領域的相關知識,讓大家輕松解決電腦中因丟失DLL文件而產生的問題。 一、關于DL…

案例開發-日程管理-第一期

九 案例開發-日程管理-第一期 共7期 9.1 登錄頁及校驗 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>.ht{text-align: center;color: cadetblue;font-family: 幼…

MVC 生成驗證碼

在mvc 出現之前 生成驗證碼思路 在一個html頁面上&#xff0c;生成一個驗證碼&#xff0c;在把這個頁面嵌入到需要驗證碼的頁面中。 JS生成驗證碼 <script type"text/javascript">jQuery(function ($) {/**生成一個隨機數**/function randomNum(min, max) {…

Python占位符匯總

# f-string (重點掌握) 3.6版本之后才有的 name "杰倫" print(大家好&#xff0c;我是杰倫) print(大家好&#xff0c;我是, name, sep) # 可以但不推薦 name "杰倫" age 45 salary 1.4567 print(大家好&#xff0c;我是杰倫&#xff0c;我今年45&a…

《妃夢千年》第三十章:意外的來信

第三十章&#xff1a;意外的來信 林清婉在皇宮中的地位穩固后&#xff0c;生活似乎又回歸了平靜。然而&#xff0c;這種平靜并沒有持續多久。一天早晨&#xff0c;她收到了一個意外的來信&#xff0c;信封上沒有署名&#xff0c;但她一眼就認出了那熟悉的筆跡——這是她已故父…

RedHat Linux8 修改root管理員賬戶密碼命令

RedHat Linux8 修改root管理員賬戶密碼命令&#xff1a; sudo passwd root RedHat重置root管理員密碼&#xff1a; 1. 查看Linux系統版本信息 cat /etc/redhat-release2. 重置密碼 2.1 進入內核編輯界面 重啟Linux系統并出現引導界面&#xff0c;按下鍵盤上的e鍵進入內…

Prometheus+Grafana主機運行數據

目錄 介紹 安裝Node Exporter 配置Prometheus 驗證配置 導入儀表盤 介紹 Prometheus是一款開源的監控和警報工具&#xff0c;而Node Exporter是Prometheus的一個官方插件&#xff0c;用于采集主機上的各種系統和硬件指標。 安裝Node Exporter 下載最新版本的Node Export…

【AI大模型】ChatGPT-4 對比 ChatGPT-3.5:有哪些優勢

引言 ChatGPT4相比于ChatGPT3.5,有著諸多不可比擬的優勢&#xff0c;比如圖片生成、圖片內容解析、GPTS開發、更智能的語言理解能力等&#xff0c;但是在國內使用GPT4存在網絡及充值障礙等問題&#xff0c;如果您對ChatGPT4.0感興趣&#xff0c;可以私信博主為您解決賬號和環境…

FLinkCDC引起的生產事故(二)

背景&#xff1a; 最近在做實時數據的抽取工作&#xff0c;利用FLinkCDC實時抽取目標庫Oracle的數據到Doris中&#xff0c;但是在抽取的過程中&#xff0c;會導致目標庫的生產庫數據庫非常卡頓&#xff0c;為了避免對生產環境的數據庫造成影響&#xff0c;對生產環境的數據庫利…

谷歌優化的坑與甜:方法策略決定成敗,并非難易程度

對于谷歌優化&#xff0c;本人頗為惱火。眾所周知&#xff0c;我們開設網站旨在吸引眾多訪客&#xff0c;然谷歌這位傲慢的“高嶺之花”&#xff0c;卻令我們煞費苦心。有位友人為提升其網站排名&#xff0c;不惜耗盡心血&#xff0c;然而成效甚微&#xff0c;猶如坐過山車般起…

P3110 [USACO14DEC] Piggy Back S

題意 有一張 n n n 點 m m m 邊的無向圖&#xff0c;Alice 要從 1 1 1 走到 n n n&#xff0c;Bob 要從 2 2 2 走到 n n n。Alice 走一條邊需要花費 B B B&#xff0c;Bob 走一條邊需要花費 E E E&#xff0c;當他們一起走時&#xff0c;走一條邊需要花費 P P P。求他…

OpenJudge 奇數求和

目錄 描述思路樣例輸入樣例輸出CodeCC 總時間限制: 1000ms 內存限制: 65536kB 描述 計算非負整數 m 到 n&#xff08;包括m 和 n &#xff09;之間的所有奇數的和&#xff0c;其中&#xff0c;m 不大于 n&#xff0c;且n 不大于300。例如 m3, n12, 其和則為&#xff1a;357911…

qcom 平臺efuse機器抓取dump log的方法

引言&#xff1a; qcom 平臺機器&#xff0c;一旦efuse后機器將無法抓取dump log qcom 原文&#xff1a; efuse機器抓取dump log的方法如下&#xff1a; 一、修改配置文件&#xff1a; 把kamorta_debugpolicy.xml 在配置了debugpolicy&#xff08;加入串號和打開開關&#x…

怎么檢查SSL證書是否有效?

SSL證書的有效性對于保護網站數據安全和用戶隱私至關重要。然而&#xff0c;有時可能會出現證書過期、無效或被吊銷的情況。為了確保網站的安全性&#xff0c;對SSL證書的有效性進行檢查至關重要。本文將介紹幾種常用的方法來檢查SSL證書的有效性&#xff0c;幫助大家有效評估和…

Android Studio Download Gradle 時慢問題解決

1.騰訊gradle 下載&#xff1a;后面拼接版本&#xff08;gradle-8.0-bin.zip&#xff09; https://mirrors.cloud.tencent.com/gradle/gradle-8.0-bin.zip 2.Android Studio 配置&#xff1a;setting-->gradle-->Use Gradle from 選擇本地文件夾&#xff08;解壓后的bi…

前端開發常用的框架有以下幾種?

React&#xff1a;由Facebook開發&#xff0c;用于構建用戶界面的JavaScript庫。它可以用于構建單頁面應用和移動應用。 Vue&#xff1a;一套用于構建用戶界面的漸進式框架&#xff0c;也是一個基于JavaScript的前端開發框架。Vue易于學習和使用&#xff0c;適用于構建小型到大…

基于Make的c工程No compilation commands found報錯

由于安裝gcc時只安裝了build-essential&#xff0c;沒有將其添加到環境變量中&#xff0c;因此打開Make工程時&#xff0c;CLion會產生如下錯誤&#xff1a; 要解決這個問題&#xff0c;一個方法是將GCC添加到環境變量中&#xff0c;但是這個方法需要修改至少兩個配置文件&…

數據結構——約瑟夫環C語言鏈表實現

約瑟夫環問題由古羅馬史學家約瑟夫&#xff08;Josephus&#xff09;提出&#xff0c;他參加并記錄了公元66—70年猶太人反抗羅馬的起義。在城市淪陷之后&#xff0c;他和40名死硬的將士在附近的一個洞穴中避難。起義者表示“寧為玉碎不為瓦全”&#xff0c;約瑟夫則想“留得青…