"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 之巅,每章包含:故事场景 → 原理图解 → 工具实践 → 总结提炼。现在开始。