快速数据路径(XDP):高性能网络数据包处理方案
1. XDP 概述
快速数据路径(Express Data Path,XDP)是 Linux 网络数据路径中一种安全、可编程、高性能且与内核集成的数据包处理器。当网卡(NIC)驱动接收到数据包时,它会执行 BPF 程序,从而能在最早的时间点对接收的数据包做出决策,如丢弃、修改或允许其继续传输。
XDP 程序之所以快速,不仅在于其执行点,还与以下设计决策有关:
- 数据包处理过程中无需进行内存分配。
- 仅处理线性、未分段的数据包,并拥有数据包的起始和结束指针。
- 不访问完整的数据包元数据,因此程序接收的输入上下文类型为xdp_buff,而非sk_buff结构体。
- 作为 eBPF 程序,XDP 程序具有有界的执行时间,在网络管道中的使用成本固定。
需要注意的是,XDP 并非内核旁路机制,它旨在与其他内核组件和 Linux 内部安全模型集成。
xdp_buff结构体用于向使用 XDP 框架提供的直接数据包访问机制的 BPF 程序呈现数据包上下文,可将其视为sk_buff的“轻量级”版本。二者的区别在于,sk_buff还持有并允许操作数据包的元数据(如协议、标记、类型),这些元数据仅在网络管道的更高级别可用。xdp_buff创建早且不依赖其他内核层,这使得使用 XDP 获取和处理数据包更快。此外,xdp_buff不持有路由、流量控制钩子或其