"BPF 让内核变成了可编程的。" —— Brendan Gregg
BPF之巅:洞悉Linux系统和应用性能 — 总览
书籍信息
| 项目 | 内容 |
|---|---|
| 书名 | BPF Performance Tools: Linux System and Application Observability |
| 作者 | Brendan Gregg(Netflix 资深性能架构师) |
| 译者 | 孙宇聪、吕宏利、刘晓舟 |
| 出版社 | 电子工业出版社(2021年) |
| ISBN | 978-7-121-39972-5 |
| 页数 | 816页 |
| 配套资源 | github.com/brendangregg/bpf-perf-tools-book |
作者背景
Brendan Gregg —— BPF(eBPF)主要贡献者,BCC 和 bpftrace 两大前端框架的核心开发者与维护者。他开创了将 BPF 用于系统可观测性的先河,亲手开发了数十个基于 BPF 的性能分析工具。其他著作包括《性能之巅:洞悉系统、企业与云计算》。
全书知识结构
graph TD
subgraph BPF之巅知识体系
A["BPF基础"] --> B["性能分析方法"]
B --> C["前端框架"]
C --> D["系统资源分析"]
C --> E["应用与安全"]
C --> F["虚拟化场景"]
A --> A1["第1章 引言"]
A --> A2["第2章 扩展版BPF"]
B --> B1["第3章 性能分析"]
C --> C1["第4章 BCC"]
C --> C2["第5章 bpftrace"]
D --> D1["第6章 CPU"]
D --> D2["第7章 内存"]
D --> D3["第8章 文件系统"]
D --> D4["第9章 磁盘I/O"]
D --> D5["第10章 网络"]
E --> E1["第11章 安全"]
E --> E2["第12章 编程语言"]
E --> E3["第13章 应用程序"]
E --> E4["第14章 内核"]
F --> F1["第15章 容器"]
F --> F2["第16章 虚拟机管理器"]
F --> F3["第17章 其他BPF性能工具"]
end
style A fill:#e3f2fd
style B fill:#fff3e0
style C fill:#e8f5e9
style D fill:#fce4ec
style E fill:#f3e5f5
style F fill:#e0f2f1学习路径建议
路径一:速通实战派(适合有Linux基础的SRE/运维)
graph LR
A["第3章 性能分析"] --> B["第5章 bpftrace"]
B --> C["第6章 CPU"]
B --> D["第7章 内存"]
B --> E["第9章 磁盘I/O"]
B --> F["第10章 网络"]
C --> G["第18章 技巧FAQ"]
D --> G
E --> G
F --> G目标:一周内掌握生产环境排查问题的 BPF 工具箱。
路径二:系统深入派(适合后端开发/内核工程师)
graph LR
A["第1章 引言"] --> B["第2章 扩展版BPF"]
B --> C["第4章 BCC"]
C --> D["第5章 bpftrace"]
D --> E["第6-10章 资源分析"]
E --> F["第12章 编程语言"]
E --> G["第14章 内核"]
F --> H["第13章 应用程序"]
G --> H目标:理解 BPF 原理,能编写自定义工具,三个月完成。
路径三:云原生专项派(适合K8s/容器开发者)
graph LR
A["第3章 性能分析"] --> B["第5章 bpftrace"]
B --> C["第15章 容器"]
B --> D["第16章 虚拟机管理器"]
C --> E["第10章 网络"]
D --> E
E --> F["第17章 其他工具"]目标:解决容器化环境的性能问题,两周完成。
章节速查表
| 章节 | 核心主题 | 关键工具 | 适用场景 |
|---|---|---|---|
| 第1章 | BPF简介与历史 | - | 了解BPF是什么 |
| 第2章 | BPF技术机制 | bpftool | 理解底层原理 |
| 第3章 | 性能分析方法 | Linux 60秒清单 | 排查思路 |
| 第4章 | BCC框架 | funccount, stackcount, argdist | 编写复杂BPF程序 |
| 第5章 | bpftrace框架 | 单行程序、脚本 | 快速 ad-hoc 分析 |
| 第6章 | CPU分析 | profile, runqlat, cpudist | CPU瓶颈、调度延迟 |
| 第7章 | 内存分析 | memleak, swapin, vmtop | 内存泄漏、Swap问题 |
| 第8章 | 文件系统 | ext4slower, vfsstat | I/O延迟、缓存分析 |
| 第9章 | 磁盘I/O | biolatency, biosnoop | 块设备性能 |
| 第10章 | 网络 | tcpconnect, tcplife, tcptop | 连接问题、延迟分析 |
| 第11章 | 安全 | setuids, offcputime | 入侵检测、审计 |
| 第12章 | 语言分析 | javacalls, nodegc | Java/Node/Python |
| 第13章 | 应用分析 | mysqld_qslower, pgslower | 数据库、自定义应用 |
| 第14章 | 内核分析 | kprobe, tracepoint | 内核开发、驱动调试 |
| 第15章 | 容器分析 | cgroup相关 | Docker/K8s |
| 第16章 | 虚拟化 | 宿主机+访客分析 | KVM/Xen |
| 第17章 | 生态工具 | PCP, Grafana, kubectl-trace | 可视化、监控 |
| 第18章 | 技巧FAQ | - | 性能开销、符号解析 |
两本书的关系
graph LR
A["《性能之巅》"] -->|"方法论 + 传统工具"| C["生产环境排查"]
B["BPF之巅"] -->|"BPF工具 + 可编程"| C
style A fill:#e3f2fd
style B fill:#e8f5e9
style C fill:#fff3e0建议阅读顺序:先读《性能之巅》建立方法论体系,再读 BPF 之巅获得具体工具能力。两书章节结构对应,可交叉阅读:
- 《性能之巅》第3章 CPU ↔ BPF 之巅第6章 CPU
- 《性能之巅》第4章 内存 ↔ BPF 之巅第7章 内存
- 《性能之巅》第5章 磁盘 ↔ BPF 之巅第8-9章 文件系统+磁盘
关键概念速查
| 术语 | 含义 |
|---|---|
| BPF | Berkeley Packet Filter,伯克利包过滤器,现指 eBPF(extended BPF) |
| eBPF | 扩展BPF,Linux内核中的通用执行引擎 |
| BCC | BPF Compiler Collection,Python/Lua/C++ 前端 |
| bpftrace | 高级BPF追踪语言,类awk语法 |
| kprobe | 内核动态插桩,可在任意内核函数入口/出口插入探针 |
| tracepoint | 内核静态跟踪点,稳定ABI |
| uprobe | 用户态动态插桩 |
| USDT | User Statically-Defined Tracing,用户态静态探针 |
| 火焰图 | 可视化调用栈采样结果,宽=时间占比 |
| off-CPU分析 | 分析线程被阻塞的时间 |
"不要猜测,要测量。—— 但首先,你需要知道用什么工具测量。"
本系列将逐章拆解 BPF 之巅,每章包含:故事场景 → 原理图解 → 工具实践 → 总结提炼。现在开始。