4. 配置DPU的硬件卸载功能

任务目标

在BlueField-3 DPU上启用OVS硬件卸载(即把Open vSwitch数据面从主机CPU卸载到DPU的eSwitch),并验证卸载确实生效。本案例覆盖:检查固件与驱动支持、开启硬件卸载、创建代表口(representor)、验证卸载状态。

环境与依赖

  • BlueField-3 DPU(固件版本 ≥ 24.10,DOCA SDK已安装)
  • 主机侧:Linux内核 ≥ 5.15,具备mlx5_core驱动
  • OVS版本 ≥ 2.17(支持DPDK/硬件卸载),需安装openvswitch与ovs-vswitchd
  • DPU侧:rshim可用,或通过dpu-tools访问BlueField操作系统

实现步骤与关键代码

1. 检查固件与驱动状态

在主机侧确认BlueField-3已被识别,且eSwitch模式可用:

# 确认设备存在
lspci | grep -i mellanox

# 查看当前eSwitch模式(应显示“switchdev”)
devlink dev eswitch show pci/0000:03:00.0

若输出不是switchdev,执行:

devlink dev eswitch set pci/0000:03:00.0 mode switchdev

2. 启用OVS硬件卸载

编辑OVS配置,开启硬件卸载并重启服务:

# 设置硬件卸载标志
ovs-vsctl --no-wait set Open_vSwitch . other_config:hw-offload=true

# 重启OVS使配置生效
systemctl restart openvswitch-switch

# 确认标志已生效
ovs-vsctl --no-wait get Open_vSwitch . other_config:hw-offload

预期输出:true。

3. 创建代表口并验证卸载

卸载开启后,DPU的eSwitch会为主机侧VF自动创建代表口。检查代表口是否出现:

# 查看代表口(名称通常为pf0vfN)
ip link show | grep -E "pf0vf|en3f0"

# 将代表口加入OVS桥
ovs-vsctl add-br ovs-hw
ovs-vsctl add-port ovs-hw pf0vf0
ovs-vsctl add-port ovs-hw pf0vf1

验证卸载是否真正生效——检查OVS流表是否下发到硬件:

# 查看卸载统计(hw_offload字段)
ovs-appctl dpctl/dump-flows type=offloaded

# 若上述命令无输出,尝试:
ovs-appctl dpctl/dump-flows -m

当有流量经过时,type=offloaded的流表条目会显示offloaded:yes。若没有任何流量,可先手动添加一条测试流规则:

# 添加一条简单的转发规则(双向)
ovs-ofctl add-flow ovs-hw "in_port=pf0vf0,actions=pf0vf1"
ovs-ofctl add-flow ovs-hw "in_port=pf0vf1,actions=pf0vf0"

4. 性能观察(可选验证)

使用iperf3或netperf在VF间打流,对比卸载前后吞吐。卸载后主机CPU占用应显著下降(例如从接近100%降至10%以下)。注意:此对比需要先关闭卸载(hw-offload=false)测一次基线,再开启卸载测一次。

验证方法与判定标准

检查项通过条件
eSwitch模式devlink dev eswitch show输出mode: switchdev
hw-offload配置ovs-vsctl get返回true
代表口存在ip link能看到pf0vf0/pf0vf1且状态为UP
流表卸载打流后ovs-appctl dpctl/dump-flows type=offloaded出现offloaded:yes条目
CPU占用下降相同流量下,开启卸载后主机CPU占用明显低于关闭卸载时(建议下降≥50%)

常见问题

  • 代表口不出现:确认已创建VF(echo 2 > /sys/class/net/ens3f0/device/sriov_numvfs),且eSwitch已切换为switchdev模式。
  • 卸载不生效:检查固件版本是否支持(mlxup查询),并确认OVS版本≥2.17。某些内核需要加载mlx5_ib模块。
  • 流表无法下发:查看dmesg是否有mlx5相关错误,确认代表口已正确加入OVS桥且链路为UP。

完成上述步骤并满足全部判定条件,即表示BlueField-3的OVS硬件卸载已成功配置并生效。