DOCA 文档 v2.10.0

流控制

优先级流控制 (PFC) IEEE 802.1Qbb 将暂停功能应用于以太网链路上的特定类别的流量。例如,PFC 可以为 RoCE 流量提供无损服务,为标准以太网流量提供尽力而为的服务。PFC 可以为特定类别的以太网流量(使用 IEEE 802.1p 流量类别)提供不同级别的服务。

在 ConnectX-4 及更高版本上配置 PFC

  1. 在所需的优先级上启用 PFC

    复制
    已复制!
                

    mlnx_qos -i <ethX> --pfc <0/1>,<0/1>,<0/1>,<0/1>,<0/1>,<0/1>,<0/1>,<0/1>

    示例 (优先级=4)

    复制
    已复制!
                

    mlnx_qos -i eth1 --pfc 0,0,0,0,1,0,0,0

  2. 创建 VLAN 接口

    复制
    已复制!
                

    vconfig add <ethX> <VLAN_ID>

    示例 (VLAN_ID=5)

    复制
    已复制!
                

    vconfig add eth1 5

  3. 设置出口映射

    1. 对于以太网流量

      复制
      已复制!
                  

      vconfig set_egress_map <vlan_einterface> <skprio> <up>

      示例 (skprio=3, up=5)

      复制
      已复制!
                  

      vconfig set_egress_map eth1.5 3 5

  4. 创建 8 个流量类别 (TC)

    复制
    已复制!
                

    tc_wrap.py -i <interface>

  5. 在交换机上启用 PFC。

    有关如何在各自的交换机上启用 PFC 的信息,请参阅 RDMA/RoCE 解决方案 社区页面中的“交换机 FC/PFC 配置”部分。

使用 LLDP DCBX 配置 PFC

主机上的 PFC 配置

在操作系统中使用 LLDP 工具进行 PFC 自动配置

  1. 在主机上启动 lldpad 守护程序。

    复制
    已复制!
                

    lldpad -d

    复制
    已复制!
                

    service lldpad start

  2. 将 lldpad 数据包发送到交换机。

    复制
    已复制!
                

    lldptool set-lldp -i <ethX> adminStatus=rxtx lldptool -T -i <ethX> -V sysName enableTx=yess lldptool -T -i <ethX> -V portDesc enableTx=yess lldptool -T -i <ethX> -V sysDesc enableTx=yess lldptool -T -i <ethX> -V sysCap enableTx=yess lldptool -T -i <ethX> -V mngAddr enableTx=yess lldptool -T -i <ethX> -V PFC enableTx=yes; lldptool -T -I <ethX> -V CEE-DCBX enableTx=yess

  3. 设置 PFC 参数。

  • 对于 CEE 协议,请使用 dcbtool

    复制
    已复制!
                

    dcbtool sc <ethX> pfc pfcup:<xxxxxxxx>

    示例:

    复制
    已复制!
                

    dcbtool sc eth6 pfc pfcup:01110001

    其中

    [pfcup:xxxxxxxx]

    启用/禁用优先级流控制。从左到右(优先级 0-7)- x 可以等于 0 或 1。1 表示优先级配置为传输优先级暂停。

  • 对于 IEEE 协议,请使用 lldptool

    复制
    已复制!
                

    lldptool -T -i <ethX> -V PFC enabled=x,x,x,x,x,x,x,x 

    示例:

    复制
    已复制!
                

    lldptool -T -i eth2 -V PFC enabled=1,2,4 

    其中

    已启用

    显示或设置启用 PFC 的优先级。set 属性接受要启用的优先级逗号分隔列表,或字符串 none 以禁用所有优先级。

在固件中使用 LLDP 进行 PFC 自动配置(适用于 mlx5 驱动程序)

在服务器上配置 PFC 和 ETS 有两种方法

  1. 本地配置 - 手动配置每台服务器。

  2. 远程配置 - 在交换机上配置 PFC 和 ETS,之后交换机将使用 LLDP DCBX TLV 将配置传递给服务器。

    使用 mlx5 驱动程序实现远程配置有两种方法

    1. 配置适配器固件以启用 DCBX。

    2. 配置主机以启用 DCBX。

有关如何在固件中使用 LLDP 自动配置 PFC 的更多信息,请参阅 如何通过 LLDP DCBX 在 ConnectX-4 上自动配置 PFC 和 ETS 社区帖子。

交换机上的 PFC 配置

  1. 为了启用 DCBX,应首先启用 LLDP

    复制
    已复制!
                

    switch (config) # lldp show lldp interfaces ethernet remote

  2. 将 DCBX 添加到每个所需接口的受支持 TLV 列表。

    对于 IEEE DCBX:

    复制
    已复制!
                

    switch (config) # interface 1/1 switch (config interface ethernet 1/1) # lldp tlv-select dcbx

    对于 CEE DCBX:

    复制
    已复制!
                

    switch (config) # interface 1/1 switch (config interface ethernet 1/1) # lldp tlv-select dcbx-cee

  3. [可选] 应用程序优先级可以在交换机上配置,具有所需的以太网类型和优先级。例如,IP 数据包,优先级 1

    复制
    已复制!
                

    switch (config) # dcb application-priority 0x8100 1

  4. 确保在主机上启用了 PFC(有关在主机上启用 PFC 的信息,请参阅上面的 主机上的 PFC 配置 部分)。启用后,它将在 LLDP TLV 中传递。

  5. 在以太网端口上启用具有所需优先级的 PFC。

    复制
    已复制!
                

    dcb priority-flow-control enable force dcb priority-flow-control priority <priority> enable interface ethernet <port> dcb priority-flow-control mode on force

    示例 - 在端口 1/1 上启用优先级 3 的 PFC

    复制
    已复制!
                

    dcb priority-flow-control enable force dcb priority-flow-control priority 3 enable interface ethernet 1/1 dcb priority-flow-control mode on force

优先级计数器

支持每个优先级的多个入口和出口计数器。运行 ethtool -S 以获取完整的端口计数器列表。

ConnectX-4 计数器

  • Rx 和 Tx 计数器

    • 数据包

    • 字节

    • 八位字节

    • 暂停

    • 暂停帧

    • 暂停持续时间

    • 暂停转换

示例

复制
已复制!
            

# ethtool -S eth35 | grep prio4 prio4_rx_octets: 62147780800 prio4_rx_frames: 14885696 prio4_tx_octets: 0 prio4_tx_frames: 0 prio4_rx_pause: 0 prio4_rx_pause_duration: 0 prio4_tx_pause: 26832 prio4_tx_pause_duration: 14508 prio4_rx_pause_transition: 0

注意

仅对于启用 PFC 的优先级,ConnectX-4 中的暂停计数器才通过 ethtool 可见。

PFC 风暴预防

PFC 风暴预防允许在默认模式和自动模式之间切换。

默认情况下, stall 预防超时配置为 8 秒。自动模式将 stall 预防超时设置为 100 毫秒。

可以使用 sysfs 在以下目录中控制该功能:/sys/class/net/eth*/settings/ pfc_stall_prevention

  • 查询 PFC stall 预防模式

    复制
    已复制!
                

    cat /sys/class/net/eth*/settings/pfc_stall_prevention

    示例

    复制
    已复制!
                

    $ cat /sys/class/net/ens6/settings/pfc_stall_prevention default

  • 配置 PFC stall 预防模式

    复制
    已复制!
                

    echo <option> /sys/class/net/<interface>/settings/pfc_stall_prevention

以下两个计数器已添加到 ethtool -S

  • tx_pause_storm_warning_events - 当设备 stall 的时间超过预配置的水印时,计数器会增加,从而使调试实用程序能够深入了解当前的设备状态。

  • tx_pause_storm_error_events - 当设备 stall 的时间超过预配置的超时时间时,暂停传输将被禁用,并且计数器会增加。

无丢包 RQ 功能使驱动程序能够在软件接收队列过载时通知固件。当软件接收队列的处理速度慢于硬件接收队列的处理速度时,就会发生这种情况。

启用此功能后,当接收队列已满时接收到的数据包不会立即丢弃。固件将累积这些数据包,假设新 WQE 的发布将很快恢复。如果在一定时间后未发布接收到的 WQE,则 out_of_buffer 计数器将增加,表明数据包已被丢弃。

此功能默认禁用。为了激活它,请确保还启用了流控制功能。

复制
已复制!
            

ethtool --set-priv-flags ens6 dropless_rq on

要获取功能状态,请运行:

复制
已复制!
            

ethtool --show-priv-flags DEVNAME

输出示例:

复制
已复制!
            

Private flags for DEVNAME: rx_cqe_moder : on rx_cqe_compress: off sniffer : off dropless_rq : off hw_lro : off

要禁用该功能,请运行:

复制
已复制!
            

ethtool --set-priv-flags ens6 dropless_rq off

© 版权所有 2025, NVIDIA。 上次更新时间:2025 年 2 月 12 日。