从今天开始,作者准备精读 Brendan Gregg 的《BPF 之巅:洞悉Linux系统和应用性能》。
《性能之巅》一书让我们理解了一系列操作系统实际的原理和概念,同时也掌握了一系列工具用于解决一些实际问题,《BPF之巅》则为读者们打开了 Linux 的内核大门,可以一窥内核原理和深入了解工作机制,为大家的以后的内核开发之旅铺平道路。
读书笔记除了包括对于书本内容介绍之外,也会结合真实问题,描述使用本书工具解决问题的全过程。
大家可以先对本书内容有个初步的认识,明天我们就开始我们的读书之旅。
内容介绍
《BPF之巅:洞悉Linux系统和应用性能》作为全面介绍 BPF 技术的图书,从 BPF 技术的起源到未来发展方向都有涵盖,不仅全面介绍了 BPF 的编程模型,还完整介绍了两个主要的 BPF 前端编程框架 — BCC 和 bpftrace,更给出了一系列实现范例,生动展示了 BPF技术的实际能力和未来发展前景。本书的另一个关注方向是 Linux 系统性能和应用程序性能的调优。内容涉及系统性能调优的策略、工具与实践案例,不仅介绍了对应的 BPF 工具,还着重介绍了这些工具如何与 Linux 传统性能工具进行互补,这样读者可以有选择地进行使用。本书介绍的工具小巧精致,并提供了简单易读的源代码,它们展示了 BPF 技术的魅力所在 :安全、高效、快捷的系统扩展力。未来 BPF 技术在 Linux 中的应用场景会越来越多,越来越重要。希望本书能在大家学习 BPF 技术并关注它的发展时提供帮助。
目录
第1章 引 言1.1 BPF和eBPF是什么 11.2 跟踪、嗅探、采样、剖析和可观测性分别是什么 21.3 BCC、bpftrace和IO Visor 31.4 初识BCC:快速上手 41.5 BPF跟踪的能见度 71.6 动态插桩:kprobes 和 uprobes 81.7 静态插桩:tracepoint和USDT 91.8 初识bpftrace:跟踪open() 101.9 再回到BCC:跟踪open() 131.10 小结 15
第2章 技术背景2.1 图释BPF 162.2 BPF 172.3 扩展版BPF 182.4 调用栈回溯 412.5 火焰图 442.6 事件源 482.7 kprobes 492.8 uprobes 532.9 跟踪点 572.10 USDT 622.11 动态USDT 662.12 性能监控计数器 682.13 perf_events 692.14 小结 70
第3章 性能分析3.1 概览 713.2 性能分析方法论 733.3 Linux 60秒分析 773.4 BCC工具检查清单 843.5 小结 90
第4章 BCC4.1 BCC的组件 924.2 BCC的特性 924.3 安装BCC 944.4 BCC的工具 964.5 funccount 1004.6 stackcount 1054.7 trace 1104.8 argdist 1174.9 工具文档 1214.10 开发BCC工具 1264.11 BCC的内部实现 1274.12 BCC的调试 1284.13 小结 136
第5章 bpftrace5.1 bpftrace的组件 1385.2 bpftrace的特性 1395.3 bpftrace的安装 1415.4 bpftrace工具 1435.5 bpftrace单行程序 1455.6 bpftrace的文档 1465.7 bpftrace编程 1465.8 bpftrace的帮助信息 1555.9 bpftrace的探针类型 1575.10 bpftrace的控制流 1635.11 bpftrace的运算符 1645.12 bpftrace的变量 1655.13 bpftrace的函数 1705.14 bpftrace映射表的操作函数 1775.15 bpftrace的下一步工作 1835.16 bpftrace的内部运作 1855.17 bpftrace的调试 1865.18 小结 190
第6章 CPU6.1 背景知识 1926.2 传统工具 1976.3 BPF工具 2106.4 BPF单行程序 2516.5 可选练习 2536.6 小结 254
第7章 内存7.1 背景知识 2567.2 传统工具 2637.3 BPF工具 2697.4 BPF单行程序 2887.5 可选练习 2897.6 小结 290
第8章 文件系统8.1 背景知识 2928.2 传统工具 2968.3 BPF工具 3028.4 BPF单行程序 3538.5 可选练习 3598.6 小结 360
第9章 磁盘I/O9.1 背景知识 3629.2 传统工具 3679.3 BPF工具 3729.4 BPF单行程序 4069.5 可选练习 4099.6 小结 410
第10章 网络10.1 背景知识 41210.2 传统工具 42210.3 BPF工具 43310.4 BPF单行程序 50710.5 可选练习 51310.6 小结 515
第11章 安全11.1 背景知识 51611.2 BPF工具 52311.3 BPF单行程序 54211.4 小结 544
第12章 编程语言12.1 背景知识 54512.2 C 55112.3 Java 56012.4 bash shell 60112.5 其他语言 61412.6 小结 619
第13章 应用程序13.1 背景知识 62113.2 BPF工具 62513.3 BPF单行程序 66213.4 BPF单行程序示范 66413.5 小结 664
第14章 内核14.1 背景知识 66614.2 分析策略 66914.3 传统工具 67014.4 BPF工具 67514.5 BPF单行程序 69714.6 BPF单行程序示范 69914.7 挑战 70014.8 小结 700
第15章 容器15.1 背景知识 70115.1.1 BPF 的分析能力 70315.1.2 挑战 70315.1.3 分析策略 70615.2 传统工具 70615.2.1 从主机上分析 70615.2.2 在容器内分析 70715.2.3 systemd-cgtop 70715.2.4 kubectl top 70815.2.5 docker stats 70815.2.6 /sys/fs/cgroups 70915.2.7 perf 70915.3 BPF工具 71015.4 BPF单行程序 71715.5 可选练习 71715.6 小结 718
第16章 虚拟机管理器16.1 背景知识 71916.2 传统工具 72216.3 访客系统的BPF工具 72316.4 宿主机BPF工具 73216.5 小结 737
第17章 其他BPF性能工具17.1 Vector和Performance Co-Pilot(PCP) 73817.2 Grafana和Performance Co-Pilot 74717.3 Cloudflare eBPF Prometheus Exporter(配合Grafana) 75017.4 kubectl-trace 75217.5 其他工具 75517.6 小结 755
第18章 建议、技巧和常见问题18.1 典型事件的频率和额外开销 75618.2 以49Hz或99Hz为采样频率 76018.3 黄猪和灰鼠 76018.4 开发目标软件 76218.5 学习系统调用 76318.6 保持简单 76418.7 事件缺失 76418.8 调用栈缺失 76618.9 打印时符号缺失(函数名称) 76718.10 跟踪时函数缺失 76818.11 反馈回路 76918.12 被丢掉的事件 769附录A bpftrace单行程序770附录B bpftrace备忘单775附录C BCC工具的开发778附录D C.BPF. 793附录E BPF指令812
大家准备好了吗?让我们出发!