4. DPU上的网络卸载模型
DPU(Data Processing Unit)之所以能显著提升云原生网络的吞吐、降低主机CPU占用,核心在于它把原本运行在主机内核或用户态网络栈中的一部分处理逻辑,下沉到DPU上的可编程数据面执行。理解这些卸载模型,关键不是记住名词,而是看清“哪一段处理被搬到了哪里、主机侧还剩什么、数据包经过哪些边界”。本节围绕五类典型机制展开:流表卸载、连接跟踪卸载、IPsec/TLS卸载、VirtIO与vDPA、SR-IOV与VF直通。
一、流表卸载:把转发决策交给硬件
流表卸载的基本思想是:主机或控制面先根据策略生成“匹配字段 + 动作”的表项,再把这些表项下发到DPU的硬件或可编程流水线中。数据包到达DPU后,由硬件按五元组、隧道ID、VLAN、甚至更细的字段进行匹配,命中后直接执行转发、丢弃、改写、镜像或计数等动作,不再把每个包都送到主机内核。
典型匹配字段包括源/目的IP、源/目的端口、协议号、入端口、隧道VNI等;动作包括输出到指定VF、设置下一跳、修改MAC、封装/解封装VXLAN或Geneve、丢弃、采样等。以OVS卸载为例,控制面把OpenFlow流表转换为DPU可执行的硬件表项,主机侧只保留慢路径和未命中包的处理。判断卸载是否生效,通常看主机侧OVS数据面流量是否下降、DPU流表命中计数是否增长、以及转发时延是否稳定。
二、连接跟踪卸载:让有状态处理留在数据面
连接跟踪(Conntrack)用于记录TCP/UDP/ICMP等会话的状态,是NAT、防火墙、负载均衡的基础。传统实现中,每个新连接的首包进入主机内核建立状态,后续包再查表。连接跟踪卸载则把“新建、已建立、关闭”等状态机下沉到DPU,由硬件维护连接表项,主机只处理异常或未命中流量。
一个连接表项通常包含五元组、状态、超时时间、NAT转换后的地址端口、以及关联的流表动作。DPU在收到首包时创建表项,后续同向或反向包直接命中并执行NAT/转发;当连接关闭或超时,表项被老化删除。实际部署中要关注表项容量、老化时间与主机内核Conntrack的一致性,避免出现“主机认为连接已关闭、DPU仍在转发”的状态分裂。
三、IPsec/TLS卸载:把加解密从CPU搬到加速器
IPsec和TLS卸载解决的是“加解密算力”问题。IPsec卸载通常由DPU的加密引擎完成ESP封装/解封装、AES-GCM加解密和完整性校验;TLS卸载则更复杂,涉及握手阶段的非对称运算和记录层的对称加解密。DPU可以只卸载记录层对称加密,也可以配合主机完成握手,形成“主机握手、DPU加密数据”的分工。
以IPsec为例,安全策略库(SPD)和安全关联(SA)由控制面下发到DPU,数据包匹配SPD后使用对应SA的密钥和算法进行封装。判断卸载效果,可观察主机CPU的加密指令占比是否下降、DPU加密引擎吞吐是否达到线速、以及重放窗口和序列号是否正确维护。TLS卸载则要额外关注会话密钥的安全传递和密钥生命周期管理。
四、VirtIO与vDPA:半虚拟化与数据面加速的折中
VirtIO是虚拟机与主机之间标准的半虚拟化I/O接口,Guest使用virtio-net驱动,Host侧由vhost或vhost-user后端处理。它的优点是兼容性好、驱动成熟,缺点是数据包需要经过虚拟队列和主机后端,路径较长。vDPA(vhost Data Path Acceleration)则把VirtIO的数据面下沉到DPU硬件,控制面仍保持VirtIO语义,从而让Guest无需更换驱动即可获得接近直通的性能。
在vDPA模型中,Guest仍然看到标准的virtio-net设备,但virtqueue的通知和DMA由DPU硬件直接处理,主机侧只负责控制面和配置。这样既保留了VirtIO的兼容性,又减少了主机CPU的拷贝和中断开销。实际使用时要确认DPU是否支持对应virtio特性(如多队列、mergeable buffer、packed ring),以及热迁移和live migration场景下的状态同步能力。
五、SR-IOV与VF直通:把物理功能切分给虚拟机
SR-IOV通过物理功能(PF)和虚拟功能(VF)实现网卡资源的硬件切分。PF负责管理和配置,VF是可分配给虚拟机或容器的轻量级PCIe功能。VF直通(PCI passthrough)把VF直接映射到Guest,使Guest的驱动可以直接操作网卡队列,数据包绕过主机内核网络栈,获得最低时延和最高吞吐。
VF直通的代价是失去了主机侧的软件交换和策略能力,因此常与DPU上的流表、ACL、QoS配合使用,由DPU在硬件层补齐策略。配置时通常需要开启IOMMU、将VF绑定到vfio-pci、并在虚拟机XML中声明hostdev。判断直通是否成功,可检查Guest内是否识别到VF网卡、lspci是否显示正确的厂商设备、以及主机侧是否不再出现该VF的netdev。
六、五类机制的对比与选型思路
这五类机制并非互斥,实际部署中常常组合使用。流表卸载解决“转发决策”,连接跟踪卸载解决“有状态会话”,IPsec/TLS卸载解决“加解密算力”,VirtIO/vDPA解决“虚拟化I/O兼容与性能的平衡”,SR-IOV/VF直通解决“极致时延与吞吐”。选型时先看业务对时延、吞吐、兼容性和策略能力的要求:需要保留主机侧策略和热迁移能力,优先考虑vDPA;追求最低时延且能接受策略下沉,优先考虑VF直通;需要加密流量线速处理,则必须确认DPU加密引擎的算法支持和密钥管理方式。
七、一个可参考的验证示例
假设在DPU上验证VF直通与流表卸载的组合效果,可按以下思路组织:在主机上创建VF并绑定vfio-pci,将VF分配给虚拟机;在DPU控制面下发一条匹配Guest源IP、动作为转发到上行端口的流表;在Guest内用iperf3打流,同时在主机侧用mpstat -P ALL 1观察CPU软中断,在DPU侧查看流表命中计数。若主机CPU软中断明显下降、DPU命中计数持续增长、吞吐接近线速,则说明数据面已走VF直通加流表卸载路径。若命中计数不增长,应检查流表匹配字段是否与报文实际字段一致、VF是否真正绑定成功、以及是否存在未命中包被上送慢路径。
# 主机侧示例:查看VF与驱动绑定情况
lspci -nn | grep -i ethernet
ls /sys/class/net/
# 将VF绑定到vfio-pci(示例)
echo 8086 10ed > /sys/bus/pci/drivers/vfio-pci/new_id
# Guest内验证
ethtool -i ens1
iperf3 -c 192.168.100.10 -t 30 -P 4
需要强调的是,上述参数与命令仅为教学示例,实际设备ID、VF编号、IP地址和队列数量需按现场环境替换。不同DPU厂商对vDPA、SR-IOV和加密卸载的支持粒度不同,落地前应查阅对应DPU的驱动与固件文档,确认virtio特性、IOMMU分组、以及流表容量和老化策略是否满足业务要求。