深入理解eBPF與可觀測性
毛文安 鄭昱笙 程書意 廖肇燕
- 出版商: 機械工業
- 出版日期: 2025-03-01
- 定價: $594
- 售價: 8.5 折 $505
- 語言: 簡體中文
- 頁數: 336
- ISBN: 7111774809
- ISBN-13: 9787111774808
下單後立即進貨 (約4週~6週)
商品描述
本書由龍蜥社區操作系統及eBPF專家聯合撰寫,帶領讀者一次性學透eBPF原理與Linux可觀測性,讓性能與安全問題無所遁形,效果立竿見影。具體來說,本書系統介紹eBPF技術生態、特性、五大主流開發框架,並深度剖析應用、網絡、內存、I/O、調度、安全六大關鍵Linux可觀測性實踐。 本書共9章,從邏輯上分為兩部分。第一部分為eBPF基礎(第1~3章):第1章概述eBPF技術的發展歷程和應用場景;第2章深入解析eBPF的指令集、輔助函數及程序類型設計原理;第3章介紹如何使用libbpf、BCC、eunomia-bpf、Coolbpf等工具開發eBPF程序,尤其是BTF和CO-RE技術的應用。第二部分為eBPF可觀測性實踐(第4~9章),第4章探討eBPF在用戶態應用層面的可觀測實踐,如Java應用的GC觀測;第5章講解內核網絡收發包流程及使用eBPF分析網絡抖動的方法;第6章介紹內存性能瓶頸的優化方法,包括使用eBPF檢測內存分配延遲和內存泄漏;第7章分析I/O子系統的原理和性能瓶頸點,並介紹使用eBPF監測I/O延遲分佈和I/O卡頓問題;第8章介紹eBPF在調度系統上的觀測實踐,包括長時間關中斷和持續性能追蹤等;第9章則聚焦於eBPF在系統安全上的實踐,如使用LSM進行安全防禦、監控進程的各種行為等。
作者簡介
毛文安,阿裡雲高級技術專家,龍蜥社區eBPF技術探索SIG(特別興趣小組)及“酷玩BPF”公眾號負責人,龍蜥社區“eBPF技術實踐白皮書”主要作者,也是系統智能運維平臺SysOM以及eBPF開發功能庫Coolbpf的架構師。具有十餘年Linux操作系統開發、維護及性能調優經驗,目前專註內核網絡、AI等新特性的研究與實踐。
目錄大綱
前言
第1章 eBPF的發展與應用
1.1 eBPF概述
1.1.1 Linux的跟蹤與診斷技術簡介
1.1.2 eBPF的發展史
1.1.3 eBPF與cBPF的功能區別
1.1.4 eBPF與內核模塊
1.1.5 eBPF的優勢與劣勢
1.2 eBPF應用場景
1.2.1 eBPF跟蹤與性能分析
1.2.2 eBPF與可觀測
1.2.3 eBPF與網絡
1.2.4 eBPF與安全
1.3 eBPF基礎架構
1.3.1 eBPF加載流程和相關組件
1.3.2 eBPF的JIT編譯原理
1.3.3 eBPF的掛載與執行
1.4 本章小結
第2章 eBPF的特性解析
2.1 eBPF指令架構
2.1.1 cBPF指令集
2.1.2 eBPF指令集
2.1.3 使用C語言編寫eBPF程序
2.1.4 使用匯編語言編寫eBPF程序
2.1.5 使用字節碼編寫eBPF程序
2.2 eBPF系統調用
2.2.1 eBPF系統調用的函數原型
2.2.2 eBPF系統調用的類型
2.2.3 eBPF系統調用的數據結構解析
2.3 eBPF輔助函數
2.3.1 eBPF輔助函數的設計
2.3.2 eBPF輔助函數的實現
2.4 eBPF程序類型設計
2.4.1 eBPF程序類型
2.4.2 驗證器接口設計
2.4.3 測試接口設計
2.4.4 卸載接口設計
2.5 跟蹤診斷類eBPF程序
2.5.1 kprobe/kretprobe類程序
2.5.2 uprobe/uretprobe類程序
2.5.3 tracepoint類程序
2.5.4 perf事件類程序
2.6 網絡處理類:XDP程序
2.6.1 XDP基本原理
2.6.2 XDP應用場景
2.6.3 XDP內核解析
2.7 本章小結
第3章 eBPF開發框架
3.1 libbpf
3.1.1 使用libbpf開發eBPF程序
3.1.2 BPF類型格式
3.1.3 CO-RE功能
3.2 BCC
3.2.1 環境配置
3.2.2 使用BCC開發eBPF程序
3.2.3 編譯運行
3.3 bpftrace
3.3.1 環境配置
3.3.2 使用bpftrace開發eBPF程序
3.3.3 編譯運行
3.4 eunomia-bpf
3.4.1 環境配置
3.4.2 使用eunomia-bpf開發eBPF程序
3.4.3 編譯運行
3.5 Coolbpf
3.5.1 環境配置
3.5.2 使用Coolbpf開發eBPF程序
3.5.3 編譯運行
3.6 eBPF開發框架對比
3.7 本章小結
第4章 基於eBPF的應用可觀測實踐
4.1 使用uprobe/USDT觀測應用程序
4.1.1 uprobe:用戶空間的動態追蹤工具
4.1.2 USDT:用戶空間的靜態追蹤點技術
4.2 Nginx函數延遲觀測與性能分析
4.2.1 基於eBPF分析函數延遲
4.2.2 Nginx中與性能相關的關鍵函數
4.2.3 測試Nginx的函數延遲
4.3 Java應用的GC觀測
4.3.1 GC策略簡介與問題排查示例
4.3.2 通過eBPF實現GC觀測
4.4 MySQL慢查詢監測與排障實踐
4.4.1 慢查詢的常見原因
4.4.2 慢查詢監測方法與示例場景
4.4.3 利用bpftrace程序追蹤MySQL查詢
4.5 觀測SSL/TLS明文數據
4.5.1 TLS的工作原理
4.5.2 OpenSSL API工作機制分析
4.5.3 sslsniff的eBPF內核代碼編寫
4.5.4 sslsniff的用戶態代碼分析
4.5.5 編譯與運行sslsniff工具
4.6 使用eBPF跟蹤Go協程狀態
4.6.1 跟蹤Go協程狀態的eBPF內核代碼
4.6.2 運行eBPF程序追蹤Go協程狀態
4.7 本章小結
第5章 基於eBPF的網絡可觀測實踐
5.1 內核網絡協議棧
5.1.1 網絡發包流程
5.1.2 網絡收包流程
5.1.3 內核網絡抖動問題分析
5.2 網絡可觀測實踐
5.2.1 HTTP流量統計
5.2.2 TCP連接信息和往返時間分析
5.2.3 XDP實現可編程包處理
5.2.4 基於eBPF的流量控制實踐
5.2.5 基於sockmap進行數據轉發
5.2.6 基於sockops監測服務響應延遲
5.2.7 Virtio網卡隊列可觀測
5.3 本章小結
第6章 基於eBPF的內存可觀測實踐
6.1 系統內存的申請流程
6.2 內存性能瓶頸點與解決思路
6.2.1 常見的內存性能瓶頸
6.2.2 內存性能瓶頸診斷方法
6.3 實戰:頁面錯誤監控
6.3.1 什麽是頁面錯誤
6.3.2 有關頁面錯誤的跟蹤點
6.3.3 頁面錯誤事件可觀測實現方案
6.4 實戰:使用cachetop分析文件緩存
6.4.1 使用常規方法分析文件緩存
6.4.2 cachetop實現原理
6.4.3 cachetop內核部分代碼實現
6.4.4 cachetop用戶部分代碼實現
6.4.5 運行結果
6.5 實戰:使用memleak跟蹤內存泄漏
6.5.1 調試內存泄漏的挑戰
6.5.2 memleak的實現原理
6.5.3 memleak內核部分代碼實現
6.5.4 用戶態程序實現
6.5.5 運行結果
6.6 本章小結
第7章 基於eBPF的I/O可觀測實踐
7.1 I/O子系統性能瓶頸點
7.2 I/O衡量指標
7.3 使用eBPF進行I/O流量分析
7.3.1 iofsstat的功能
7.3.2 iofsstat的實現
7.4 實戰:使用eBPF分析I/O延遲
7.4.1 iolatency延遲分析功能介紹
7.