bpftool使用方法簡介

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章