Skip to content

无损网络参数调整 ​

《H3C RoCE 网络开局一本通》拆分章节,文档版本:6W102。

返回总目录 · 上一篇 · 下一篇


4.1 简介 ​

通常情况下,建议采用 PFC 和 ECN 的推荐配置值。 PFC 和 ECN 的推荐值请咨询 H3C 技术支持人员。推荐值在一般的组网环境下是效果较好的参数组合,一般不需要调整。部分情况下,由于组网需求或网络中的设备、服务器存在特殊性,需要进一步调整参数时,请参考参数调整章节。

4.2 网卡配置参考 ​

确认服务器网卡是否支持和启用了 PFC 和 ECN 功能,并查看服务器的 RoCE 队列报文是否携带 ECN 标志位。

本文以 Mellanox ConnectX-6 Lx 网卡的配置作为示例。

需要注意的是:网卡配置在服务器重启和网卡重启后会失效,重启服务器或重启网卡后需要重新配置,建议将网卡配置写到服务器启动配置中,防止重启失效。

本节仅供参考, RDMA 网卡的配置方式请以网卡及其适配服务器的资料为准。

4.2.1 网卡型号和版本 ​

项目信息
网卡型号Ethernet controller: Mellanox Technologies MT2894 Family [ConnectX-6 Lx]
网卡驱动版本MLNX_OFED_LINUX-5.4-3.2.7.2.3-rhel8.4-x86_64
网卡固件版本driver: mlx5_core

version: 5.4-3.2.7.2.3 firmware-version: 26.31.2006 (MT_0000000531)

4.2.2 准备工作 ​

  • 执行 mst start 命令开启 MST (Mellanox Software Tools)服务。

  • 执行 mst status 查看 Mellanox 设备状态信息。

  • (可选)执行 show_gids 命令查看网卡名称、 GID 值、 IP 地址。

4.2.3 配置网卡接口信任报文的 DSCP 优先级 ​

执行 mlnx_qos -i ifname --trust dscp 命令配置接口信任报文的 DSCP 优先级, ifname 为网卡接口名称。

另外需要注意,网卡上设置的报文的 DSCP 值需要与设备上 RoCE 报文的 DSCP 优先级对应,即设备上开启 PFC 和 ECN 功能的 802.1p 优先级映射的 DSCP 优先级等于网卡发出报文的 DSCP 优先级。(不同的报文使用不同的 QoS 优先级,例如 VLAN 报文使用 802.1p, IP 报文使用 DSCP。 当二层报文从被转化为三层报文时,二层报文的 802.1p 优先级会被映射为 IP 报文使用的 DSCP 优先级,当三层报文被转化为二层报文时, IP 报文使用的 DSCP 优先级会被映射为二层报文的 802.1p 优先级。关于优先级映射的详细介绍和缺省情况,请参见产品配套的 QoS 配置手册中的“优先级映射”)

4.2.4 设置 CNP 报文的 DSCP 优先级 ​

步骤如下:

  • (1) 使用 ethtool -i ifname bus-info 命令查看接口的 bus-info 值。例如查看 ens1f0 接口的 bus-info 值执行 ethtool -i ens1f0 bus-info,查询到 ens1f0 接口的 bus-info 为 0000:86:00.0。

  • (2) 进入设置 DSCP 优先级的路径 cd /sys/kernel/debug/mlx5 /0000:86:00.0/ cc_params

  • (3) 执行 echo priority_value > np_cnp_dscp 命令设置 CNP 报文的 DSCP 优先级,例如设置 CNP 报文的 DSCP 优先级为 48 执行 echo 48 > np_cnp_dscp。

  • (4) 执行 cat np_cnp_dscp 命令查看 CNP 报文优先级是否修改成功。

4.2.5 开启 RoCE 队列的 PFC 功能 ​

执行 mlnx_qos -i ifname -–pfc 0,1,2,3,4,5,6,7 命令开启 RoCE 队列的 PFC 功能。 ifname 为网卡接口名称。 0,1,2,3,4,5,6,7 对应位置的值设置为 0 表示数值代表的优先级不开启 PFC,设置为 1 表示数值代表的优先级开启 PFC。

例如,开启接口 ens1f0 802.1P 优先级为 5 的报文的 PFC 命令为 mlnx_qos -i ens1f0 --pfc 0,0,0,0,0,1,0,0。

执行 mlnx_qos -i ifname 命令可以查看接口 PFC 功能开启情况。值为 1 表示该优先级的报文开启 PFC。


4.2.6 开启 RoCE 队列的 ECN 功能 ​

执行如下命令开启指定优先级报文的 ECN 功能:

  • echo 1 > /sys/class/net/ ifname /ecn/roce_np/enable/ priority_value

  • echo 1 > /sys/class/net / ifname /ecn/roce_rp/enable/ priority_value

  • 例如开启接口 ens1f0 优先级为 5 的报文的 ECN 功能执行:

  • echo 1 > /sys/class/net/ens1f0/ecn/roce_np/enable/5

  • echo 1 > /sys/class/net/ens1f0/ecn/roce_rp/enable/ 5

  • 执行下面命令查看 ECN 是否开启成功,返回 1 表示开启成功,返回为 0 表示没有开启。

  • cat /sys/class/net/ ifname /ecn/roce_np/enable/ priority_value

  • cat /sys/class/net/ ifname /ecn/roce_rp/enable/ priority_value

4.3 参数调整(国产芯片设备 S12500G-AF/S12500CR/S6850-G) ​

适用于第二类交换机。

4.3.1 配置限制和指导 ​

在进行参数调整的过程中,配置如下 PFC、 QoS、数据缓冲区相关命令时可能会导致端口流量中断, 请谨慎使用,或在专业人士指导下调整。

  • buffer egress cell queue shared (配置本命令本身不丢包,执行 buffer apply 应用配置时可能导致丢包)

  • buffer apply

  • qos wred apply

  • qos wrr weight

  • qos wrr group weight

  • qos wfq byte-count

  • qos wfq queue-id group { 1 | 2 } byte-count

  • priority-flow-control no-drop dot1p

  • priority-flow-control dot1p headroom

  • priority-flow-control dot1p ingress-buffer dynamic

  • priority-flow-control dot1p ingress-buffer static

  • priority-flow-control dot1p ingress-threshold-offset

  • priority-flow-control dot1p reserved-buffer

4.3.2 观察是否存在丢包 ​

1. 查看接口是否有丢包 ​

说明: 查看接口 HundredGigE2/0/1 丢弃报文的信息。

<Sysname> display packet-drop interface HundredGigE 2/0/1
HundredGigE2/0/1:
 Packets dropped due to full GBP or insufficient bandwidth: 0

  Packets dropped due to Fast Filter Processor (FFP): 0
  Packets dropped due to STP non-forwarding state: 0
 Packets of ECN marked: 0
  1. 出现 insufficient bandwidth 类型丢包处理步骤
  • (1) 若出现 insufficient bandwidth 类型的丢包,但没有 ECN marked 计数,请首先检查此接口出现丢包的队列是否为预期无损队列。例如:
<Sysname> display qos queue-statistics interface HundredGigE 2/0/1 outbound
Interface: HundredGigE2/0/1
 Direction: outbound
 Forwarded: 0 packets, 0 bytes
 Dropped: 0 packets, 0 bytes
 ...
 Queue 5
  Forwarded: 123 packets, 0 bytes, 0 pps, 0 bps
  Dropped: 88 packets, 0 bytes
  Current queue length: 123 packets

 如果丢包队列和计数增长队列并非预期的无损队列,请检查流量入口的优先级信任模式是否正确: <Sysname> display current-configuration interface HundredGigE 2/0/2 # interface HundredGigE2/0/2 port link-mode bridge qos trust dscp #  如果流量入口的信任模式正确,请检查设备的 qos map-table 映射表是否正确。比如: <Sysname> display qos map-table dscp-lp MAP-TABLE NAME: dscp-lp TYPE: pre-define IMPORT : EXPORT 0 : 0 1 : 0 ...

  • 如果流量仍不在预期的无损队列,请通过抓包确认网卡发送报文的 dscp/dot1p 优先级是否正确。

  • (2) 如果丢包计数增长的队列是预期的无损队列,请检查对应接口的对应队列是否配置了 WRED 参数。例如:

<Sysname> display qos wred interface HundredGigE 2/0/1 Interface: HundredGigE2/0/1 Current WRED configuration: QID gmin gmax gpro ymin ymax ypro rmin rmax rpro -------------------------------------------------------------------------------5 600 2000 20 600 2000 20 600 2000 20 (3) 如果此接口已经配置了 WRED 参数,请尝试在全局使能 ECN 功能。例如: <sysname> system-view [Sysname] qos wred ecn enable 注意: Ai-ECN 配置与全局 ECN 配置互斥,配置方式请以产品或方案资料为准。


  • (4) 如果此时仍有 insufficient bandwidth 类型的丢包,需要检查队列出方向最大共享区域占用比是否配置为 100% 和是否执行了 buffer apply 命令。例如:

  • 配置队列 5 在 cell 资源中的最大共享缓存占用比为 100% 并应用配置。 ​

<sysname> system-view
[Sysname] buffer egress cell queue 5 shared ratio 100
[Sysname] buffer apply
  • (5) 如果此时 insufficient bandwidth 类型的丢包计数没有停止增长,且仍没有 ECN marked 计数,则需要通过抓包查看服务器发送的 RoCE 队列报文 ECN 标志位是否正确(01 或 10)。 若不正确,请排查服务器网卡是否支持并启用了 ECN 功能。

  • (6) 如果此时 insufficient bandwidth 类型的丢包计数没有停止增长,但已有 ECN marked 计数, 需要检查流量入口是否使能了 PFC 功能。例如:

<Sysname> display current-configuration interface HundredGigE 2/0/1
interface HundredGigE2/0/1
 port link-mode bridge
 priority-flow-control dot1p 5 ingress-buffer static 2000
 priority-flow-control enable
 priority-flow-control no-drop dot1p 5
  1. 不存在 insufficient bandwidth 类型丢包计数但网络上仍有丢包
  • (1) 如果 ECN marked 计数增长,但网络上仍存在丢包,请检查接口的 PFC 参数配置,建议调整为推荐参数。例如:
<Sysname> display current-configuration interface HundredGigE 2/0/1
interface HundredGigE2/0/1

port link-mode bridge priority-flow-control dot1p 5 ingress-buffer static 2000 priority-flow-control enable priority-flow-control no-drop dot1p 5 qos trust dscp qos wred queue 5 drop-level 0 low-limit 600 high-limit 2000 discard-probability 20 qos wred queue 5 drop-level 1 low-limit 600 high-limit 2000 discard-probability 20 qos wred queue 5 drop-level 2 low-limit 600 high-limit 2000 discard-probability 20 (2) 如仍有丢包,可以检查当前设备、互连设备的 PFC 帧收发状态是否正确。例如:

<sysname> display priority-flow-control interface
Conf -- Configured mode   Ne -- Negotiated mode   P -- Priority
Interface     Conf Ne  Dot1pList   P Recv       Sent       Inpps      Outpps
HGE2/0/1      On   On  5
HGE2/0/2      Off  Off
  • (3) 如 PFC 帧有收发计数,可以增加流量入口端口 Headroom 缓存门限值的大小,直到不再出现丢包。例如:

说明: 配置 Headroom 缓存门限为 4500。

<sysname> system-view
[Sysname] interface HundredGigE2/0/1
[Sysname-HundredGigE2/0/1] priority-flow-control dot1p 5 headroom 4500
  • (4) 如果 Headroom 调整至最大值仍然丢包,请排查服务器网卡是否支持并启用了 PFC 功能。

4. 丢包问题没有解决或无法排查到丢包位置 ​

请联系产品的技术支持。

4.3.3 观察时延是否满足需求 ​

为了满足时延需求,在不丢包的情况下,可以调整 ECN 和 PFC 的部分参数,进而降低时延。调整时延会影响吞吐,可以认为的原则是:在拥塞网络环境下,占用的 buffer 越小,时延越低,吞吐量较小;占用的 buffer 越大,时延越大,吞吐量较大。请根据具体组网需求平衡时延和吞吐的关系。 不拥塞网络环境下, PFC 和 ECN 等功能不生效。触发 ECN、 PFC 后,报文转发降速。调整的原则是尽量在低 buffer 占用,不丢包的情况下触发 ECN 和 PFC。建议优先调整 ECN。

另外需要注意的是,参数调整还需要考虑服务器网卡的支持情况,包括网卡对 PFC、 ECN 报文的响应机制,是否有 PFC、 ECN 相关的特殊能力。例如有些网卡支持自降速功能(时延大的情况自动降速)。此时如果我们想要加大吞吐,但是调整后加大了时延,服务器自降速了,反而起到了和预期相反的效果。建议调整前先查阅服务器的相关资料,了解服务器网卡 PFC、 ECN 功能的支持情况和相关功能,并在调整过程中实际验证调整是否合适。

1. 调整 ECN ​

可以调整 WRED 表中各队列的如下参数,控制时延与吞吐量:

  • Low-limit (队列平均长度的下限)和 high-limit (队列平均长度的上限):通过调低 low-limit 和 high-limit 值,可以更快的触发 ECN 标记,使时延更低,但可能会影响吞吐量。

  • discard-probability (丢弃概率):在使能了 ECN 后,代表的是标记概率,该值越大, 表示在上下限门限之间被标记的报文数越多。建议保持推荐值,仅在完成其他调整项后仍然无效的情况下再尝试调整。可以按照当前值 20% 的幅度进行调整。

配置举例:

说明: 配置队列 5 的 WRED 参数:队列平均长度的下限为 800,队列平均长度的上限为 1800。

<Sysname> system-view
[Sysname] interface HundredGigE 2/0/1
[Sysname-HundredGigE2/0/1] qos wred queue 5 low-limit 800 high-limit 1800

2. 调整 PFC ​

PFC 是 ECN 后的一层屏障,保证设备不丢包。 PFC 一般不被触发,对时延影响不大,并且 PFC 门限调整过低会影响吞吐量,所以一般不建议调整。

但如果想进一步降低时延,可以尝试调整 ingress-buffer 参数(反压帧触发门限)。

需要注意的是,在设备有流量收发的情况下调整 PFC 参数可能会引起丢包。

  • (1) 减小 ingress-buffer 门限值,建议跟随 WRED 的 high-limit 门限进行调整(按当前值 10% 的幅度减小),但要保证该门限值大于 WRED 的 high-limit 门限值,保证设备优先触发 ECN 功能。 # 配置动态反压帧触发门限为 3600(cell)。
<sysname> system-view
[Sysname] interface HundredGigE 2/0/1
[Sysname- HundredGigE 2/0/1] priority-flow-control dot1p 5 ingress-buffer static 3600

  • (2) 调整完成后,可以通过命令行多次查看接口的 PFC 信息,尽量保证设备上 PFC 的收发数量较少,即不触发或偶尔触发 PFC。如果多次查看发现存在 PFC 报文收发,则表示 ingress-buffer 值配置过低,建议回调。 # 显示接口的 PFC 信息。
<Sysname> display priority-flow-control interface
Conf -- Configured mode   Ne -- Negotiated mode   P -- Priority
Interface     Conf Ne  Dot1pList   P Recv       Sent       Inpps      Outpps
HGE1/0/25     Auto On  0,2-3,5-6   0 178         43         12         15

4.4 参数调整(S9825&S9855) ​

适用于第一类交换机。

4.4.1 配置限制和指导 ​

在进行参数调整的过程中,配置如下 PFC、 QoS、数据缓冲区相关命令时会导致端口流量中断。

  • buffer apply

  • buffer egress cell queue shared (配置本命令本身不丢包,执行 buffer apply 应用配置时丢包)

  • qos wred queue

  • qos wrr weight

  • qos wrr group weight

  • qos wfq byte-count

  • qos wfq queue-id group { 1 | 2 } byte-count

  • priority-flow-control no-drop dot1p

  • priority-flow-control dot1p headroom

  • priority-flow-control dot1p ingress-buffer dynamic

  • priority-flow-control dot1p ingress-buffer static

  • priority-flow-control dot1p ingress-threshold-offset

  • priority-flow-control dot1p reserved-buffer

4.4.2 观察是否存在丢包 ​

1. 查看接口是否有丢包 ​

查看接口 HundredGigE1/0/25 丢弃报文的信息。

<Sysname> display packet-drop interface hundredgige 1/0/25
HundredGigE1/0/25:
  Packets dropped due to Fast Filter Processor (FFP): 0
  Packets dropped due to Egress Filter Processor (EFP):  : 0
  Packets dropped due to STP non-forwarding state: 0
  Packets dropped due to insufficient data buffer. Input dropped: 0 Output dropped: 0
  Packets of ECN marked: 0
  Packets of WRED droped: 0

  1. 出现数据缓冲区不足(insufficient data buffer)丢包处理
  • (1) 若出现 Input dropped 类型的丢包,可以增加端口 Headroom 缓存门限值的大小,建议按照当前配置值的倍数进行调整,直到不再出现 Input dropped 类型的丢包。例如:

  • 配置 Headroom 缓存门限为 982。 ​

<sysname> system-view
[Sysname] interface hundredgige 1/0/25
[Sysname-HundredGigE1/0/25] priority-flow-control dot1p 5 headroom 982

如果调整至最大值仍然丢包,请排查服务器网卡是否支持和启用 PFC 功能。

  • (2) 若出现 Output dropped 类型的丢包,需要检查队列出方向最大共享区域占用比是否配置为 100% 和是否执行了 buffer apply 命令。例如:

  • 配置队列 5 在 cell 资源中的最大共享缓存占用比为 100% 并应用配置。 ​

<sysname> system-view
[Sysname] buffer egress cell queue 5 shared ratio 100
[Sysname] buffer apply

如果出方向队列配置为 100% 后仍然有 Output dropped 类型的丢包,则可能存在组网或配置问题,请排查组网和配置问题或联系技术支持。

  1. 出现 WRED 类型(WRED droped)丢包处理
  • (1) 若出现 WRED droped 丢包,请查看 RoCE 队列的 ECN 功能是否已开启。
<Sysname> display qos wred table
Table name: 1
Table type: Queue based WRED
QID gmin gmax gprob ymin ymax yprob rmin rmax rprob exponent ECN
----------------------------------------------------------------------------

0 100 1000 10 100 1000 10 100 1000 10 9 N
1 100 1000 10 100 1000 10 100 1000 10 9 N
2 100 1000 10 100 1000 10 100 1000 10 9 N
3 100 1000 10 100 1000 10 100 1000 10 9 N
4 100 1000 10 100 1000 10 100 1000 10 9 N
5 100 1000 10 100 1000 10 100 1000 10 9 N
6 100 1000 10 100 1000 10 100 1000 10 9 N
7 100 1000 10 100 1000 10 100 1000 10 9 N
  • (2) 若 RoCE 队列的 ECN 功能未开启(显示信息中 ECN 字段显示为 N),则需要开启 RoCE 队列的 ECN 功能。
<Sysname> system-view
[Sysname] interface hundredgige 1/0/25
[Sysname-HundredGigE1/0/25] qos wred queue 5 ecn
  • (3) 若 RoCE 队列的 ECN 功能开启后 WRED 类型的丢包继续增加,则需要查看服务器的 RoCE 队列报文是否携带 ECN 标志位。若未携带,请排查服务器网卡是否启用了 PFC 和 ECN 功能。

  • (4) 如果仍然存在丢包,请联系技术支持。


4.4.3 观察时延是否满足需求 ​

为了满足时延需求,在不丢包的情况下,可以调整 ECN 和 PFC 的部分参数,进而降低时延。调整时延会影响吞吐,可以认为的原则是:在拥塞网络环境下,占用的 buffer 越小,时延越低,吞吐量较小;占用的 buffer 越大,时延越大,吞吐量较大。请根据具体组网需求平衡时延和吞吐的关系。 不拥塞网络环境下, PFC 和 ECN 等功能不生效。触发 ECN、 PFC 后,报文转发降速。调整的原则是尽量在低 buffer 占用,不丢包的情况下触发 ECN 和 PFC。建议优先调整 ECN。

另外需要注意的是,参数调整还需要考虑服务器网卡的支持情况,包括网卡对 PFC、 ECN 报文的响应机制,是否有 PFC、 ECN 相关的特殊能力。例如有些网卡支持自降速功能(时延大的情况自动降速)。此时如果我们想要加大吞吐,但是调整后加大了时延,服务器自降速了,反而起到了和预期相反的效果。建议调整前先查阅服务器的相关资料,了解服务器网卡 PFC、 ECN 功能的支持情况和相关功能,并在调整过程中实际验证调整是否合适。

  1. 调整 ECN

可以调整 WRED 表中各队列的如下参数,控制时延与吞吐量:

  • Low-limit (队列平均长度的下限)和 high-limit (队列平均长度的上限):通过调低 low-limit 和 high-limit 值,可以更快的触发 ECN 标记,使时延更低,但可能会影响吞吐量。

  • Weighting-constan (计算平均队列长度的指数):表示的是队列深度的计算方式,为 0 表示实时队列深度,对 ECN 的标记会更灵敏。平均队列长度的指数越大,计算平均队列长度时对队列的实时变化越不敏感。建议保持推荐值。仅在完成其他调整项后仍然无效的情况下再尝试调整。

  • discard-probability (丢弃概率):在使能了 ECN 后,代表的是标记概率,该值越大, 表示在上下限门限之间被标记的报文数越多。建议保持推荐值,仅在完成其他调整项后仍然无效的情况下再尝试调整。可以按照当前值 20% 的幅度进行调整。

配置举例:

说明: 配置队列 5 的 WRED 参数:队列平均长度的下限为 800,队列平均长度的上限为 1800。

<Sysname> system-view
[Sysname] qos wred queue table queue-table1
[Sysname-wred-table-queue-table1] queue 5 drop-level 0 low-limit 800 high-limit 1800
[Sysname-wred-table-queue-table1] queue 5 drop-level 1 low-limit 800 high-limit 1800
[Sysname-wred-table-queue-table1] queue 5 drop-level 2 low-limit 800 high-limit 1800

2. 调整 PFC ​

PFC 是 ECN 后的一层屏障,保证设备不丢包。 PFC 一般不被触发,对时延影响不大,并且 PFC 门限调整过低会影响吞吐量,所以一般不建议调整。

但如果想进一步降低时延,可以尝试调整 ingress-buffer 参数(反压帧触发门限)。

需要注意的是,在设备有流量收发的情况下调整 PFC 门限会引起丢包。

  • (1) 减小 ingress-buffer 门限值,建议跟随 WRED 的 high-limit 门限进行调整(按当前值 10% 的幅度减小),但要保证该门限值大于 WRED 的 high-limit 门限值,保证设备优先触发 ECN 功能。 # 配置动态反压帧触发门限为 4。

<sysname> system-view
[Sysname] interface hundredgige 1/0/25
[Sysname-HundredGigE1/0/25] priority-flow-control dot1p 5 ingress-buffer dynamic 4
  • (2) 调整完成后,可以通过命令行多次查看接口的 PFC 信息,尽量保证设备上 PFC 的收发数量较少,即不触发或偶尔触发 PFC。如果多次查看发现存在 PFC 报文收发,则表示 ingress-buffer 值配置过低,建议回调。 # 显示接口的 PFC 信息。
<Sysname> display priority-flow-control interface
Conf -- Configured mode   Ne -- Negotiated mode   P -- Priority
Interface     Conf Ne  Dot1pList   P Recv       Sent       Inpps      Outpps
HGE1/0/25     Auto On  0,2-3,5-6   0 178         43         12         15