基于ubuntu22.04-深入淺出 eBPF
基于ebpf的性能工具-bpftrace
基于ebpf的性能工具-bpftrace腳本語(yǔ)法
基于ebpf的性能工具-bpftrace實(shí)戰(zhàn)(內(nèi)存泄漏)
什么是libbpf-bootstrap
libbpf-bootstrap是一個(gè)開(kāi)源項(xiàng)目,旨在幫助開(kāi)發(fā)者快速啟動(dòng)和開(kāi)發(fā)使用eBPF(Extended Berkeley Packet Filter)和libbpf的程序。eBPF是一種可以在Linux內(nèi)核中運(yùn)行的程序,提供了強(qiáng)大的網(wǎng)絡(luò)過(guò)濾、系統(tǒng)調(diào)用監(jiān)控和性能分析等功能。libbpf是一個(gè)庫(kù),用于加載和管理eBPF程序和map。
libbpf-bootstrap提供了一些樣例程序和模板,幫助開(kāi)發(fā)者理解如何使用libbpf創(chuàng)建、加載、管理eBPF程序,并與這些程序進(jìn)行交互。
libbpf-bootstrap開(kāi)源鏈接:https://github.com/libbpf/libbpf-bootstrap/
「以下是libbpf-bootstrap的一些主要特性:」
樣例程序:libbpf-bootstrap提供了一些樣例程序,用于演示如何使用libbpf和eBPF。這些樣例程序包括網(wǎng)絡(luò)監(jiān)控、性能分析等不同類(lèi)型的eBPF程序。
構(gòu)建系統(tǒng)集成:libbpf-bootstrap提供了集成到構(gòu)建系統(tǒng)的模板,可以方便地編譯和鏈接eBPF程序。
BPF CO-RE(Compile Once - Run Everywhere)支持:BPF CO-RE是一種讓eBPF程序能在不同版本的Linux內(nèi)核上運(yùn)行的技術(shù)。libbpf-bootstrap支持CO-RE,使得開(kāi)發(fā)的eBPF程序可以在不同版本的Linux內(nèi)核上運(yùn)行,無(wú)需重新編譯。
用戶(hù)空間和內(nèi)核空間程序的交互:libbpf-bootstrap展示了如何從用戶(hù)空間程序發(fā)送數(shù)據(jù)到eBPF程序,以及從eBPF程序返回?cái)?shù)據(jù)到用戶(hù)空間。
詳細(xì)的文檔:libbpf-bootstrap提供了詳細(xì)的文檔,包括如何安裝、如何使用樣例程序,以及如何創(chuàng)建自己的eBPF程序等。
使用libbpf-bootstrap的理由
開(kāi)始使用BPF在很大程度上仍然令人生畏,因?yàn)榧词篂楹?jiǎn)單的"Hello World"般的BPF應(yīng)用程序設(shè)置構(gòu)建工作流,也需要一系列步驟,對(duì)于新的BPF開(kāi)發(fā)人員來(lái)說(shuō),這些步驟可能會(huì)令人沮喪和令人生畏。這并不復(fù)雜,但知道必要的步驟是一個(gè)(不必要的)困難的部分。
libbpf-bootstrap就是這樣一個(gè)BPF游樂(lè)場(chǎng),它已經(jīng)盡可能地為初學(xué)者配置好了環(huán)境,幫助他們可以直接步入到BPF程序的書(shū)寫(xiě)。它綜合了BPF社區(qū)多年來(lái)的最佳實(shí)踐,并且提供了一個(gè)現(xiàn)代化的、便捷的工作流。libbpf-bootstrap依賴(lài)于libbpf并且使用了一個(gè)很簡(jiǎn)單的Makefile。對(duì)于需要更高級(jí)設(shè)置的用戶(hù),它也是一個(gè)好的起點(diǎn)。即使這個(gè)Makefile不會(huì)被直接使用到,也可以很輕易地遷移到別的構(gòu)建系統(tǒng)上。
libbpf-bootstrap構(gòu)建流程
libbpf-bootstrap的測(cè)試環(huán)境:本篇文章我們將在Ubuntu22.04進(jìn)行驗(yàn)證,下一篇文章我們將其在yy3568進(jìn)行驗(yàn)證。
安裝libbpf-bootstrap依賴(lài)的工具:clang,libelf,zlib
$sudoapt-getinstallclanglibelf1libelf-devzlib1g-dev
獲取源碼libbpf-bootstrap
//獲取libbpf-bootstrap主倉(cāng)的代碼 $gitclonehttps://github.com/libbpf/libbpf-bootstrap //獲取依賴(lài)的子倉(cāng)代碼 $gitsubmoduleupdate--init--recursive
編譯libbpf-bootstrap
$cdexamples/c/ $make MKDIR.output MKDIR.output/libbpf LIBlibbpf.a MKDIR/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs CC/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/bpf.o CC/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/btf.o CC/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf.o CC/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/libbpf_errno.o CC/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/netlink.o CC/home/rice/libbpf-bootstrap/examples/c/.output//libbpf/staticobjs/nlattr.o ..... BINARYusdt BPF.output/sockfilter.bpf.o GEN-SKEL.output/sockfilter.skel.h CC.output/sockfilter.o BINARYsockfilter BPF.output/tc.bpf.o GEN-SKEL.output/tc.skel.h CC.output/tc.o BINARYtc BPF.output/ksyscall.bpf.o GEN-SKEL.output/ksyscall.skel.h CC.output/ksyscall.o BINARYksyscall $
運(yùn)行測(cè)試樣例
我們義kprobe測(cè)試樣例為例,需要打開(kāi)三個(gè)terminal,第一個(gè)terminal執(zhí)行kprobe程序,第二個(gè)terminal 我們cat trace_pipi的內(nèi)容,第三個(gè)terminal我們制造一些現(xiàn)場(chǎng)。
當(dāng)我們?cè)诘谌齻€(gè)terminal制造現(xiàn)場(chǎng)的時(shí)候,第二個(gè)terminal就可以看到相關(guān)的探測(cè)內(nèi)容
第一個(gè)terminal執(zhí)行kprobe程序:
$sudo./kprobe
第二個(gè)terminal 我們cat trace_pipi的內(nèi)容,需要進(jìn)入超級(jí)管理員,在執(zhí)行:
$cat/sys/kernel/tracing/trace_pipe
第三個(gè)terminal我們制造一些現(xiàn)場(chǎng):
$touchyouyeetoo $rm-rfyouyeetoo
最終效果
下一步計(jì)劃
將在「深圳風(fēng)火輪科技推出的YY3568」上跑ebpf程序,敬請(qǐng)期待
審核編輯 黃宇
-
開(kāi)發(fā)工具
+關(guān)注
關(guān)注
0文章
210瀏覽量
22298 -
Ubuntu
+關(guān)注
關(guān)注
5文章
566瀏覽量
30033 -
bootstrap
+關(guān)注
關(guān)注
0文章
36瀏覽量
3576 -
BPF
+關(guān)注
關(guān)注
0文章
25瀏覽量
4054
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
新手求助怎樣去設(shè)計(jì)快速開(kāi)發(fā)工具?
openEuler 倡議建立 eBPF 軟件發(fā)布標(biāo)準(zhǔn)
Microchip推出三款開(kāi)發(fā)工具包
ARM開(kāi)發(fā)工具解讀
![ARM<b class='flag-5'>開(kāi)發(fā)工具</b>解讀](https://file.elecfans.com/web2/M00/4A/10/pYYBAGKhvJGAUI2YAABLyxtMmz4707.png)
圖解android開(kāi)發(fā)工具
UG-677:ADuCM350軟件開(kāi)發(fā)工具包快速入門(mén)指南
![UG-677:ADuCM350軟件<b class='flag-5'>開(kāi)發(fā)工具</b>包<b class='flag-5'>快速</b>入門(mén)指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【新唐開(kāi)發(fā)工具】快速建構(gòu)低功耗藍(lán)牙設(shè)計(jì)的開(kāi)發(fā)模塊:BLE ATCMD
![【新唐<b class='flag-5'>開(kāi)發(fā)工具</b>】<b class='flag-5'>快速</b>建構(gòu)低功耗藍(lán)牙設(shè)計(jì)的<b class='flag-5'>開(kāi)發(fā)</b>模塊:BLE ATCMD](https://file1.elecfans.com/web2/M00/8F/C8/wKgaomTSGPCAU-oGAAA4b0RcwPU144.png)
基于ebpf的性能工具-bpftrace
![基于<b class='flag-5'>ebpf</b>的性能<b class='flag-5'>工具</b>-bpftrace](https://file1.elecfans.com/web2/M00/A1/8B/wKgZomT1mGWAKQhcAAA6OBECSrA567.png)
eBPF動(dòng)手實(shí)踐系列三:基于原生libbpf庫(kù)的eBPF編程改進(jìn)方案簡(jiǎn)析
![<b class='flag-5'>eBPF</b>動(dòng)手實(shí)踐系列三:基于原生<b class='flag-5'>libbpf</b>庫(kù)的<b class='flag-5'>eBPF</b>編程改進(jìn)方案簡(jiǎn)析](https://file1.elecfans.com/web2/M00/C4/F8/wKgZomX5LwaAGNVNAAAWUQ98t-0882.png)
基于原生libbpf庫(kù)的eBPF編程改進(jìn)方案
![基于原生<b class='flag-5'>libbpf</b>庫(kù)的<b class='flag-5'>eBPF</b>編程改進(jìn)方案](https://file1.elecfans.com/web2/M00/C5/E1/wKgaomX5L02AMb5TAAAWUQ98t-0229.png)
評(píng)論