Express Data Path (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 不保存对路由、流量控制钩子或其他类型数据包元数据的引用,而使用 sk_buff 的程序类型则会保存。
2. XDP 程序概述
XDP 程序的主要功能是对收到的数据包进