eBPF - Overview
eBPF
Extended Berkeley Packet Filter
- eBPF 是一种数据包过滤技术,从 BPF 技术扩展而来
- BPF 提供了一种在内核事件和用户程序事件发生时安全注入代码的机制,让非内核开发人员也可以对内核进行控制
- 随着内核的发展,BPF 从最初的数据包过滤,扩展到网络、内核、安全、跟踪等,扩展后的 BPF 被称为 eBPF,早期的 BPF 被称为经典 BPF,即 cBPF
- 现代内核所运行的都是 eBPF
特性
- 在 eBPF 之前,内核模块是注入内核的最主要机制
- 由于缺乏对内核模块的安全控制,内核的基本功能很容易被一个有缺陷的内核模块破坏
- eBPF 借助 JIT,在内核中运行一个虚拟机,保证只有被验证安全的 eBPF 指令才会被内核执行
- 同时,eBPF 指令依然运行在内核中,无需向用户态复制数据,极大地提高了事件处理的效率
- eBPF 在故障诊断、网络优化、安全控制、性能监控等领域获得了大量应用
- 高性能网络负载均衡器 - Katran
- 容器网络方案 - Cilium
- 内核跟踪排错工具 - BCC + bpftrace
概览
技术栈
掌握 eBPF 并不需要掌握内核开发
- 开源项目已经提供了大量工具,能解决故障诊断、性能监控、安全控制等绝大部分场景中的问题
- 需要开发新的 eBPF 程序时,内核社区提供了libbpf 库
- 避免直接调用内核函数
- 提供跨内核版本的兼容性 - 一次编译到处执行
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.