有几个开发工具链可以帮助开发和管理eBPF
程序。它们面向了用户的不同需求。
BCC
BCC
是一个框架,允许用户可以写内嵌eBPF
程序的python
脚本。该框架主要针对涉及应用程序和系统分析/跟踪的用例,其中eBPF
程序用于收集统计数据或生成事件,而用户空间中的对应程序收集数据并以人类可读的形式显示。运行python程序将生成eBPF
字节码并将其加载到内核中。
地址:https://github.com/iovisor/bcc
bpftrace
bpftrace
是一种针对Linux eBPF
的高级跟踪语言,可在Linux
内核4.x以上中使用。bpftrace
使用LLVM
作为后端,将脚本编译为eBPF
字节码,并利用BCC
与Linux eBPF
子系统以及现有的Linux
跟踪功能进行交互:内核动态跟踪(kprobe
)、用户级动态跟踪(uprobe
)和跟踪点。bpftrace
语言的灵感来自awk
、C
以及之前的跟踪程序,如DTrace
和SystemTap
。
地址:https://github.com/iovisor/bpftrace
eBPF Go
库eBPF Go
库提供了一个通用的库,解耦了获取eBPF
字节码流程和eBPF
程序的加载及管理。eBPF
程序一般通过高级语言编写,然后使用clang/LLVM
编译器编译成eBPF
字节码。地址:https://github.com/cilium/ebpf
libbpf C/C++
库libbpf
库是一个基于C/C++
的eBPF
库,用于解耦由clang/LLVM
编译生成的eBPF
对象到内核的加载和通过向应用程序提供一个易用的库来简化bpf
系统调用的交互。地址:https://www.kernel.org/doc/html/latest/bpf/libbpf/index.html
暗号:2f6dc