Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

NIC 上 RDMA 流量的 DCQCN 配置

Broadcom BCM57608用于 RDMA 流量的 Thor2 DCQCN 配置

AMD 服务器中的默认 DCQN-ECN/PFC 属性。

网络接口适配器配置了以下用于 RoCE 流量的服务等级(包括 DCQCN-ECN)参数:

对于 Thor2 NIC 适配器:

  • 启用 RoCEv2 (RDMA over IPv4)
  • 启用拥塞控制 (ECN) 和 PFC
  • 在优先级 3 上用 DSCP 26 标记的 RoCE 流量
  • 使用 DSCP 48 和 PRIORITY 7 标记的 RoCE CNP 流量

映射 Broadcom 和逻辑接口名称,以配置 AMD 服务器中 RDMA 的 DCQN-ECN/PFC 和 TOS/DSCP 流量属性

需要在连接到GPU后端的接口上配置DCQCN、ECN、PFC和流量标记;仅在 GPU#_eth (#=0-7) 接口上。

在本文档的 更改NIC属性 部分中,我们确定服务器中的 gpu#_eth 接口是 Broadcom BCM97608(如下所示)NIC。

本节中配置服务等级的所有步骤都将重点介绍这些 Broadcom 接口。

我们将结合使用 Linux 系统命令和 Broadcom 工具来启用、调整和监控 DCQCN ECN/PFC 操作和 RoCE 流量标记。对于其中一些命令,我们需要找到与每个 GPU 接口关联的 Broadcom 接口名称。请按照以下步骤查找这些映射:

  1. 使用以下逻辑查找每个 gpu#_eth 接口的 PCI 地址:

    示例:

  2. 使用以下逻辑查找与每个 PCI 地址对应的 bnxt_re# (#=0-7) 设备:

    示例:

  3. 映射 GPU 接口 bnxt_re# 或 mlx5_# 接口名称。

组合步骤 1 和 2 的输出以创建从 gpu#_eth 到 bnxt_re# 或 mlx5_# 的完整映射。例如,您可以从输出中看到,gpu0_eth对应于 bnxt_re3 (0000:66:00.0)

您可以使用以下逻辑来简化该过程:

示例

为 AMD 服务器(Broadcom 接口)中的 RDMA 配置 DCQN-ECN/PFC 和 TOS/DSCP 流量属性

下表列出了与 DCQN-ECN/PFC 和 TOS/DSCP 相关的一些参数:

表 15.服务器 DCQCN 配置参数

参数 描述 默认
cc_mode

0 表示 确定性标记 (DCQCN-D

1 用于 概率标记 (DCQCN-P)

1
cnp_ecn 启用/禁用 ECN 0x1(启用)
cnp_dscp RoCE 拥塞通知数据包的 DSCP 值 48
cnp_prio RoCE 拥塞通知包的优先级 7
cnp_ratio_th 定义生成 CNP 的阈值比率。它决定了响应拥塞而发送 CNP 的速率,有助于控制反馈机制的攻击性。 0x0
ecn_enable 启用拥塞控制。 0x1(启用)
ecn_marking 支持将数据包标记为支持 ECN。ECN = 01 0x1(启用)
default_roce_mode 设置 RDMA 的默认 RoCE 模式 RoCE v2
default_roce_tos 设置 RDMA 流量的默认 ToS 值 104
roce_dscp RoCE 数据包的 DSCP 值。 26
roce_prio RoCE 数据包的优先级。 3
RTT cnp 和传输数据包计数累积的时间段 (μs)。在 rtt 结束时,计算 CNP 和 TxPkts 之间的比率,并更新 CP。 40 微秒。

BCM95741X以太网网络适配器支持每个以太网端口的三个传输和接收队列:0、4 和 5。

BCM95750X以太网网络适配器支持每个以太网端口的八个传输和接收队列:0 到 7。

默认情况下,所有队列均配置为加权公平队列 (WFQ),优先级 0 的流量映射到队列 4。

加载 RoCE bnxt_re 驱动程序后,CoSQ 0 配置为无损流量,CoSQ 5 从 WFQ 更改为 CNP 处理的严格优先级 (SP)。

RoCE 和 CNP 流量可以使用不同的 DSCP 值进行标记,也可以改用 VLAN 标记。

默认情况下,ToS 字段设置为 104,这意味着 DSCP 设置为 48,ECN 位设置为 10(支持 ECN)。

这些参数可以使用三种不同的方法进行调整:

  • 直接配置 DCQCN/RDMA 标记值
  • 使用 Broadcom 工具(例如 niccli,lldptool 直接)配置 DCQCN/RDMA 标记值
  • 使用实用程序配置 the bnxt_setupcc.sh DCQCN/RDMA 标记值,该实用程序在后台使用或 niccli lldptool (默认)。

以下部分将介绍使用这些不同选项进行更改的步骤。

注意:请确保所有更改都与交换矩阵内的交换机配置一致。示例:

直接为 RDMA 配置 DCQN-ECN/PFC 和 TOS/DSCP 流量属性

您可以通过直接编辑包含每个参数值的文件来更改 DCQCN 和流量标记。此方法是最简单的,不需要安装任何其他工具,但是,它不是 PFC 相关参数的选项,也不是所有类型的网络适配器都支持它。

要为特定接口完成这些更改,您必须在相应的接口目录中,按照以下步骤操作:

  1. 为 QoS 相关值创建接口目录

    我们确定了 gpu#_eth 接口与相应的 Broadcom 接口名称之间的映射

    GPU 到 NIC 映射:

    gpu0_eth => 0000:06:00.0 => bnxt_re0

    gpu1_eth => 0000:23:00.0 => bnxt_re1

    gpu2_eth => 0000:43:00.0 => bnxt_re2

    gpu3_eth => 0000:66:00.0 => bnxt_re3

    gpu4_eth => 0000:86:00.0 => bnxt_re4

    gpu5_eth => 0000:a3:00.0 => bnxt_re5

    gpu6_eth => 0000:c3:00.0 => bnxt_re6

    gpu7_eth => 0000:e6:00.0 => bnxt_re7

    我们将使用 Broadcom 接口名称创建目录(rdma_cm 和 bnxt_re),其中 DCQCN 属性以及每个接口的其他参数和统计信息将在这里。

    接口特定目录在使用以下命令创建之前不存在:

    请注意,这两个目录必须存在。

    例如,如果缺少rdma_cm目录,请尝试以下操作:

    示例

    对所有 GPU 接口重复这些步骤。

    注意:您必须是 root 用户才能进行这些更改。

    新目录将包含与 ECN、ROCE 流量和其他功能相关的值:

    您可以在目录中找到/sys/kernel/config/bnxt_re/bnxt_re0/ports/1/cc#其中一些参数的描述,以及它们的当前值cat apply

    示例

  2. 启用 RoCEv2 操作。

    即使 RoCEv2 应为默认模式,此处显示了启用 RoCEv2 的命令。

    注意:此更改是在 rdma_cm 目录下进行的
    注意:输入完全如图所示的值,包括空格:“RoCE v2”(区分大小写)。

    设置参数后,应用新值,如下所示:

    验证更改:

  3. 启用 ECN 响应和通知功能。

    尽管默认情况下应启用 ECN,但此处显示了启用 ECN 的命令。
注意:此更改是在 bnxt_re0 目录下进行的。

如果需要,您可以通过输入 echo -n 0x0 > ecn_enable 来禁用 ECN。

在 Broadcom 接口上启用 ECN 后,它们将响应 CNP 数据包 (RP),并在收到带有 ECN 标记的接口 (NP) 时生成 CNP 数据包。

要禁用它,请输入 echo -n 0x0 > cnp_ecn

设置参数后,应用新值:

验证更改:

您还可以将 CNP 和 ROCE 数据包标记为符合 ECN 条件(这意味着,当发生拥塞时,这些数据包可以通过网络进行标记)。

总结这些属性:

ecn_enable 启用/禁用 ECN 的 RP(响应点)端。它使设备能够响应 CNP 数据包。默认值 = 1(启用)
cnp_ecn 将标记为 CNP 数据包符合 ECN 条件。ECT 字段的值为 01 或 10。
ecn_marking 将 ROCE 数据包标记为 ECN 合格。ECT 字段的值为 01 或 10。
  1. 为 CNP 和 RoCEv2 数据包配置 DSCP 和 PRIO 值。

    注意:并非所有类型的 Broadcom 接口卡都可以通过手动配置这些值(如下所示)。例如,对于BCM95741X设备,您可以使用此方法配置 ECN 和 RoCE 优先级值,但在 BCM95750X/BCM97608 设备上,您可以配置 roce_dscp, ecn_dscp

    请参阅 Broadcom 以太网网络适配器拥塞控制参数

    注意:这些更改是在 bnxt_re0 目录下进行的。
    注意:以下错误表示不支持直接更改此参数的值。如果是BCM97608 roce_prio,并且需要使用(后文所述)进行 bnxt_setupcc.sh 配置cnp_prio。

    设置参数后,应用新值:

    验证更改:

  2. 配置 DCQCN 算法(在 bnxt_re 目录下)。

    Broadcom 以太网网络适配器中的默认 DCQCN 拥塞控制(cc 模式)算法是 DCQCN-P。可以使用以下命令更改模式:

    注意:此更改是在 bnxt_re0 目录下进行的。

    要使用 DCQCN-P ,请配置:

    要使用 DCQCN-D ,请配置:

  3. 检查已配置的所有属性。

以下命令显示所有接口参数:

有关 Broadcom 以太网网络适配器中 DCQCN 算法的详细信息,请查看以下文档: 更改拥塞控制模式设置RoCE 拥塞控制

示例

我们强调了一些 ECN/CNP 相关参数:

使用 niccli 为 RDMA 配置 DCQN-ECN/PFC 和 TOS/DSCP 流量属性

您可以使用 NICCLI 配置实用程序对 DCQCN 和流量标记进行更改。

niccli是 Broadcom 以太网网络适配器的管理工具,可提供详细信息,包括类型、状态、序列号和固件版本。此外,它支持配置接口属性,如 DCQCN-ECN、PFC 和 TOS/DSCP,以优化 RDMA 流量。

注意:niccli 工具需要安装在您的系统中。

安装 NICCLI 配置实用程序

您可以使用以下示例所示获取可通过服务器 niccli listdev, or list-eth 上的 niccli 进行管理的接口适配器和以太网端口的摘要。

您可以在单行模式交互模式批处理模式下使用niccli。提供了niccli -h help这些模式的高级描述。在本节中,我们将展示一些示例,说明如何使用单线交互模式进行 DCQCN-ECN、PFC 和 TOS/DSCP 配置。

在没有选项的情况下进入允许您 niccli 在交互模式下工作,您可以在其中选择适配器/接口(按索引),然后选择适当的 <command> 适配器/接口(例如显示、get_qos、set_map)以获取信息或对所选界面进行更改。

您可以使用将 Broadcom 接口名称与逻辑接口名称进行映射 一节中所述的方法来识别与每个接口对应的接口索引。这将为您提供接口和 pcie 地址之间的映射,然后您可以将其与下面的输出 niccli 相关联。

确定后,输入接口索引(输出中的第一列),如以下示例所示。

示例

输入后 ,您可以发出相同的命令,但包括目标接口,然后是命令,所有这些都在一行中。该 niccli -list 命令可用于确定接口索引。

示例

提供了 sudo niccli help 可用于交互式和单行模式的命令和选项的广泛列表。

注意:对于以下所有示例,我们将使用单行模式来获取信息并进行配置更改。

以下示例说明如何使用 niccli 来获取有关特定接口的信息。

  1. 检查接口状态。

    提供 niccli -i <interface> show 有关接口的详细信息,例如类型、MAC 地址、固件、序列号、设备运行状况、温度等。

    示例

  2. 检查 QoS 设置

sudo niccli -i <interface-index> dscp2priosudo niccli -i 1 listmap -pri2cos命令显示 DSCP 和优先级值之间,以及优先级值、流量类 (TC) 和输出队列之间的映射。

示例中的输出显示以下默认设置:

  • 队列状态。仅启用队列 0、1 和 2。
  • 优先级到 DSCP 的映射:优先级 7 = > DSCP 48 和优先级 3 => DSCP 26。
  • TC(流量类)和队列映射的优先级:优先级 7 => TC2(队列 0)=> DSCP 48 和优先级 3 => TC1(队列 5)=> DSCP 26。
注意:输出可能会造成混淆,显示的队列ID是内部CoS队列号。这实际上意味着流量类别 0、1 和 2 的队列已启用,所有其他流量类别将被禁用。

sudo niccli -i <interface-index> get_qos 命令提供接口上 QoS 配置的摘要。

示例

IEEE 802.1Qaz ETS 配置 TLV:显示增强型传输选择 (ETS) 配置
PRIO_MAP:0:0 1:0 2:0 3:1 4:0 5:0 6:0 7:2

将优先级映射到流量类 (TC)

优先级 0、1、2、4、5、6 → TC 0

优先级 3 → TC 1

优先级 7 → TC 2

TC 带宽:50% 50% 0%

为流量类别分配带宽百分比。

TC 0:占总带宽的 50%。

TC 1:50%。

TC 2:0%。

TSA_MAP:0:ets 1:ets 2:严格

TSA_MAP 与 TC Bandwidth 一起为每个 TC 分配资源并定义服务优先级。相当于 Junos 中的调度器和调度器映射。

指定用于每个 TC 的传输选择算法 (TSA):

TC 0 和 TC 1 使用 ETS(增强型传输选择) 并按 50/50 共享可用带宽

TC 2 使用严格优先级,这意味着 TC 2 流量将始终首先发送

IEEE 802.1Qaz PFC TLV:使用 APP TLV(类型-长度-值)格式定义流量分类
启用 PFC:3

指示在优先级 3 上启用 PFC。

其他优先级未启用 PFC。

PFC 可确保具有此优先级的流量可以暂停,而不是在拥塞期间被丢弃。

IEEE 802.1Qaz APP TLV

应用#0:

优先级:7

选:5

DSCP:48

应用#1:

优先级:3

选:5

DSCP:26

应用#2:

优先级:3

选:3

UDP 或 DCCP:4791

将流量映射到流量类。等效于 Junos 中的多域分类器。

APP#0:标有 DSCP = 48 的流量映射到优先级 7

APP#1:标记为 DSCP = 48 的流量映射到优先级 3

APP#2:端口 = 4791 (RoCEv2) 的 UDP 或 DCCP 流量映射到优先级 3

TC 速率限制:100% 100% 100% 0% 0% 0% 0% 0%

TC 0、TC 1 和 TC 2 最多可使用 100% 的带宽。

TC 3 到 TC 7 设置为 0%,表示当前未将其配置为传输流量。

如果需要,将优先级更改为流量类别映射或将应用更改为流量类别映射。

我们建议保留默认设置,并确保它们与 GPU 后端交换矩阵中叶节点上的服务等级配置一致。

如果需要更改流量类映射的优先级或流量类映射的应用程序,可以使用以下命令:

优先级到流量类映射

示例

应用到流量类别的映射

示例

如果需要,更改 ETS 配置属性

我们建议保留默认设置,并确保它们与 GPU 后端交换矩阵中叶节点上的服务等级配置一致。

示例

如果需要,配置 PFC

示例

以下命令尝试在优先级 5 和 6 上启用 PFC,并演示只能将一个队列(一个优先级)配置为无损队列(支持 PFC)。

使用 bnxt_setupcc.sh 配置 DCQCN 和 RoCE 流量标记值

使用 bnxt_setupcc.sh 可以简化流程的实用程序。

bnxt_setupcc.sh 实用程序可以简化启用或禁用 ECN 和 PFC,以及更改给定接口的 ROCE 和 CNP 数据包的 DSCP 和 PRIO 值。

在幕后,它使用 niccli (默认)或 lldptool 可以作为命令的一部分选择。

您需要按照 bnxt_setupcc.sh 帮助菜单中的说明输入,然后输入您选择的选项:

示例

接口 gpu0 (bnxt_re0) 的 CNP 数据包的默认 DSCP 标记为 0,如下输出所示:

bnxt_setupcc.sh可用于将其更改为交换矩阵 (48) 的预期值,如下所示:

地点:

  • -u 3:使用 Broadcom niccli 实用程序
  • -p 48:将 CNP 数据包的 DSCP 值设置为 48 (0x30)
  • -c:将 CNP 数据包的优先级配置为 6
  • -s:将常规 RoCE 数据包的 DSCP 值定义为 26 (0x1a)
  • -r:将常规 RoCE 数据包的优先级设置为 5
  • -m 3:配置 PFC 和拥塞控制 (ECN)。
注意:需要设备 (-i) 才能完成脚本。此外,您不能只配置一个 DSCP/PRIO 值。您需要配置 CNP-DSCP 值 (-p)、CNP-PRI 值 (-c)、RoCE-DSCP (-s) 和 RoCE-PRIO (-r) 才能使命令正常工作。

通过以下方法验证结果:

注意:您不仅 bnxt_setupcc.sh需要确保已安装和可执行,还需要确保至少安装了一个工具( niccli lldptool或 )。

以下示例显示了 和 nicclibnxt_setupcc.sh安装,但lldptool未安装。它还显示了安装和使用 lldptool.

用于 lldptool 检查或修改 LLDP(链路层发现协议)设置。要启用 LLDP,您需要安装 lldpad, 它也会自动安装 lldptool

要安装 lldpadlldptool 执行以下步骤:

  1. 安装所需的依赖项。

    在安装 lldpad 之前,请确保通过运行以下命令安装必要的库:

    • sudo apt install libconfig9 libnl-3-200
    • libconfig9 – 配置文件处理库。
    • libnl-3-200 – 用于与 Linux Netlink 接互的库。
  1. 安装 lldpad。

    通过运行以下命令安装 lldpad:

    • sudo apt install lldpad

    此软件包可在系统上启用 LLDP,使其能够与其他设备交换网络拓扑信息。

  2. 启用 lldpad。

    使用 systemctl 启用 lldp:

    • sudo systemctl enable lldpad

    这会创建一个 systemd 服务,确保 lldpad 在重新启动后始终运行。

  3. 启动 lldpad 服务

    使用 systemctl 激活 lldp:

    • sudo systemctl start lldpad

    这会立即激活 lldpad,使其能够处理 LLDP 数据包。

    注意:
    要手动重新启动 lldpad,请使用: sudo systemctl restart lldpad
    要禁用 lldpad 在启动时启动,请使用: sudo systemctl disable lldpad
  4. 验证安装

使用 systemctl 检查服务状态

这可确保工具已安装并可供使用。如果一切正常,您应该会看到“活动(正在运行)”状态。

您可以使用 lldptool 在接口上启用或禁用 LLDP,并检查 LLDP 状态和在该接口上发现的邻接方。lldptool -h 向您显示所有不同的选项:

有关更多详细信息,请查看 Broadcom 以太网网络适配器用户指南手动安装和配置软件部分或安装 NICCLI 配置实用程序

监控接口和 ECN/PFC 操作:

获得特定 GPU 的 Broadcom 名称后(如本部分开头所述),您就可以找到接口操作状态以及 RoCE 流量和拥塞控制统计信息所在的目录。

  1. 导航到相应的目录

/sys/class/infiniband/<Broadcom-interface-name>

示例

对于gpu0_eth:

在这里,您可以检查操作状态、地址、mtu、速度和接口统计信息等属性(包括传输和接收的数据包、丢弃的数据包,以及 ECN 标记的数据包、接收的 CNP 数据包和传输的 CNP 数据包):

要检查 ECN 统计信息,请检查特定接口的相关计数器:

要检查 PFC 统计信息,请使用:

示例

将服务器配置为使用 RCCL 控制流量的管理接口:

ROCm 通信集体库 (RCCL) 创建 TCP 会话来协调进程并交换 RoCE 的队列对信息、GID(全局 ID)、本地和远程缓冲区地址、RDMA 密钥(用于内存访问权限的 RKEY)

注意:此流量与 RoCEv2 流量(端口 4791)分开,用于同步模型参数、部分结果操作等。

这些 TCP 会话将在作业启动时创建,默认情况下使用其中一个 GPU 接口(用于 RoCEv2 流量的接口相同)。

示例:

建议使用连接到(前端交换矩阵)的管理接口。为此,请在启动作业时包含以下内容: export NCCL_SOCKET_IFNAME=“mgmt_eth”。 相同的环境变量同时适用于 NCCL 和 RCCL。

示例:

注意:默认情况下,这些会话启用 ECN; net.ipv4.tcp_ecn = 1 ,但可以使用以下方式禁用: sudo sysctl -w net.ipv4.tcp_ecn=0

用于 RDMA 流量的 AMD Pollara DCQCN 配置

对于 AMD Pollara 验证,需要启用 DCQCN,并且必须在 AMD NIC 卡上应用 QOS。

  1. 使用脚本在 NIC 上配置 QOS。DSCP参数等同于表15中建议的值。服务器 DCQCN 配置参数。
  2. 使用 AMD nicctl 命令行实用程序,以下是配置的 QOS 参数:
  3. rdma link 命令可用于检查是否存在与 AMD Pollara NIC 卡的 roce-devices 关联。

    roce-devices 在加载 ionic_rdma 内核模块时创建,应为每个 NIC 卡创建以下 roce-device 文件。

  4. 要在 AMD Pollara NIC 上配置 DCQCN,请使用适当的参数运行以下脚本。
  5. 使用 nicctl 命令检查每个 roce 设备的 DCQCN 配置文件。
  6. 最后,运行rccl_test.sh脚本,如下所示。下面的示例显示了为“全部减少”运行的测试。