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硬件卸载已成功配置并生效。