eBPFDPDK对比

一句话总结

  • eBPF 更适合内核态、可编程网络、安全观测和流量控制(sidecar-less)
  • DPDK 更适合极致性能需求的用户态数据平面,如 NFV、防火墙、网关等

一、核心区别

项目 eBPF DPDK
所在层级 内核态 (但运行环境隔离,安全) 用户态
编程语言 C(受限子集)+ BPF helper C/C++(完全用户态自由编程)
典型性能 单核 5-10M pps(随 usecase) 单核 20-50M pps(甚至更高)
零拷贝 不支持(依赖内核栈) 支持(hugepage、DMA 零拷贝)
兼容性 与 Linux 网络协议栈兼容 完全绕过内核网络栈
部署复杂度 低(只需较新内核) 高(需绑定网卡、配置 hugepage 等)
典型场景 网络观测、安全、流控、sidecar-less vSwitch、防火墙、包处理引擎

二、典型使用场景

eBPF:

  • Kubernetes CNI 插件(如 Cilium)
  • 流量可视化、网络审计、安全策略(如 kube-proxy 替代)
  • DDOS 预防、动态丢包、流控
  • 系统调用追踪(如 bpftrace、bcc)
  • socket filter、XDP、tc BPF

代表项目:


DPDK:

  • 自定义高性能 L2/L3/L4 路由/防火墙
  • DPI/IPS/IDS
  • 软件 vRouter/vSwitch(如 OVS-DPDK)
  • 5G/边缘计算下的 NFV 数据平面

代表项目:


三、学习入门建议

场景 推荐路线
想快速观察、控制网络、做安全分析(如在 Kubernetes 环境) eBPF(推荐 Cilium + bpftrace 入门)
目标是极致性能、构建高吞吐网络栈,如边界网关、L7防火墙 DPDK(推荐先用简单 l2fwd 示例练习)
需要容器场景兼容性(如 Cloud Native) 首选 eBPF
不介意配置复杂、目标为性能极限 DPDK 更合适

四、建议的上手步骤

eBPF 学习路线:

  1. 熟悉内核网络栈基本流程
  2. 学习 bpftrace + BCC 基础命令
  3. 写一个简单的 socket filter / XDP 程序(推荐使用 Cilium 的教程)
  4. 研究 tc BPF / cgroup BPF 的使用
  5. 熟悉 Cilium / Katran / BPF helper API

推荐起点:https://ebpf.io/


DPDK 学习路线:

  1. 搭建 DPDK 环境(hugepage + vfio)
  2. 运行并修改官方 l2fwd 示例
  3. 深入理解 mbuf、ring、polling 模型
  4. 使用多核收发 + flow steering
  5. 学习如何与 netmap/ovs-vswitch 搭配

推荐起点:https://core.dpdk.org/doc/


总结

场景 建议
做云原生、安全审计、Kubernetes 网络 学 eBPF(更现代、生态活跃)
做 NFV、vRouter、L7包处理等极限性能优化 DPDK 是首选