链路聚合
网络 bonding 允许将两个或多个网络接口组合成一个单一接口。它可以提高网络吞吐量、带宽,并在其中一个接口发生故障时提供冗余。
NVIDIA ® BlueField ® 网络平台(DPU 或 SuperNIC)可以选择在 Arm 端配置网络 bonding,这对主机是透明的。在这种配置下,主机只会看到一个单一的 PF。
当 BlueField 设置为两个端口的嵌入式功能所有权模式时,支持此功能。
在配置 LAG 时(从“LAG 配置”部分下的步骤 2 开始),流量无法通过物理端口。
下图描述了此配置

BlueField 上支持两种 LAG 模式
队列亲和性模式
哈希模式
队列亲和性模式
在此模式下,数据包根据 QPs 分配。
要启用此模式,请运行
$ mlxconfig -d /dev/mst/<device-name> s LAG_RESOURCE_ALLOCATION=0
设备名称示例:
mt41686_pciconf0
。从
/etc/mellanox/mlnx-bf.conf
中添加/编辑以下字段,如下所示LAG_HASH_MODE="no"
执行BlueField 系统重启,使
mlxconfig
设置生效。
哈希模式
在此模式下,数据包根据数据包头上的哈希值分配到端口。
对于此模式,前提条件步骤 3 和 4 不是必需的。
要启用此模式,请运行
$ mlxconfig -d /dev/mst/<device-name> s LAG_RESOURCE_ALLOCATION=1
设备名称示例:
mt41686_pciconf0
。从
/etc/mellanox/mlnx-bf.conf
中添加/编辑以下字段,如下所示LAG_HASH_MODE="yes"
执行BlueField 系统重启,使
mlxconfig
设置生效。
设置要使用的LAG 模式。
(可选)在主机上隐藏第二个 PF。运行
$ mlxconfig -d /dev/mst/<device-name> s HIDE_PORT2_PF=True NUM_OF_PF=1
设备名称示例:
mt41686_pciconf0
。注意执行BlueField 系统重启,使
mlxconfig
设置生效。删除 Arm 端上任何已安装的可扩展功能 (SF)。
停止主机端的驱动程序。运行
$ systemctl stop openibd
Arm 端的上行链路接口(
p0
和p1
)必须与任何 OVS 网桥断开连接。
创建 bond 接口。运行
$ ip link add bond0 type bond $ ip link set bond0 down $ ip link set bond0 type bond miimon 100 mode 4 xmit_hash_policy layer3+4
注意在配置 LAG 时(从下一步开始),流量无法通过物理端口。
将上行链路表示器都从属于 bond 接口。运行
$ ip link set p0 down $ ip link set p1 down $ ip link set p0 master bond0 $ ip link set p1 master bond0
启动接口。运行
$ ip link set p0 up $ ip link set p1 up $ ip link set bond0 up
以下是 Ubuntu 中 LAG 配置的示例
# cat /etc/netplan/
70
-bf-lag.yaml network: renderer: networkd bonds: bond0: optional:true
dhcp4: no interfaces: [p0, p1] parameters: mode:802
.3ad mii-monitor-interval:100
ethernets: p0: dhcp4: no optional:true
p1: dhcp4: no optional:true
version:2
因此,只有 BlueField 的第一个 PF 可供主机端用于网络和 SR-IOV。
警告当处于共享 RQ 模式(默认启用)时,上行链路接口(
p0
和p1
)必须始终保持启用状态。禁用它们将破坏 LAG 支持和同一主机上的 VF 到 VF 通信。
对于 OVS 配置,bond 接口是需要添加到 OVS 网桥的接口(不应添加接口 p0
和 p1
)。LAG 的第一个端口(pf0hpf
)的 PF 表示器必须添加到 OVS 网桥。第二个端口(pf1hpf
)的 PF 表示器仍然可见,但不应添加到 OVS 网桥。请考虑以下示例
ovs-vsctl add-br bf-lag
ovs-vsctl add-port bf-lag bond0
ovs-vsctl add-port bf-lag pf0hpf
当主机驱动程序已加载时,尝试在队列亲和性模式下更改 bonding 配置(包括启动/关闭从属接口)将导致 FW 综合征和操作失败。确保在更改 BlueField bonding 配置之前卸载主机驱动程序,以避免这种情况。
当执行驱动程序重新加载(openibd restart
)或重启时,需要移除 bond 配置,并在驱动程序完全启动后重新应用配置。请参阅“移除 LAG 配置”的步骤 1-4。
如果配置了队列亲和性模式 LAG(即,
LAG_RESOURCE_ALLOCATION=0
)删除 Arm 端上任何已安装的可扩展功能 (SF)。
停止主机端的驱动程序 (openibd)。运行
systemctl stop openibd
删除 Arm 端的 LAG OVS 网桥。运行
ovs-vsctl del-br bf-lag
这允许稍后恢复非 LAG 网络的 OVS 配置。
停止 OVS 服务。运行
systemctl stop openvswitch-switch.service
运行
ip link set bond0 down modprobe -rv bonding
因此,BlueField 的两个网络接口都将可供主机端用于网络和 SR-IOV。
为了使主机能够使用 BlueField 的端口,请确保在 Arm 端的 OVS 网桥中附加 ECPF 和主机表示器。有关如何执行此操作的说明,请参阅“BlueField 上的虚拟交换机”。
在 Arm 端,从
HIDE_PORT2_PF
恢复。运行mlxconfig -d /dev/mst/<device-name> s HIDE_PORT2_PF=False NUM_OF_PF=2
在 BlueField 的固件中恢复默认 LAG 设置。运行
mlxconfig -d /dev/mst/<device-name> s LAG_RESOURCE_ALLOCATION=DEVICE_DEFAULT
从 Arm 端的
/etc/mellanox/mlnx-bf.conf
中删除以下行LAG_HASH_MODE=...
执行BlueField 系统重启,使
mlxconfig
设置生效。
BlueField 多主机仅支持 LAG 哈希模式。
LAG 多主机前提条件
启用 LAG 哈希模式。
在主机上隐藏第二个 PF。运行
$ mlxconfig -d /dev/mst/<device-name> s HIDE_PORT2_PF=True NUM_OF_PF=1
确保 NVME 仿真已禁用
$ mlxconfig -d /dev/mst/<device-name> s NVME_EMULATION_ENABLE=0
设备名称示例:
mt41686_pciconf0
。Arm 端的上行链路接口(
p0
和p4
),代表 port0 和 port1,必须与任何 OVS 网桥断开连接。因此,只有 BlueField 的第一个 PF 可供主机端用于网络和 SR-IOV。
多主机上的 LAG 配置
创建 bond 接口。运行
$ ip link add bond0 type bond $ ip link set bond0 down $ ip link set bond0 type bond miimon 100 mode 4 xmit_hash_policy layer3+4
将上行链路表示器都从属于 bond 接口。运行
$ ip link set p0 down $ ip link set p4 down $ ip link set p0 master bond0 $ ip link set p4 master bond0
启动接口。运行
$ ip link set p0 up $ ip link set p4 up $ ip link set bond0 up
对于 OVS 配置,bond 接口是必须添加到 OVS 网桥的接口(不应添加接口 p0 和 p4)。PF 表示器
pf0hpf
必须与 bond 接口一起添加到 OVS 网桥。其余的上行链路表示器必须与它们的 PF 表示器一起添加到另一个 OVS 网桥。请考虑以下示例ovs-vsctl add-br br-lag ovs-vsctl add-port br-lag bond0 ovs-vsctl add-port br-lag pf0hpf ovs-vsctl add-br br1 ovs-vsctl add-port br1 p1 ovs-vsctl add-port br1 pf1hpf ovs-vsctl add-br br2 ovs-vsctl add-port br2 p2 ovs-vsctl add-port br2 pf2hpf ovs-vsctl add-br br3 ovs-vsctl add-port br3 p3 ovs-vsctl add-port br3 pf3hpf
注意当执行驱动程序重新加载(
openibd restart
)或重启时,您必须从 NetworkManager 移除 bond 配置,并在驱动程序完全启动后重新应用配置。
移除多主机上的 LAG 配置
请参阅“移除 LAG 配置”部分。