XDP(eXpress Data Path)是一种Linux内核技术,通过使用eBPF(extened Berkeley Packet Filter)机制,在内核空间中实现高性能的数据包处理和转发,可以显著提高网络性能,并提供了灵活的编程接口,使用户能够实现各种自定义的网络功能,与传统的用户空间数据包处理相比,XDP可以显著降低数据包处理的延迟和CPU占用。
XDP技术工作模式有两种,如表1所示。
名称 |
描述 |
---|---|
原生模式 |
驱动模式,将XDP程序运行在网卡驱动中,从网卡驱动中将网络数据包重定向,该模式支持的网卡较多且性能也很高,如果网卡支持的话,尽量使用该模式。 |
通用模式 |
XDP程序运行在Linux内核协议栈入口,无需驱动支持,性能低于XDP原生模式,但是即使XDP通用模式,也会给系统性能带来一定的提升。 |
在处理完一个数据包后,XDP程序会返回一个动作(Action)作为输出,代表程序退出后对数据包应该执行的动作,在内核头文件bpf.h定义了表2中5种动作类。
名称 |
描述 |
---|---|
XDP_ABORTED |
丢弃数据包,同时上报异常。 |
XDP_DROP |
仅丢弃数据包。 |
XDP_PASS |
数据包上送至内核进一步处理。 |
XDP_TX |
数据包直接向外转发。 |
XDP_REDIRECT |
数据包重定向至另一个网络接口。 |
SP600系列网卡支持XDP原生模式,即将XDP程序注册在网卡驱动中执行,另外仅支持XDP_DROP、XDP_PASS两种返回动作的后处理。