要充分发挥 eBPF 的潜力,需要一套完整的开发工具链来支持其编写、编译、调试和部署。目前已经有几个开发工具可以帮助开发和管理 eBPF 程序。它们对应满足用户的不同需求:

bcc Link to heading

BCC 是一个框架,它允许用户编写 python 程序,并将 eBPF 程序嵌入其中。该框架主要用于应用程序和系统的分析/跟踪等场景,其中 eBPF 程序用于收集统计数据或生成事件,而用户空间中的对应程序收集数据并以易理解的形式展示。运行 python 程序将生成 eBPF 字节码并将其加载到内核中。

bpftrace Link to heading

bpftrace 是一种用于 Linux eBPF 的高级跟踪语言,可在较新的 Linux 内核(4.x)中使用。bpftrace 使用 LLVM 作为后端,将脚本编译为 eBPF 字节码,并利用 BCC 与 Linux eBPF 子系统以及现有的 Linux 跟踪功能(内核动态跟踪(kprobes)、用户级动态跟踪(uprobes)和跟踪点)进行交互。bpftrace 语言的灵感来自于 awk、C 和之前的跟踪程序,如 DTrace 和 SystemTap。

eBPF Go 语言库 Link to heading

eBPF Go 语言库提供了一个通用的 eBPF 库,它将获取 eBPF 字节码的过程与 eBPF 程序的加载和管理进行了解耦。eBPF 程序通常是通过编写高级语言,然后使用 clang/LLVM 编译器编译成 eBPF 字节码来创建的。

libbpf C/C++ 库 Link to heading

libbpf 库是一个基于 C/ c++ 的通用 eBPF 库,它可以帮助解耦将 clang/LLVM 编译器生成的 eBPF 对象文件的加载到内核中的这个过程,并通过为应用程序提供易于使用的库 API 来抽象与 BPF 系统调用的交互。

总结 Link to heading

本文介绍了目前主流的几种 eBPF 开发工具,包括 bcc、bpftrace、eBPF Go 语言库 和 libbpf C/C++ 库,它们各自针对不同的使用场景和开发需求提供了灵活的支持。无论你是希望通过脚本快速进行系统跟踪,还是希望在生产环境中构建高性能的 eBPF 应用,都可以找到合适的工具链来辅助开发。