跳转至

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:加载程序时对其执行静态验证,以确保它们不会导致内核崩溃。

报文动作

  • 丢弃
  • 发送
  • 重定向
  • 放行

参考