欢迎光临散文网 会员登陆 & 注册

BPF之巅:洞悉Linux系统和应用性能

2023-03-18 14:10 作者:破产的哔站用户  | 我要投稿

链接:https://pan.baidu.com/s/1P39fkfn_gqh6GiVchaIgbQ?pwd=isrb 

提取码:isrb

编辑推荐

适读人群 :BPF性能工具将是所有管理员、开发人员、支持人员和其他IT专业人员不可或缺的资源,他们可以在任何企业或云环境中使用任何最新的Linux发行版。

作为BPF技术的开拓者和专家,Brendan Gregg在本书中不仅展示了超过150个可以立即使用的分析工具和调试工具,对这些工具的应用场景进行了分析,还提供了开发自定义工具的分步指南。在本书中,读者可学习到如何分析CPU、内存、存储设备、文件系统、网络、编程语言、应用程序、容器、虚拟机管理器、安全及内核。Gregg带领读者由浅入深地了解从基础工具到进阶工具的使用,帮助读者收集更有用、更深入的技术信息,可以用来优化几乎任何类型的Linux系统和应用程序。

◎学习必备的跟踪知识,以及两个核心BPF前端:BCC和bpftrace。

◎掌握超过150个强大的BPF工具的使用方法,其中包括几十个专为本书开发的工具,全部可以下载使用。

◎掌握有效的分析策略、分析技巧,以及提高分析效率的小窍门。

◎掌握各种编程语言的分析技巧,包括编译型、JIT编译型、解释型语言,如C、Java、bash shell等。

◎学习如何生成各种新的性能指标、调用栈信息,以及自定义延迟直方图。

◎学习如何使用传统工具配合BPF分析来快速简单地实现目标。

◎探索基于BPF构建的高级工具:实现远程监控的PCP和Grafana组合、eBPF导出器,以及跟踪Kubernetes的kubectl—trace。


内容简介

《BPF之巅:洞悉Linux系统和应用性能》作为全面介绍 BPF 技术的图书,从 BPF 技术的起源到未来发展方向都有涵盖,不仅全面介绍了 BPF 的编程模型,还完整介绍了两个主要的 BPF 前端编程框架 — BCC 和 bpftrace,更给出了一系列实现范例,生动展示了 BPF技术的实际能力和未来发展前景。

本书的另一个关注方向是 Linux 系统性能和应用程序性能的调优。内容涉及系统性能调优的策略、工具与实践案例,不仅介绍了对应的 BPF 工具,还着重介绍了这些工具如何与 Linux 传统性能工具进行互补,这样读者可以有选择地进行使用。

本书介绍的工具小巧精致,并提供了简单易读的源代码,它们展示了 BPF 技术的魅力所在 :安全、高效、快捷的系统扩展力。未来 BPF 技术在 Linux 中的应用场景会越来越多,越来越重要。希望本书能在大家学习 BPF 技术并关注它的发展时提供帮助。


作者简介

Brendan Gregg(布兰登.格雷格)

Netflix 高级性能工程师

Brendan Gregg 是 BPF(eBPF)的主要贡献者,他帮助开发和维护了两个主要的 BPF 前端框架,开创了 BPF 用于可观测性的先河,并创建了数十种基于 BPF 的性能分析工具。他编著的畅销书有《性能之巅:洞悉系统、企业与云计算》。


译者介绍


孙宇聪:曾就职于美国加利福尼亚谷歌总部,后先后就任

Coding.net技术负责人、火币中国全球IT负责人及火币美国硅谷研发团队负责人,以及Facebook脸书运维技术经理等职位。译有《SRE:谷歌运维揭秘》《架构整洁之道》《BPF之巅:洞悉Linux系统和应用性能》等名著,曾在全球软件开发大会、Qcon、全球架构师峰会、 O'Reilly Velocity等科技峰会进行公开演讲。


吕宏利,资深SRE,现任职于谷歌基础架构部。之前曾负责谷歌搜索广告和内容广告系统运维工作,有多年分布式系统研发与运维经验。对运维工具平台建设、监控、应用性能跟踪及分析、数据化运维等方面有深入的研究。


刘晓舟,毕业于北京大学计算机系,现供职于字节跳动公司系统部,任系统架构师。他在字节跳动主持构建了基于 eBPF 的大规模性能分析和网络监控诊断平台,闲暇时间也在相关开源社区提交代码。在加入字节跳动之前,他有 10 年国家部委电子政务和大数据研究经历。


目录

第1章 引 言1

1.1 BPF和eBPF是什么 1

1.2 跟踪、嗅探、采样、剖析和可观测性分别是什么 2

1.3 BCC、bpftrace和IO Visor 3

1.4 初识BCC:快速上手 4

1.5 BPF跟踪的能见度 7

1.6 动态插桩:kprobes和uprobes 8

1.7 静态插桩:tracepoint和USDT 9

1.8 初识bpftrace:跟踪open() 10

1.9 再回到BCC:跟踪open() 13

1.10 小结 15

第2章 技术背景16

2.1 图释BPF 16

2.2 BPF 17

2.3 扩展版BPF 18

2.4 调用栈回溯 41

2.5 火焰图 44

2.6 事件源 48

2.7 kprobes 49

2.8 uprobes 53

2.9 跟踪点 57

2.10 USDT 62

2.11 动态USDT 66

2.12 性能监控计数器 68

2.13 perf_events 69

2.14 小结 70

第3章 性能分析71

3.1 概览 71

3.2 性能分析方法论 73

3.3 Linux 60秒分析 77

3.4 BCC工具检查清单 84

3.5 小结 90

第4章 BCC91

4.1 BCC的组件 92

4.2 BCC的特性 92

4.3 安装BCC 94

4.4 BCC的工具 96

4.5 funccount 100

4.6 stackcount 105

4.7 trace 110

4.8 argdist 117

4.9 工具文档 121

4.10 开发BCC工具 126

4.11 BCC的内部实现 127

4.12 BCC的调试 128

4.13 小结 136

第5章 bpftrace137

5.1 bpftrace的组件 138

5.2 bpftrace的特性 139

5.3 bpftrace的安装 141

5.4 bpftrace工具 143

5.5 bpftrace单行程序 145

5.6 bpftrace的文档 146

5.7 bpftrace编程 146

5.8 bpftrace的帮助信息 155

5.9 bpftrace的探针类型 157

5.10 bpftrace的控制流 163

5.11 bpftrace的运算符 164

5.12 bpftrace的变量 165

5.13 bpftrace的函数 170

5.14 bpftrace映射表的操作函数 177

5.15 bpftrace的下一步工作 183

5.16 bpftrace的内部运作 185

5.17 bpftrace的调试 186

5.18 小结 190

第6章 CPU.191

6.1 背景知识 192

6.2 传统工具 197

6.3 BPF工具 210

6.4 BPF单行程序 251

6.5 可选练习 253

6.6 小结 254

第7章 内存.255

7.1 背景知识 256

7.2 传统工具 263

7.3 BPF工具 269

7.4 BPF单行程序 288

7.5 可选练习 289

7.6 小结 290

第8章 文件系统291

8.1 背景知识 292

8.2 传统工具 296

8.3 BPF工具 302

8.4 BPF单行程序 353

8.5 可选练习 359

8.6 小结 360

第9章 磁盘I/O361

9.1 背景知识 362

9.2 传统工具 367

9.3 BPF工具 372

9.4 BPF单行程序 406

9.5 可选练习 409

9.6 小结 410

第10章 网络411

10.1 背景知识 412

10.2 传统工具 422

10.3 BPF工具 433

10.4 BPF单行程序 507

10.5 可选练习 513

10.6 小结 515

第11章 安全516

11.1 背景知识 516

11.2 BPF工具 523

11.3 BPF单行程序 542

11.4 小结 544

第12章 编程语言.545

12.1 背景知识 545

12.2 C 551

12.3 Java 560

12.4 bash shell 601

12.5 其他语言 614

12.6 小结 619

第13章 应用程序.620

13.1 背景知识 621

13.2 BPF工具 625

13.3 BPF单行程序 662

13.4 BPF单行程序示范 664

13.5 小结 664

第14章 内核665

14.1 背景知识 666

14.2 分析策略 669

14.3 传统工具 670

14.4 BPF工具 675

14.5 BPF单行程序 697

14.6 BPF单行程序示范 699

14.7 挑战 700

14.8 小结 700

第15章 容器701

15.1 背景知识 701

15.1.1 BPF 的分析能力 703

15.1.2 挑战 703

15.1.3 分析策略 706

15.2 传统工具 706

15.2.1 从主机上分析 706

15.2.2 在容器内分析 707

15.2.3 systemd-cgtop 707

15.2.4 kubectl top 708

15.2.5 docker stats 708

15.2.6 /sys/fs/cgroups 709

15.2.7 perf 709

15.3 BPF工具 710

15.4 BPF单行程序 717

15.5 可选练习 717

15.6 小结 718

第16章 虚拟机管理器719

16.1 背景知识 719

16.2 传统工具 722

16.3 访客系统的BPF工具 723

16.4 宿主机BPF工具 732

16.5 小结 737

第17章 其他BPF性能工具738

17.1 Vector和Performance Co-Pilot(PCP) 738

17.2 Grafana和Performance Co-Pilot 747

17.3 Cloudflare eBPF Prometheus Exporter(配合Grafana) 750

17.4 kubectl-trace 752

17.5 其他工具 755

17.6 小结 755

第18章 建议、技巧和常见问题. 756

18.1 典型事件的频率和额外开销 756

18.2 以49Hz或99Hz为采样频率 760

18.3 黄猪和灰鼠 760

18.4 开发目标软件 762

18.5 学习系统调用 763

18.6 保持简单 764

18.7 事件缺失 764

18.8 调用栈缺失 766

18.9 打印时符号缺失(函数名称) 767

18.10 跟踪时函数缺失 768

18.11 反馈回路 769

18.12 被丢掉的事件 769

附录A bpftrace单行程序770

附录B bpftrace备忘单775

附录C BCC工具的开发778

附录D C.BPF. 793

附录E BPF指令812


查看全部↓

前言/序言

前 言

“扩展版 BPF 的使用案例 :……真疯狂啊。” ——Alexei Starovoitov,新 BPF 的创建者,2015 年 2 月

2014 年 7 月,Alexei Starovoitov 到访了 Netflix 公司位于加州 Los Gatos 的办公室,对他开发的一项有趣的技术进行研讨 :扩展版的伯克利数据包过滤器(简写为 eBPF 或者 BPF)。BPF 是一项用于改进包过滤的冷门技术,此时 Alexei 已经有了对其在包过滤之外的领域进行扩展的远见卓识。Alexei 和另外一名网络工程师 Daniel Borkmann 并肩协作,将 BPF 改写为一个通用的虚拟机,可以运行高级的网络程序和其他类型的程序。

这是一个令人惊叹的想法。有一种使用场景令我十分感兴趣,那就是可以将 BPF 用在开发性能分析的工具上,我看到了 BPF 能够提供我所需要的可编程能力。于是我们做了一个约定 :如果 Alexei 能够将 BPF 与数据包之外的东西相连接,我将使用它来开发性能分析工具。

BPF 现在已经可以挂载到任何事件源上,它也成为系统工程领域一项热门的新技术,拥有众多活跃的贡献者。到目前为止,我已经开发并公开了超过 70 个 BPF 性能分析工具,它们在全球范围内得到广泛使用,并且在 Netflix、Facebook 等公司中进入服务器的默认安装软件列表。我还专门为本书单独开发了许多工具,同时也引入不少其他人贡献的工具。很荣幸能够在这本书中为大家分享这些实用的工具,这样你就可以使用它们进行性能分析、故障定位以及其他种种工作。


BPF之巅:洞悉Linux系统和应用性能的评论 (共 条)

分享到微博请遵守国家法律