Notes about XDP
本文将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 方式:
- 性能敏感的处理逻辑下放到网卡驱动中,以提升性能;
- 其他的处理逻辑仍然走内核网络栈;
- 如果没有用到内核 helper 函数,那整个 XDP 程序都可以 offload 到网卡(目前 Netronome smart-NICs已经支持)。
参考资料: