目录#
历史#
转折点 2014年 - ebpf扩展到用户空间
架构和组件[1][2]#
架构
- 数据(Map 用户态控制和加载)与功能分离(bpf内核字节码)
LLVM
- LLVM编译出加载到内核中执行的汇编代码。
- BPF是高级虚拟机, LLVM将C代码编译成BPF指令。
BPF验证器
JIT编译器
直接将BPF字节码转换为机器码,减少运行时的时间开销。BPF 映射Map
- 负责在内核和用户空间之间共享数据
- 双向的数据共享, 可以分别从内核和用户空间写入和读取数据
bpf运行时结构[2]#
bpf虚拟机实现包括一个解释器和JIT编译器
- JIT编译器负责生成处理器可直接执行的机器指令
- 指令集[4]
- 从cBPF的33个扩展到87个
- 最大指令数,初始值4096,现在放大到了100万条
- 11个寄存器
bpf辅助函数
跟踪支持的事件
- 动态跟踪
- kprobes/kretprobes
内核中 , 数量多,非稳定ABI, fentry/fexit替代 - uprobes/uretprobes
用户态
- kprobes/kretprobes
- 内核静态跟踪
- tracepoints
静态探针, 静态内核跟踪点
稳定ABI, 数量和场景可能受限
- tracepoints
- 动态跟踪
eBPF的应用场景和对应的工具[4]#
- 观察和跟踪
- memleak
内存使用情况 - bcc
- execsnoop - 系统调用,观察短时临时进程
- pwru
网络数据包的路径 - profile
火焰图 - kubectl trace
- memleak
- 网络
- Cilium eBPF Datapath 短路处理 [6]
- istio 使用 eBPF 优化流量劫持 [7]
- Cilium eBPF Datapath 短路处理 [6]
- 安全
eBPF开源项目#
- tools
- bcc
- BPFTrace
- kubectl-trace
- 安全
- Tracee - Aqua
- Falco - Sysdig
- Cilium Tetragon
- ELkeid - 字节
- eHIDS - 美团
- 可观测
- eBPF Exporter - eBPF+Prometheus
- Pixie
- Kindling - 谐云
参考#
- 《Linux内核观察技术BPF》
- 高效入门eBPF bilibili good - 西安邮电大学 贺东升
高效入门eBPF 相关的ppt - The BSD Packet Filter:A New Architecture for User-level Packet Capture bpf论文-1992
- ebpf技术简介(上) *** bili
- 深入浅出 eBPF|你要了解的 7 个核心问题 阿里炎寻
K8s问题排查全景图 - Cilium eBPF 网络解析
- Beyond Istio OSS —— Istio 服务网格的现状与未来
BPF 学习路径总结 未
Linux Extended BPF (eBPF) Tracing Tools brendangregg【云原生学院#25】云原生应用可观测性实践 未 ***