优化缓存和PFC参数配置建议
一般情况下,若配置了VIQ,VIQ可以满足网络中的业务要求。
若设备不支持VIQ、出现业务性能没有达到要求或者丢包等异常情况,可以通过命令行手动调整缓存和PFC门限。
TCP与RoCE流量混跑场景优化无损业务性能
如果用户需要混跑TCP流量与RoCE流量,则此时配置VIQ功能后,建议手动调小TCP流量的队列可占用共享缓存,使得芯片共享缓存空间更多的被无损RoCE流量使用。
【推荐值】:
队列共享缓存的动态阈值推荐配置如表2-9所示。需要注意的是,若已经开启了VIQ功能,则无损队列的共享缓存动态阈值就会自动调整为最大值,如果想手动调整无损队列的阈值,则需要先去使能VIQ。
<HUAWEI> system-view [~HUAWEI] interface 100ge 1/0/1 [*HUAWEI-100GE1/0/1] qos buffer queue 1 shared-threshold dynamic 1
无丢包下优化无损业务性能
开启无损队列缓存空间自动优化功能后,若没有出现无损队列的丢包,但是业务性能不满足需求,比如出现吞吐较高但是时延较大的情况,且通过display dcb pfc interface命令行查看收发的PFC反压帧计数发现每秒达到5000以上,可以判断为PFC门限触发过于频繁,可以在开启无损队列缓存空间自动优化功能的情况下适当调高PFC反压帧触发门限。
# 查看收发的PFC反压帧计数。
<HUAWEI> display dcb pfc interface 100ge 1/0/1 ----------------------------------------------------------------------------------------- Interface Queue Received(Frames) ReceivedRate(pps) DeadlockNum Transmitted(Frames) TransmittedRate(pps) RecoveryNum ----------------------------------------------------------------------------------------- 100GE1/0/1 3 148990 99 0 0 0 0 -----------------------------------------------------------------------------------------
与此同时,使能无损队列的缓存空间自动优化后,会为交换机的所有面板端口分配缓存,当交换机有多个端口未使用时,可以考虑通过增大PFC反压帧触发门限将正在使用的端口缓存阈值调大,也就是将未使用端口的缓存拿过来给在用的端口使用,提升端口的流量突发吸收能力,避免频繁触发PFC优先级流控,以进一步提升RoCEv2分布式应用的性能。需要注意的是,调整PFC反压门限时,在确保RoCEv2业务性能的同时,须避免出现PFC门限调整过高,导致出现拥塞时反压不及时,引起出端口队列产生丢包。
调整PFC反压帧触发门限,可以通过dcb pfc buffer命令调整xoff参数。
【推荐值】:
<HUAWEI> system-view [*HUAWEI] interface 100ge 1/0/1 [*HUAWEI-100GE1/0/1] dcb pfc buffer 3 xoff dynamic 4
设备形态 |
单机设备端口数N(上行+下行) |
dynamic阈值 |
---|---|---|
CE6865-48S8CQ-EI/CE8861-4C-EI |
<=8 |
6 (剩余缓存的系数:1/2) |
[8,32] |
5 (剩余缓存的系数:1/4) |
|
>32 |
4 (剩余缓存的系数:1/8) |
|
CE8850-64CQ-EI |
<=8 |
6 (剩余缓存的系数:1/2) |
[8,16] |
5 (剩余缓存的系数:1/4) |
|
>16 |
4 (剩余缓存的系数:1/8) |
|
对于CE16800,XOFF参数仅支持静态阈值,配置推荐值为: 单位为cell(对于CE16800,1 cell=288 bytes),其中N表示下行可能出现拥塞的最大端口数目,M表示流量的Incast程度,若现网流量模型为3打1,则M为3。 |
重要注意事项:
接口下配置PFC反压门限值,如果接口有流量通过,可能因为流量拥塞而导致配置失败。建议在端口不拥塞时(使用display qos buffer-usage命令查看端口流量是否拥塞)或者使用shutdown命令关闭端口后进行配置。
有丢包下解决丢包问题
现网无丢包时可以通过增大PFC反压帧触发门限,提高缓存吸收能力,优化业务性能,然而无丢包是无损网络最重要的目标,一旦出现丢包,需要尽快定位丢包原因,及时修改配置,以确保不因缓存配置不合理而导致丢包。芯片常见丢包,分为上行丢包和下行丢包,也即在交换机的端口入方向丢包和在端口出方向丢包,丢包位置不同丢包的可能原因也往往不同,需要不同的方式进行处理。
可以通过display interface 命令行查看是否出现丢包。如果Input方向出现Discard丢包计数,则对应端口入方向丢包;如果Output方向出现Discard丢包计数,则对应端口出方向丢包。
<HUAWEI> display interface 100GE1/0/1 100GE1/0/1 current state : UP (ifindex: 5) Line protocol current state : UP Description: Switch Port, TPID : 8100(Hex), The Maximum Frame Length is 9216 IP Sending Frames' Format is PKTFMT_ETHNT_2, Hardware address is 1457-9f9e-2f71 Port Mode: COMMON FIBER, Port Split/Aggregate: DISABLE Speed: 100000, Loopback: NONE Duplex: FULL, Negotiation: DISABLE Input Flow-control: DISABLE, Output Flow-control: DISABLE Mdi: -, Fec: RS-FEC Last physical up time : 2019-05-13 02:48:35 Last physical down time : 2019-05-13 02:45:08 Current system time: 2019-05-14 09:05:59 Statistics last cleared:2019-05-14 03:18:20 Last 10 seconds input rate: 8425269499 bits/sec, 976871 packets/sec Last 10 seconds output rate: 57453998 bits/sec, 42560 packets/sec Input peak rate 12349559550 bits/sec, Record time: 2019-05-14 03:38:09 Output peak rate 150264840 bits/sec, Record time: 2019-05-14 08:22:19 Input : 12528535003628 bytes, 11657621574 packets Output: 93571703978 bytes, 555304921 packets Input: Unicast: 11657620879, Multicast: 695 Broadcast: 0, Jumbo: 0 Discard: 0, Frames: 0 Pause: 0 Total Error: 0 CRC: 0, Giants: 0 Jabbers: 0, Fragments: 0 Runts: 0, DropEvents: 0 Alignments: 0, Symbols: 0 Ignoreds: 0 Output: Unicast: 536390526, Multicast: 695 Broadcast: 0, Jumbo: 0 Discard: 0, Buffers Purged: 0 Pause: 18913700 Input bandwidth utilization threshold : 90.00% Output bandwidth utilization threshold: 90.00% Last 10 seconds input utility rate: 8.42% Last 10 seconds output utility rate: 0.05%
上行出现丢包
<HUAWEI> display qos buffer ingress-statistics interface 100GE1/0/1 Interface Dropped Drop Rate Drop Time (Packets/Bytes) (pps/bps) ---------------------------------------------------------------- 100GE1/0/1 0 0 - 0 0 ----------------------------------------------------------------
- Headroom缓存空间偏小
一般情况下,无损队列的缓存空间自动优化功能会在端口入方向为无损队列分配合适的Headroom缓存空间。Headroom空间用于保证在PFC生效期间的不丢包能力。因此,若在端口入方向出现了丢包,可以通过display qos buffer ingress-usage命令查看为无损队列分配的端口Headroom缓存空间和芯片Headroom Pool缓存空间大小是否合适。
<HUAWEI> display qos buffer ingress-usage interface 100ge1/0/1 Ingress Buffer Usage (KBytes) on lossless priority: (Current/Total) *: Dynamic threshold -------------------------------------------------------------------------- Interface Priority Guaranteed PFC-Xoff Headroom -------------------------------------------------------------------------- 100GE1/0/1 3 0/2 0/4* 0/67 -------------------------------------------------------------------------- Service Pool: 12/30699 Headroom Pool: 0/4095 --------------------------------------------------------------------------
若认为自动分配的空间大小不合适,可以先去使能VIQ功能,选择手动配置缓存空间。(若没有使能VIQ,可以不配置本步骤)
<HUAWEI> system-view [~HUAWEI] low-latency fabric [~HUAWEI-low-latency-fabric] undo qos buffer auto-configuration enable //去使能无损队列的缓存空间自动优化功能 [*HUAWEI-low-latency-fabric] quit
调整时建议基于各端口的Headroom和芯片的Headroom Pool当前值(上方display qos buffer ingress-usage命令回显中的加粗值)进行调整。端口下PFC优先级的Headroom缓存建议以8KBytes为单位进行调整,转发芯片全局的Headroom Pool缓存空间建议以128KBytes为单位进行调整。<HUAWEI> system-view [~HUAWEI] interface 100ge 1/0/1 [*HUAWEI-100GE1/0/1] dcb pfc buffer 3 xoff dynamic 4 hdrm 75 kbytes //增大8KBytes端口下Headroom缓存空间 [*HUAWEI-100GE1/0/1] quit [*HUAWEI] qos buffer headroom-pool size 4223 kbytes slot 1 //增大128KBytes芯片内Headroom Pool缓存空间 [*HUAWEI] commit
【推荐值】:
端口下配置的Headroom参数推荐配置值表2-11如所示。
- 对端PFC未正常开启
可以排查上游设备,是否开启PFC配置,若没有开启,在上游设备上配置PFC功能。
下行出现丢包
<HUAWEI> display qos queue statistics interface 100ge1/0/1 Queue CIR/PIR Passed Pass Rate Dropped Drop Rate Drop Time (% or kbps) (Packets/Bytes) (pps/bps) (Packets/Bytes) (pps/bps) ---------------------------------------------------------------------------------------------- 0 0 2 0 0 0 - 100000000 156 0 0 0 ---------------------------------------------------------------------------------------------- 1 0 0 0 0 0 - 100000000 0 0 0 0 ---------------------------------------------------------------------------------------------- 2 0 0 0 0 0 - 100000000 0 0 0 0 ---------------------------------------------------------------------------------------------- 3 0 11852030380 1081904 0 0 - 100000000 10549341258548 8232848944 0 0 ---------------------------------------------------------------------------------------------- 4 0 6 0 0 0 - 100000000 1092 0 0 0 ---------------------------------------------------------------------------------------------- 5 0 682363 12 0 0 - 100000000 148622146 19160 0 0 ---------------------------------------------------------------------------------------------- 6 0 29332473 3329 0 0 - 100000000 2405730349 2184528 0 0 ---------------------------------------------------------------------------------------------- 7 0 0 0 0 0 - 100000000 0 0 0 0 ----------------------------------------------------------------------------------------------
正常情况下,RoCEv2对应的出方向无损优先级队列不会出现丢包。若出现丢包,一般是RoCEv2并突发流量过大。比如出现Incast流量导致现有配置不能满足需求。可以通过如下方式尝试解决 :
- 降低上行PFC反压帧触发门限
当上行PFC反压帧触发门限配置偏大时,一旦出现拥塞,会先触发下行动态缓存门限,可以通过dcb pfc buffer命令降低PFC的Xoff阈值来解决,具体操作与“无丢包下优化无损业务性能”中的步骤一致,可以根据需要选择配置动态或静态PFC门限。
- 增大无损队列的下行动态缓存门限
当无损队列的下行动态缓存不够时,一旦出现Incast流量,无法保证在PFC生效前下行不出现丢包。增大无损队列的下行动态缓存,可以通过以下方式。
- 首先,通过display qos buffer egress-usage命令查看接口出方向队列的缓存使用情况,以此为基础对队列缓存进行调整。
<HUAWEI> display qos buffer egress-usage interface 100ge1/0/1 Egress Buffer Usage (KBytes) on single queue: (Current/Total) *: Dynamic threshold ------------------------------------------------------------ Interface Queue Type Guaranteed Shared ------------------------------------------------------------ 100GE1/0/1 0 Lossy 0/1 0/5* 1 Lossy 0/1 0/5* 2 Lossy 0/1 0/5* 3 Lossless 0/1 0/10156 4 Lossy 0/1 0/5* 5 Lossy 0/1 0/5* 6 Lossy 0/1 0/5* 7 Lossy 0/1 0/5* ------------------------------------------------------------ Lossless Service Pool (cells): 0/0 Lossy Service Pool (cells): 0/151136 ------------------------------------------------------------
- 通过qos buffer queue命令用来手工配置队列级出方向的Queue Service和Queue Guaranteed缓存空间大小(主要是配置Service缓存空间的大小,因为Guaranteed是非抢占的,不能共享)。此时有两种选择:
- 增大无损队列出方向的Queue Service缓存空间。若已经使能了VIQ功能,此时需要先去使能VIQ功能,才可以对无损队列的缓存空间进行配置,此处步骤略。
<HUAWEI> system-view [~HUAWEI] interface 100ge 1/0/1 [*HUAWEI-100GE1/0/1] qos buffer queue 3 shared-threshold dynamic 15 //增大无损队列出方向的Queue Service缓存空间 [*HUAWEI-100GE1/0/1] quit [*HUAWEI] commit
- 调小有损队列出方向的Queue Service缓存空间。调整有损队列的缓存空间可以和VIQ功能同时配置。
[~HUAWEI] interface 100ge 1/0/1 [*HUAWEI-100GE1/0/1] qos buffer queue 2 shared-threshold dynamic 3 //调小有损队列出方向的Queue Service缓存空间 [*HUAWEI-100GE1/0/1] quit [*HUAWEI] commit
【推荐值】:
为了尽量减少有损队列对缓存的使用,保障无损队列的可用缓存,建议无损队列的dynamic值配置为15,有损队列的dynamic值配置为1~3。
- 增大无损队列出方向的Queue Service缓存空间。若已经使能了VIQ功能,此时需要先去使能VIQ功能,才可以对无损队列的缓存空间进行配置,此处步骤略。
- 首先,通过display qos buffer egress-usage命令查看接口出方向队列的缓存使用情况,以此为基础对队列缓存进行调整。