项目介绍:bpf-developer-tutorial
概述
bpf-developer-tutorial
是一个面向开发者的 eBPF 学习教程,基于 CO-RE(Compile Once, Run Everywhere)理念。教程由浅入深地介绍 eBPF 的基础概念、代码示例和实际应用。与传统的 BCC 不同,本教程使用 libbpf
、Cilium
、libbpf-rs
和 eunomia-bpf
等框架开发,提供 C
、Go
和 Rust
语言的示例。
教程目标
这个教程的主要目的是通过提供简单、短小的 eBPF 工具示例帮助开发人员快速上手。如开头代码仅需二十行,便于掌握 eBPF 的开发方法和技巧。教程主要聚焦于易于理解的观测性、网络、安全等方面的 eBPF 实例。
内容目录
入门示例
本部分包含一些简单的 eBPF 程序实例和介绍,主要利用 eunomia-bpf
框架来简化开发过程,包括如何使用和开发基本的 eBPF 程序。
- 核心概念与工具介绍
Hello World
、基础框架与开发- 使用
kprobe
与fentry
监控系统调用 - 文件打开捕获及全局变量过滤
- 使用
uprobe
捕获函数调用 - 信号发送捕获及状态存储
- 进程执行与退出事件捕获
- 调度延迟和中断的捕获
进阶文档与实例
进入这个阶段,开始基于 libbpf
构建完整的 eBPF 项目,并结合实际应用场景进行实践:
- 使用
libbpf
开发用户空间程序,跟踪exec()
和退出 - 利用 eBPF 程序进行性能分析
- 用
libbpf
统计 TCP 连接延迟 - Java 垃圾回收时间捕获和内存泄漏监控
- 随机/顺序磁盘 I/O 计数和安全检测
深入专题
这一部分探讨了与 eBPF 相关的高级主题,包括在 Android 上使用 eBPF 程序、潜在攻击和防御,以及复杂的跟踪等内容。
- Android:在 Android 上使用 eBPF 程序
- 网络:利用 eBPF 进行 HTTP 追踪和网络请求加速
- 安全:隐藏进程或文件信息、防止恶意进程运行、系统调用参数修改等
- 调度器:BPF 调度器简介与实现
- 其他应用:用户空间 eBPF 运行时、异步数据传递、扩展 eBPF 的使用范围
教程动机
该教程受到 bcc python developer tutorial 的启发和帮助。相较于传统的 BCC 工具链,当前开发 eBPF 应用使用 libbpf
是一种更佳的选择。
使用工具与模板
教程还提供了一些 GitHub 模板,若想快速启动一个 eBPF 项目,可以通过这些模板迅速构建开发环境,支持 C
、Go
、Rust
语言,并包含自动化构建、测试和发布过程:
libbpf
C 语言项目模板cilium/
Go 语言项目模板libbpf-rs
Rust 语言项目模板eunomia-bpf
C 语言项目模板
通过使用这些模板,开发者可以专注于项目的核心功能与逻辑,而无需将时间浪费在环境搭建和结构配置上。
在线开发环境
使用 GitHub Codespaces 可以轻松创建、管理和共享基于云的开发环境。通过以下步骤,可以在 Codespace 中完成 eBPF 程序的编译和运行:
- 在新项目库中点击
Code
按钮,选择Open with Codespaces
选项。 - 创建 Codespace,打开终端并导航至项目目录。
- 按照相应的仓库指南进行编译和运行。
以上便是 bpf-developer-tutorial
项目的内容介绍,提供了丰富的学习资源和实践工具以帮助开发者掌握 eBPF 技术。