eBPF开发指南从原理到应用现已上架JD
2024-12-24 11:35:0 Author: mp.weixin.qq.com(查看原文) 阅读量:1 收藏

刚上架链接,对eBPF技术有兴趣的朋友可以看看。
图书目录:
第 1 章 eBPF 概述 1
1.1 eBPF 是什么 1
1.2 eBPF 发展历史 2
1.3 eBPF 应用领域 4
1.4 eBPF 如何运行 5
1.5 eBPF 相关工具与库 6
1.5.1 BCC 6
1.5.2 bpftrace 7
1.5.3 libbpf 8
1.6 初识 eBPF 程序 8
1.7 本章小结 9
第 2 章 eBPF 开发环境准备 10
2.1 Linux 发行版本的选择 10
2.2 编程语言的选择 12
2.3 安装和配置 Linux 操作系统
环境 13
2.3.1 Windows 上安装和配置
Linux 14
2.3.2 macOS 上安装和配置
Linux 16
2.3.3 其他环境安装 17
2.4 以二进制方式安装 eBPF 开发
工具与库 20
2.4.1 安装 BCC 20
2.4.2 安装 bpftrace 21
2.4.3 安装 libbpf 21
2.5 以源码方式安装 eBPF 开发
工具与库 22
2.5.1 编译安装 BCC 22
2.5.2 编译安装 bpftrace 23
2.5.3 编译安装 libbpf 24
2.6 本章小结 24
第 3 章 Linux 动态追踪技术 25
3.1 Linux 动态追踪系统 25
3.2 前端工具和库 26
3.2.1 strace 与 ltrace 26
3.2.2 DTrace 29
3.2.3 SystemTap 30
3.2.4 LTTng 30
3.2.5 trace-cmd 31
3.2.6 perf 31
3.3 数据采集机制 35
3.3.1 ptrace 系统调用 36
3.3.2 perf_event_open 系统
调用 36
3.3.3 BPF 系统调用 37
3.3.4 其他子系统与内核
模块 37
3.4 跟踪文件系统 37
3.4.1 挂载位置 38
3.4.2 目录详情 38
3.4.3 跟踪器 43
3.4.4 跟踪选项 44
3.4.5 环形缓冲区 47
3.5 Linux 内核数据源 48
3.5.1 ftrace 49
3.5.2 kprobe/kretprobe 70
目录
- 2 -
3.5.3 uprobe/uretprobe 74
3.5.4 tracepoint 77
3.6 eBPF 数据采集点 83
3.7 本章小结 84
第 4 章 eBPF 程序入门 85
4.1 第 一个 eBPF 程序 85
4.1.1 第 一个 BCC 程序 85
4.1.2 第 一个 C 语言版本的
eBPF 程序 86
4.2 eBPF 程序功能解读 91
4.2.1 加载 eBPF 字节码 92
4.2.2 BPF 系统调用 93
4.2.3 attach_kprobe 96
4.2.4 perf_event_open 系统
调用 96
4.3 eBPF 授权协议 102
4.4 eBPF 指令集 103
4.4.1 eBPF 寄存器 103
4.4.2 eBPF 指令编码 104
4.4.3 指令列表 105
4.4.4 eBPF 指令分析 109
4.4.5 BCC 中 eBPF 程序指令的
生成 110
4.4.6 eBPF 指令反汇编 112
4.4.7 eBPF 验证机制 117
4.5 libbpf 126
4.5.1 libbpf 功能 126
4.5.2 libbpf 接口 127
4.6 libbpf 案例程序 128
4.7 重写 eBPF 程序 131
4.7.1 如何编译 132
4.7.2 编译内核态程序 135
4.7.3 编译生成 skel 头文件 136
4.7.4 编译用户态程序 141
4.8 本章小结 143
第 5 章 BCC 144
5.1 BCC 工具集 145
5.1.1 tools 工具集 146
5.1.2 libbpf-tools 工具集 146
5.2 BCC 常用的工具 147
5.2.1 opensnoop 147
5.2.2 exitsnoop 149
5.2.3 execsnoop 150
5.3 使用 Python 开发 eBPF 程序 152
5.3.1 BPF API 152
5.3.2 opensnoop 程序解读 157
5.4 使用 libbcc 开发 eBPF 程序 165
5.4.1 libbcc 的编译与安装 166
5.4.2 重写 eBPF 程序 167
5.4.3 编译与测试 175
5.5 本章小结 181
第 6 章 bpftrace 182
6.1 bpftrace 的功能和特性 182
6.1.1 工程结构 182
6.1.2 探针类型 184
6.1.3 特性 185
6.1.4 主程序 185
6.2 bpftrace 的脚本语法 191
6.3 探针类型 198
6.3.1 kprobe 和 kretprobe 198
6.3.2 uprobe 和 uretprobe 200
6.3.3 跟踪点 202
6.3.4 USDT 204
6.3.5 定时器事件 208
6.3.6 软件与硬件事件 209
6.3.7 内存监视点 211
6.3.8 kfunc 和 kretfunc 214
6.3.9 迭代器 215
6.3.10 开始块与结束块 217
目录
- 3 -
6.4 bpftrace 变量 217
6.4.1 内置变量 217
6.4.2 基础变量 218
6.4.3 关联数组 221
6.5 bpftrace 函数 221
6.5.1 基础函数 221
6.5.2 映射表相关函数 225
6.6 bpftrace 的工作原理 226
6.7 bpftrace 工具集 231
6.8 本章小结 236
第 7 章 使用 Golang 开发 eBPF 程序 238
7.1 Go 语言开发环境介绍 238
7.2 使用 libbpfgo 开发 eBPF
程序 239
7.2.1 搭建 libbpfgo 开发
环境 239
7.2.2 开发 eBPF 程序 241
7.3 Cilium 与 ebpf-go 244
7.3.1 搭建 ebpf-go 开发
环境 244
7.3.2 使用 ebpf-go 开发 eBPF
程序 245
7.3.3 bpf2go 和 bpftool 249
7.4 本章小结 255
第 8 章 BTF 与 CO-RE 256
8.1 什么是 CO-RE 257
8.2 BTF 详解 258
8.2.1 BTF 数据结构 258
8.2.2 BTF 内核 API 261
8.2.3 生成 BTF 信息 262
8.2.4 二进制中的 BTF 264
8.2.5 BTF 相关辅助函数 265
8.3 对 BTF 的处理 266
8.3.1 编译器对 BTF 的处理 266
8.3.2 libbpf 对 BTF 的处理 268
8.4 读取内核结构体字段 269
8.4.1 案例一:直接访问
结构体 269
8.4.2 案例二:使用 bpf_get_
current_task_btf 270
8.4.3 案例三:使用 BPF_
CORE_READ 271
8.4.4 BTF 相关的其他宏 273
8.5 低版本系统如何支持 BTF 274
8.5.1 什么是 BTFHub 275
8.5.2 生成*小化的 BTF
信息 279
8.5.3 编译运行 BTF-App 280
8.6 本章小结 285
第 9 章 eBPF 程序的数据交换 286
9.1 eBPF 程序的数据结构 286
9.1.1 什么是 eBPF map 286
9.1.2 map 支持的数据类型 291
9.2 map 操作接口 294
9.2.1 eBPF map 相关的 API 294
9.2.2 创建 map 299
9.2.3 添加数据 300
9.2.4 查询 301
9.2.5 遍历数据 301
9.2.6 删除数据 302
9.2.7 使用 bpftool 操作 map 302
9.3 map 在内核中的实现 306
9.3.1 创建 map 对象 307
9.3.2 map 对象的生命周期 314
9.3.3 eBPF 对象持久化 315
9.4 ftrace 的 eBPF 数据交换接口 317
9.4.1 bpf_trace_printk 317
9.4.2 封装的 bpf_printk 宏 320
9.4.3 trace 日志的输出格式 321
目录
- 4 -
9.5 perf 事件 322
9.5.1 perf 事件的 map 类型 323
9.5.2 内核态程序写入 perf
事件 324
9.5.3 用户态程序读取 perf
事件 327
9.5.4 BCC 中 perf 事件处理 330
9.6 环形缓冲区 333
9.6.1 eBPF ringbuf 的 map
类型 334
9.6.2 内核态程序如何使用
ringbuf 335
9.6.3 用户态程序如何使用
ringbuf 344
9.6.4 完整的数据交换实例 346
9.7 本章小结 351
第 10 章 eBPF 程序类型与挂载点 353
10.1 常见的 eBPF 程序类型 353
10.1.1 跟踪和分析类 355
10.1.2 网络类 356
10.2 eBPF 程序挂载点 357
10.3 函数跟踪技术 358
10.3.1 内核态程序跟踪 358
10.3.2 用户态程序跟踪 360
10.4 kprobe 361
10.4.1 内核中使用 kprobe
探针 361
10.4.2 kretprobe 365
10.4.3 eBPF 中创建 kprobe
跟踪 368
10.5 uprobe 372
10.5.1 创建单行程序测试
uprobe 372
10.5.2 eBPF 中创建 uprobe
跟踪 373
10.5.3 bashreadline 程序 377
10.6 USDT 379
10.6.1 在 BCC 中使用
USDT 379
10.6.2 在 libbpf 中使用
USDT 384
10.7 本章小结 387
第 11 章 eBPF 内核辅助方法 388
11.1 如何查阅内核辅助方法 388
11.2 辅助方法的实现原理 389
11.3 eBPF 内核辅助方法分类 392
11.3.1 网络相关的辅助
方法 392
11.3.2 数据处理类辅助
方法 396
11.3.3 跟踪相关的辅助
方法 398
11.3.4 系统功能性辅助
方法 399
11.4 常用的 eBPF 内核辅助方法 401
11.5 本章小结 404
第 12 章 Linux 性能分析 405
12.1 CPU 406
12.1.1 CPU 基础知识 406
12.1.2 传统 CPU 分析工具 409
12.1.3 eBPF 相关分析工具 412
12.1.4 CPU 分析策略 413
12.2 内存 414
12.2.1 内存基础知识 414
12.2.2 传统内存分析工具 419
12.2.3 eBPF 内存分析工具 419
12.2.4 内存分析方法 420
12.3 磁盘 I/O 420
12.3.1 磁盘 I/O 基础知识 420
目录
- 5 -
12.3.2 传统分析工具 423
12.3.3 BCC 中的分析工具 423
12.3.4 磁盘性能分析方法 423
12.4 网络 424
12.4.1 网络基础知识 424
12.4.2 传统网络分析工具 426
12.4.3 eBPF 网络分析
工具 426
12.5 常用分析方法和案例 427
12.6 本章小结 428
第 13 章 eBPF 实战应用 429
13.1 在网络*中的应用 429
13.2 在软件动态分析中的应用 432
13.3 在*环境增强中的应用 439
13.4 在网络数据处理中的应用 443
13.5 在系统与云原生*中的
应用 446
13.6 本章小结 448
发点优惠券,本月星球新进入的朋友,可以联系我再送星球一年。

文章来源: https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&mid=2247484747&idx=1&sn=d8c8cb026e6e086302131e146e8adbf1&chksm=fcdd0546cbaa8c506e02c86c3157834c9961cb03d761974bd8b82de321564010f794b02cb633&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh