3. 基于DPU的OVS卸载

任务目标

在BlueField-3 DPU上,将Open vSwitch(OVS)的数据路径(datapath)从主机CPU卸载到DPU硬件,使虚拟机的网络流量转发由DPU的ASAP2加速引擎处理,从而释放主机CPU资源。完成本案例后,您将获得一套可验证的OVS硬件卸载(Hardware Offload)配置。

环境依赖

  • BlueField-3 DPU(建议使用BF2及以上,本案例基于BF3)
  • DOCA 2.x或更高版本(包含OVS卸载所需的驱动与工具)
  • 主机侧:Ubuntu 22.04+,内核≥5.15,已安装openvswitch-switch(版本≥2.17)
  • DPU侧:已安装rshim工具,可登录DPU的BlueField Linux环境
  • 固件版本需支持ASAP2(建议使用DOCA 2.5+配套固件)

实现原理与配置步骤

OVS卸载的核心是将OVS的流表规则下发到DPU的硬件TC(Traffic Control)引擎。BlueField-3通过mlx5网卡驱动与OVS的hw-offload机制配合,将匹配的流表转换为硬件规则。本案例使用最小拓扑:主机侧创建两个VF(Virtual Function),分别作为两个虚拟机的虚拟网卡,通过OVS网桥连接,验证卸载后VF间流量转发。

1. 主机侧配置

首先确认网卡驱动支持卸载,并加载相关模块:

# 检查驱动参数(需为“true”)
cat /sys/module/mlx5_core/parameters/hw_offload
# 若输出为false,则重新加载驱动
echo options mlx5_core hw_offload=true > /etc/modprobe.d/mlx5.conf
rmmod mlx5_core && modprobe mlx5_core

# 创建两个VF(假设PF为p0,使用SF端口时同理)
echo 2 > /sys/class/net/p0/device/sriov_numvfs
# 确认VF已生成
ip link show | grep vf

2. OVS卸载配置

配置OVS开启硬件卸载,并创建网桥与端口:

# 开启OVS硬件卸载
ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
# 重启OVS使配置生效
systemctl restart openvswitch-switch

# 创建网桥并添加VF端口
ovs-vsctl add-br ovs-br
ovs-vsctl add-port ovs-br p0_0
ovs-vsctl add-port ovs-br p0_1
# 查看端口状态
ovs-vsctl show

其中p0_0和p0_1是VF对应的接口名(通常为enp0f0npf0vf0等,可通过ip link show确认)。

3. DPU侧验证配置

登录DPU侧,确认硬件卸载表项已同步。DPU侧无需额外配置,但需确认ASAP2固件已加载:

# 在DPU侧执行(通过rshim登录)
doca_hw_offload_check  # 若命令不存在,可跳过,以主机侧验证为准

验证方法与判定标准

完成上述配置后,通过以下步骤验证卸载是否生效:

  1. 检查OVS卸载状态:执行ovs-appctl dpif-netdev/dpif-netlink相关命令,观察是否有卸载统计。更直接的方法是查看硬件规则表:
# 查看卸载到硬件的流表数(非零即表示有卸载)
ovs-appctl dpctl/dump-flows type=offloaded
# 若输出非空,说明有流表已卸载
  1. 连通性测试:在两个VF对应的命名空间(或直连虚拟机)中配置IP并互相ping。若卸载生效,ping流量应能通过,且主机CPU占用率显著低于纯软件转发。
  2. 判定通过条件:ovs-appctl dpctl/dump-flows type=offloaded输出中能看到匹配的流表项(如ipv4、eth类型),且VF间网络连通。若输出为空,则卸载未生效,需检查驱动参数与OVS版本。

常见问题排查

  • 卸载不生效:确认hw-offload=true已写入OVS配置且OVS已重启;检查dmesg中是否有mlx5相关报错。
  • VF端口无法添加:确认VF已正确创建且未被其他驱动占用,使用ip link show查看VF状态。
  • 性能未提升:卸载仅对匹配流表的长连接流量生效,短连接或首包仍走软件路径,需使用持续流量测试(如iperf)。

本案例提供最小可复现的OVS卸载配置,核心验证路径为:配置驱动→开启OVS卸载→添加VF端口→检查卸载流表→连通性测试。完成上述步骤并观察到非空卸载流表,即表示DPU硬件加速已生效。