BPF 之巔:洞悉 Linux 系統和應用性能 (BPF Performance Tools)

孫宇聰 等 孫宇聰,呂宏利,劉曉舟

買這商品的人也買了...

商品描述

本書作為全面介紹BPF技術的圖書,從BPF技術的起源到未來發展方向都有涵蓋,
不僅系統介紹了BPF的編程模型,還完整介紹了兩個主要的BPF前端編程框架——BCC和bpftrace,
更給出了一系列實現範例,生動展示了BPF技術的實際能力和未來發展前景。
本書的另一個關註方向是Linux系統性能和應用程序性能的調優,
內容涉及系統性能調優的策略、工具與實踐案例,不僅介紹了對應的BPF工具,
還著重介紹了這些工具如何與Linux傳統性能工具進行互補,這樣讀者可以選擇最佳方案。
本書介紹的工具小巧精緻,並提供了簡單易讀的源代碼,它們顯示出了BPF技術的魅力所在:
安全、高效、快捷的系統擴展力。
未來BPF技術在Linux中的應用場景會越來越多,越來越重要。
希望本書能在大家學習BPF技術並關註它的發展時提供幫助。

作者簡介

Brendan Gregg

Netflix 高級性能工程師
Brendan Gregg 是BPF(eBPF)的主要貢獻者,他幫助開發和維護了兩個主要的BPF 前端框架,
開創了BPF 用於可觀測性的先河,並創建了數十種基於BPF 的性能分析工具。
他編著的暢銷書有《性能之巔:洞悉系統、企業與雲計算》。

 

譯者介紹

孫宇聰

現任Facebook 運維工程師經理,曾在谷歌工作多年,
任谷歌高級SRE(Senior Site Reliblity Engineer),
Coding.net 前技術負責人,譯有《SRE:Google運維解密》
《架構整潔之道》等經典暢銷技術圖書。

 

呂宏利

資深SRE,現任職於谷歌基礎架構部。
之前曾負責谷歌搜索廣告和內容廣告系統運維工作,有多年分佈式系統研發與運維經驗。
對運維工具□台建設、監控、應用性能跟踪及分析、數據化運維等方面有深入的研究。

 

劉曉舟

畢業於北京大學計算機系,現供職於字節跳動公司係統部,任系統架構師。
他在字節跳動主持構建了基於eBPF 的大規模性能分析和網絡監控診斷□台,
閒暇時間也在相關開源社區提交代碼。
在加入字節跳動之前,他有10 年國家部委電子政務和大數據研究經歷。

目錄大綱

目錄
第壹章引言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

第壹0章網絡411
10.1 背景知識412
10.2 傳統工具422
10.3 BPF工具433
10.4 BPF單行程序507
10.5 可選練習513
10.6 小結515

第壹1章安全516
11.1 背景知識516
11.2 BPF工具523
11.3 BPF單行程序542
11.4 小結544

第壹2章編程語言.545
12.1 背景知識545
12.2 C 551
12.3 Java 560
12.4 bash shell 601
12.5 其他語言614
12.6 小結619

第壹3章應用程序.620
13.1 背景知識621
13.2 BPF工具625
13.3 BPF單行程序662
13.4 BPF單行程序示範664
13.5 小結664

第壹4章內核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

第壹5章容器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

第壹6章虛擬機管理器719
16.1 背景知識719
16.2 傳統工具722
16.3 訪客系統的BPF工具723
16.4 宿主機BPF工具732
16.5 小結737

第壹7章其他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

第壹8章建議、技巧和常見問題. 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