XDP

XDP(eXpress Data Path)是一种Linux内核技术,通过使用eBPF(extened Berkeley Packet Filter)机制,在内核空间中实现高性能的数据包处理和转发,可以显著提高网络性能,并提供了灵活的编程接口,使用户能够实现各种自定义的网络功能,与传统的用户空间数据包处理相比,XDP可以显著降低数据包处理的延迟和CPU占用。

XDP技术工作模式有两种,如表1所示。

表1 XDP工作模式

名称

描述

原生模式

驱动模式,将XDP程序运行在网卡驱动中,从网卡驱动中将网络数据包重定向,该模式支持的网卡较多且性能也很高,如果网卡支持的话,尽量使用该模式。

通用模式

XDP程序运行在Linux内核协议栈入口,无需驱动支持,性能低于XDP原生模式,但是即使XDP通用模式,也会给系统性能带来一定的提升。

在处理完一个数据包后,XDP程序会返回一个动作(Action)作为输出,代表程序退出后对数据包应该执行的动作,在内核头文件bpf.h定义了表2中5种动作类。

表2 XDP程序返回的动作

名称

描述

XDP_ABORTED

丢弃数据包,同时上报异常。

XDP_DROP

仅丢弃数据包。

XDP_PASS

数据包上送至内核进一步处理。

XDP_TX

数据包直接向外转发。

XDP_REDIRECT

数据包重定向至另一个网络接口。

SP600系列网卡支持XDP原生模式,即将XDP程序注册在网卡驱动中执行,另外仅支持XDP_DROP、XDP_PASS两种返回动作的后处理。