本文将mark下eXpress Data Path (XDP)相关notes。

What

XDP其实是位于网卡驱动程序里的一个快速处理数据包的HOOK点,为什么快?因为数据包处理位置非常底层,避开了很多内核skb处理开销。

XDP暴露了一个可以加载BPF程序的网络钩子。在这个钩子中,程序能够对传入的数据包进行任意修改和快速决策,避免了内核内部处理带来的额外开销。这使得XDP在性能速度方面成为最佳钩子,例如缓解DDoS攻击等。

相关工作

Motivation

Introduction to eBPF and XDP

建议阅读上述资料,会对XDP有不错的认识。

以DDoS为例:

The XDP program is executed at the earliest possible moment after a packet is received from the hardware, before the kernel allocates its per-packet sk_buff data structure.

代码层的理解:

架构

Execution flow of a typical XDP program

详情参考xdp paper3.1 The XDP Driver Hook。

总结

建议阅读[译] [论文] XDP (eXpress Data Path):在操作系统内核中实现快速、可编程包处理(ACM,2018)

某种意义上来说,XDP 可以认为是一种 offload 方式:

  1. 性能敏感的处理逻辑下放到网卡驱动中,以提升性能;
  2. 其他的处理逻辑仍然走内核网络栈;
  3. 如果没有用到内核 helper 函数,那整个 XDP 程序都可以 offload 到网卡(目前 Netronome smart-NICs已经支持)。

参考资料:

  1. xdp paper
  2. xdp slides
  3. [译] [论文] XDP (eXpress Data Path):在操作系统内核中实现快速、可编程包处理(ACM,2018)
  4. 初识XDP
  5. 实现一个基于XDP_eBPF的学习型网桥
  6. Introduction to eBPF and XDP