1、安裝bpftool工具
看起來,在不同的linux發行版裏,bpftool在不同的軟件包裏,ubuntu 22上,bpftool是linux-tools-generic的一部分,而樹莓派裏bpftool是一個單獨的軟件包。
在ubuntu上:
sudo apt install linux-tools-generic
在樹莓派上:
sudo apt install bpftool
然後用whereis命令就可以查看到安裝情況
xxx@xxx-pc:~$ whereis bpftool
bpftool: /usr/sbin/bpftool /usr/share/man/man8/bpftool.8.gz
有些發行版本上可能還需要自行從Linux下載源代碼後安裝(從源代碼開始安裝的方法介紹to be update)
2、bpftool簡介
BPFTOOL 是linux內核自帶的用於對eBPF程序和eBPF map進行檢查與操作的工具軟件。注意,依賴於內核版本和bpftool的版本的不同,實際使用與輸出可能會與本文略有出入。
3、bpftool的常用功能
-
sudo bpftool prog list:
顯示所有已經被load到系統裏的eBPF程序的信息列表,除了顯示功能外,還支持dump等功能,可以通過man bpftool prog來查看具體支持的功能。 -
bpftool net list
顯示內核網絡子系統裏的eBPF程序,除了顯示功能外,還支持其它功能,可以通過man bpftool net來查看具體支持的功能。 -
bpftool link list
顯示所有激活的鏈接,除了顯示功能外,還支持其它功能,可以通過man bpftool link來查看具體支持的功能。 -
bpftool perf list
顯示系統裏所有raw_tracepoint, tracepoint, kprobe attachments ,除了顯示功能外,還支持其它功能,可以通過man bpftool perf來查看具體支持的功能。 -
bpftool btf list
顯示所有BPF Type Format (BTF)數據 ,除了顯示功能外,還支持其它功能,可以通過man bpftool btf來查看具體支持的功能。 -
bpftool map list
顯示系統內已經載入的所有bpf map數據,除了顯示功能外,還支持其它功能,可以通過man bpftool map來查看具體支持的功能。 -
bpftool feature probe dev eth0
查看eth0支持的eBPF特性 。
4、使用bpftool查看eBPF程序運行情況的一個例子
在文章XDP入門–eBPF程序實現網橋/二層交換機轉發功能中,我們往eth0和eth1載入了根據目標MAC轉發數據包的eBPF字節碼,在這個程序中,我們用了
- 一個叫xdp_bridge_prog()數據包處理函數
- 一個叫mac_port_map的map數據庫
用以下二條命令我們就可以查看到上述信息,並用bpftool map dump功能來查看map裏的內容
xxx@raspberrypi:~ $ sudo bpftool prog list | tail -n 4
xlated 64B not jited memlock 4096B
21: xdp name xdp_bridge_prog tag 610be6df09f4715b gpl
loaded_at 2023-05-31T13:57:17+0800 uid 0
xlated 704B not jited memlock 4096B map_ids 1
xxx@raspberrypi:~ $ sudo bpftool map list
1: hash name mac_port_map flags 0x0
key 8B value 4B max_entries 100 memlock 4096B
xxx@raspberrypi:~ $ sudo bpftool map dump id 1