项目地址

FEATURE

  • 获取可用当前内核版本中每种程序类型的辅助函数的列表
1
bpftool feature

MAP

查看加载到内核中的 map

1
bpftool map list
1
2
3
4
5
6
165: array name hello.bss   flags 0x400
key 4B value 4B max_entries 1 memlock 4096B
btf_id 254
166: array name hello.rodata flags 0x80
key 4B value 15B max_entries 1 memlock 4096B
btf_id 254 frozen

查看 map 的内容

1
bpftool map dump name hello.bss
1
2
3
4
5
6
7
8
9
[{
"value": {
".bss": [{
"counter": 11127
}
]
}
}
]

PROG

将程序加载到内核中

1
bpftool prog load hello.bpf.o /sys/fs/bpf/hello

查看发生的重定位

1
bpftool -d prog load hello.bpf.o /sys/fs/bpf/hello

查看已加载的程序

1
bpftool prog list

查看加载到内核中的某个程序

1
2
3
4
5
6
7
bpftool prog show id 174 --pretty

bpftool prog show name hello

bpftool prog show tag d35b94b4c0c10efb

bpftool prog show pinned /sys/fs/bpf/hello

查看翻译后的 eBPF 程序

1
bpftool prog dump xlated name hello

tracelog

  • cat /sys/kernel/debug/tracing/trace_pipe 作用相同
1
bpftool prog tracelog

BTF

生成内核头文件

1
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h

查看加载到内核中的所有 BTF 数据

1
bpftool btf list

查看某个 BTF 数据的内容

1
bpftool btf dump id <id>

查看特定 map 关联的 BTF 类型

1
bpftool btf dump map name config

查看特定程序关联的 BTF 类型

1
2
3
4
5
6
7
8
9
10
Usage: bpftool btf { show | list } [id BTF_ID]
bpftool btf dump BTF_SRC [format FORMAT] [root_id ROOT_ID]
bpftool btf help

BTF_SRC := { id BTF_ID | prog PROG | map MAP [{key | value | kv | all}] | file FILE }
FORMAT := { raw | c [unsorted] }
MAP := { id MAP_ID | pinned FILE | name MAP_NAME }
PROG := { id PROG_ID | pinned FILE | tag PROG_TAG | name PROG_NAME }
OPTIONS := { {-j|--json} [{-p|--pretty}] | {-d|--debug} |
{-B|--base-btf} }
1
2
bpftool btf dump prog id 51
bpftool btf dump prog name hello

查看目标文件中的 BTF 数据

1
bpftool btf dump file hello-buffer-config.bpf.o

skeleton

从 ELF 文件格式的 eBPF 对象中自动生成框架代码

1
bpftool gen skeleton hello-buffer-config.bpf.o > hello-buffer-config.skel.h

NET

将 eBPF 程序附加到网络接口上的 XDP 事件

1
bpftool net attach xdp tag d35b94b4c0c10efb dev eth0

列出挂载到网络栈的 BPF 程序

1
bpftool net list

将程序从网络接口 eth0 分离(detach)

1
bpftool net detach xdp dev eth0

查看网卡已挂载的 BPF 程序

1
ip link show
1
2
3
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 xdpgeneric qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
prog/xdp id 124 name ping tag 3c91b2e4d4590b11 jited

挂载 attach

1
$ ip link set dev eth0 xdp obj hello.bpf.o sec xdp

分离 detach

1
$ ip link set dev eth0 xdp off

PERF

查看附加到 perf 相关事件的程序

1
bpftool perf show
1
bpftool perf list