eBPF

Extended Berkeley Packet Filter

  1. eBPF 是一种数据包过滤技术,从 BPF 技术扩展而来
  2. BPF 提供了一种在内核事件用户程序事件发生时安全注入代码的机制,让非内核开发人员也可以对内核进行控制
  3. 随着内核的发展,BPF 从最初的数据包过滤,扩展到网络内核安全跟踪等,扩展后的 BPF 被称为 eBPF,早期的 BPF 被称为经典 BPF,即 cBPF
  4. 现代内核所运行的都是 eBPF

特性

  1. 在 eBPF 之前,内核模块注入内核的最主要机制
  2. 由于缺乏对内核模块安全控制,内核的基本功能很容易被一个有缺陷的内核模块破坏
  3. eBPF 借助 JIT,在内核中运行一个虚拟机,保证只有被验证安全eBPF 指令才会被内核执行
  4. 同时,eBPF 指令依然运行在内核中,无需向用户态复制数据,极大地提高了事件处理的效率
  5. eBPF 在故障诊断网络优化安全控制性能监控等领域获得了大量应用
    • 高性能网络负载均衡器 - Katran
    • 容器网络方案 - Cilium
    • 内核跟踪排错工具 - BCC + bpftrace

概览

image-20250206234335580

技术栈

掌握 eBPF 并不需要掌握内核开发

  1. 开源项目已经提供了大量工具,能解决故障诊断、性能监控、安全控制等绝大部分场景中的问题
  2. 需要开发新的 eBPF 程序时,内核社区提供了libbpf
    • 避免直接调用内核函数
    • 提供跨内核版本兼容性 - 一次编译到处执行

dcd84984b168a5534d69a445b08c692d