DPDK中的流量分叉(Flow Bifurcation)允许将流量按需分流,部分流量直接进入DPDK用户空间应用程序,另一部分流量则保留在传统的Linux网络协议栈中。
- 软件(驱动程序)仅参与流量分流的配置,不会影响数据包处理的关键路径。
- 流量的分流通常基于IP地址和TCP/UDP端口,且这些过滤规则可以在网卡上进行配置。
- 符合条件的流量会被直接导入DPDK应用程序进行高效处理,或转发到其他网络端口。无论是直接处理还是转发,均能够有效降低延迟并提高系统吞吐量。
流量分叉中的部分数据包会按照传统方式通过Linux网络协议栈,而符合特定条件的数据包则绕过协议栈,直接交给用户空间的 DPDK 应用程序处理,充分利用 Linux 协议栈的灵活性,并发挥DPDK在高性能流量处理中的优势,如图1所示。
图1 流量分叉介绍
SP670网卡流量分叉介绍
SP670网卡支持基于队列对(QP)级别的网络流量分叉,并通过流表将流量引导到用户态或内核态。具体实现如图2所示。
- 网卡配置中,VF和PF都映射到eth0,并通过设置PF2预留40个 VF,预留的VF被映射到eth0,专门用于流量分叉功能。
- 驱动会自动启用PF2的VF,并修改NIC的probe配置,避免注册内核网络设备。
- 在配置FDIR策略和动作时,选择一个VF,并通过DPDK劫持方式将其分配给指定进程。
- 内核态驱动负责管理VF设备与用户态进程之间的关联关系。例如:VF与进程关联、进程建立时引用 VF或进程退出时释放VF。
- 网卡在接收(RX)方向接收报文时,会通过FDIR查找功能(FUNC)的RSS,完成流量的散列,可以通过调用DPDK的rte_rxburst接口来获取报文数据。在发送(TX)方向,只需选择目标设备和队列进行数据发送即可。
图2 流量分叉方案图
特性清单
SP670网卡流量分叉特性清单如表1所示。
表1 流量分叉特性清单特性类别
|
特性
|
说明
|
RSS流表管理
|
支持RSS流表创建
|
支持单队列、多队列(连续队列)
|
支持RSS流表删除
|
-
|
支持RSS流表FLUSH
|
-
|
支持RSS流表查询
|
-
|
bond功能
|
-
|
-
|
RX功能
|
支持RX分流功能
|
-
|
分流开关
|
支持流量分叉功能使能
|
使用hinicadm3工具使能
|