XDP¶
更新于 2024-03-23
简介¶
XDP,全称 eXpress Data Path
是 Linux 内核中的一个新功能
它提供了一种在网络驱动接收数据包时进行早期处理的机制
XDP可以在数据包被内核完全处理之前
就在网络设备驱动层进行数据包的丢弃、修改或者转发等操作。
XDP的主要目标是提高网络性能
特别是在处理大量小数据包的场景下
通过在网络驱动层进行数据包处理
XDP 可以避免内核栈的开销
从而大大提高数据包处理的效率。
XDP使用 eBPF (Extended Berkeley Packet Filter) 技术来实现用户自定义的数据包处理逻辑。
用户可以编写 eBPF 程序
然后将这些程序加载到内核中
由 XDP 在接收数据包时执行这些程序。
架构¶
- XDP driver hook:XDP 程序的主入口,在网卡收到包执行。
- eBPF virtual machine:执行 XDP 程序的字节码,以及对字节码执行 JIT 以提升性能。
- BPF maps:内核中的 key/value 存储,作为图中各系统的主要通信通道。
- eBPF verifier:加载程序时对其执行静态验证,以确保它们不会导致内核崩溃。
报文动作¶
- 丢弃
- 发送
- 重定向
- 放行