DOCA 文档 v2.10.0

链路聚合

网络 bonding 允许将两个或多个网络接口组合成一个单一接口。它可以提高网络吞吐量、带宽,并在其中一个接口发生故障时提供冗余。

NVIDIA ® BlueField ® 网络平台(DPU 或 SuperNIC)可以选择在 Arm 端配置网络 bonding,这对主机是透明的。在这种配置下,主机只会看到一个单一的 PF。

注意

当 BlueField 设置为两个端口的嵌入式功能所有权模式时,支持此功能。

注意

在配置 LAG 时(从“LAG 配置”部分下的步骤 2 开始),流量无法通过物理端口。

下图描述了此配置

BlueField_Link_Aggregation-version-1-modificationdate-1728051685903-api-v2.png

BlueField 上支持两种 LAG 模式

  • 队列亲和性模式

  • 哈希模式

队列亲和性模式

在此模式下,数据包根据 QPs 分配。

  1. 要启用此模式,请运行

    复制
    已复制!
                

    $ mlxconfig -d /dev/mst/<device-name> s LAG_RESOURCE_ALLOCATION=0

    设备名称示例:mt41686_pciconf0

  2. /etc/mellanox/mlnx-bf.conf 中添加/编辑以下字段,如下所示

    复制
    已复制!
                

    LAG_HASH_MODE="no"

  3. 执行BlueField 系统重启,使 mlxconfig 设置生效。

哈希模式

在此模式下,数据包根据数据包头上的哈希值分配到端口。

注意

对于此模式,前提条件步骤 3 和 4 不是必需的。

  1. 要启用此模式,请运行

    复制
    已复制!
                

    $ mlxconfig -d /dev/mst/<device-name> s LAG_RESOURCE_ALLOCATION=1

    设备名称示例:mt41686_pciconf0

  2. /etc/mellanox/mlnx-bf.conf 中添加/编辑以下字段,如下所示

    复制
    已复制!
                

    LAG_HASH_MODE="yes"

  3. 执行BlueField 系统重启,使 mlxconfig 设置生效。

  1. 设置要使用的LAG 模式

  2. (可选)在主机上隐藏第二个 PF。运行

    复制
    已复制!
                

    $ mlxconfig -d /dev/mst/<device-name> s HIDE_PORT2_PF=True NUM_OF_PF=1

    设备名称示例:mt41686_pciconf0

    注意

    执行BlueField 系统重启,使 mlxconfig 设置生效。

  3. 删除 Arm 端上任何已安装的可扩展功能 (SF)。

  4. 停止主机端的驱动程序。运行

    复制
    已复制!
                

    $ systemctl stop openibd

  5. Arm 端的上行链路接口(p0p1)必须与任何 OVS 网桥断开连接。

  1. 创建 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 时(从下一步开始),流量无法通过物理端口。

  2. 将上行链路表示器都从属于 bond 接口。运行

    复制
    已复制!
                

    $ ip link set p0 down $ ip link set p1 down $ ip link set p0 master bond0 $ ip link set p1 master bond0

  3. 启动接口。运行

    复制
    已复制!
                

    $ 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 模式(默认启用)时,上行链路接口(p0p1)必须始终保持启用状态。禁用它们将破坏 LAG 支持和同一主机上的 VF 到 VF 通信。

对于 OVS 配置,bond 接口是需要添加到 OVS 网桥的接口(不应添加接口 p0p1)。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。

  1. 如果配置了队列亲和性模式 LAG(即,LAG_RESOURCE_ALLOCATION=0

    1. 删除 Arm 端上任何已安装的可扩展功能 (SF)。

    2. 停止主机端的驱动程序 (openibd)。运行

      复制
      已复制!
                  

      systemctl stop openibd

  2. 删除 Arm 端的 LAG OVS 网桥。运行

    复制
    已复制!
                

    ovs-vsctl del-br bf-lag

    这允许稍后恢复非 LAG 网络的 OVS 配置。

  3. 停止 OVS 服务。运行

    复制
    已复制!
                

    systemctl stop openvswitch-switch.service

  4. 运行

    复制
    已复制!
                

    ip link set bond0 down modprobe -rv bonding

    因此,BlueField 的两个网络接口都将可供主机端用于网络和 SR-IOV。

  5. 为了使主机能够使用 BlueField 的端口,请确保在 Arm 端的 OVS 网桥中附加 ECPF 和主机表示器。有关如何执行此操作的说明,请参阅“BlueField 上的虚拟交换机”。

  6. 在 Arm 端,从 HIDE_PORT2_PF 恢复。运行

    复制
    已复制!
                

    mlxconfig -d /dev/mst/<device-name> s HIDE_PORT2_PF=False NUM_OF_PF=2

  7. 在 BlueField 的固件中恢复默认 LAG 设置。运行

    复制
    已复制!
                

    mlxconfig -d /dev/mst/<device-name> s LAG_RESOURCE_ALLOCATION=DEVICE_DEFAULT

  8. 从 Arm 端的 /etc/mellanox/mlnx-bf.conf 中删除以下行

    复制
    已复制!
                

    LAG_HASH_MODE=...

  9. 执行BlueField 系统重启,使 mlxconfig 设置生效。

BlueField 多主机仅支持 LAG 哈希模式。

LAG 多主机前提条件

  1. 启用 LAG 哈希模式

  2. 在主机上隐藏第二个 PF。运行

    复制
    已复制!
                

    $ mlxconfig -d /dev/mst/<device-name> s HIDE_PORT2_PF=True NUM_OF_PF=1

  3. 确保 NVME 仿真已禁用

    复制
    已复制!
                

    $ mlxconfig -d /dev/mst/<device-name> s NVME_EMULATION_ENABLE=0

    设备名称示例:mt41686_pciconf0

  4. Arm 端的上行链路接口(p0p4),代表 port0 和 port1,必须与任何 OVS 网桥断开连接。因此,只有 BlueField 的第一个 PF 可供主机端用于网络和 SR-IOV。

多主机上的 LAG 配置

  1. 创建 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

  2. 将上行链路表示器都从属于 bond 接口。运行

    复制
    已复制!
                

    $ ip link set p0 down $ ip link set p4 down $ ip link set p0 master bond0 $ ip link set p4 master bond0

  3. 启动接口。运行

    复制
    已复制!
                

    $ ip link set p0 up $ ip link set p4 up $ ip link set bond0 up

  4. 对于 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 配置”部分。

© 版权所有 2025 NVIDIA。 最后更新于 2025 年 2 月 12 日。