三层交换机之BCM56312芯片HOL拥塞丢包问题总结

用户报障组播花屏,查看交换UNI端口包统计,存在HOLD出口拥塞丢包。

20:22:36 BCM.0> show c c ge0
20:22:36 RUC.ge0         :         1,680,808,317         +82,097,712             886/s
20:22:36 RDBGC1.ge0      :                76,054              +5,340
20:22:36 HOLD.ge0        :             3,104,596            +145,569
20:22:36 GR64.ge0        :               355,912             +20,309
20:22:36 GR127.ge0       :         1,392,054,832         +70,593,389             718/s
20:22:36 GR255.ge0       :            79,887,985          +3,674,350              75/s
20:22:36 GR511.ge0       :            25,675,917          +1,373,198               3/s
20:22:37 GR1023.ge0      :            29,187,985          +1,164,996              63/s
20:22:37 GR1518.ge0      :           125,870,239          +4,247,750              28/s
20:22:37 GRMGV.ge0       :            27,098,913          +1,007,950
20:22:37 GR2047.ge0      :            28,017,599          +1,038,231
20:22:37 GRPKT.ge0       :         1,681,050,469         +82,112,223             886/s
20:22:37 GRBYT.ge0       :       363,826,467,122     +14,694,808,204         160,973/s
20:22:37 GRMCA.ge0       :                76,054              +5,340
20:22:37 GRBCA.ge0       :               166,098              +9,171
20:22:37 GROVR.ge0       :               918,686             +30,281
20:22:37 GRUC.ge0        :         1,679,889,631         +82,067,431             886/s
20:22:37 GRPOK.ge0       :         1,680,131,783         +82,081,942             886/s
20:22:37 GT64.ge0        :             1,814,746             +57,177
20:22:37 GT127.ge0       :           871,365,873         +35,674,422             379/s
20:22:37 GT255.ge0       :           104,240,011          +4,311,103              87/s
20:22:37 GT511.ge0       :           113,397,965          +3,310,902             302/s
20:22:37 GT1023.ge0      :           105,200,522          +3,239,467              12/s
20:22:37 GT1518.ge0      :         3,889,302,748         +94,718,866           3,026/s
20:22:37 GTMGV.ge0       :           461,049,277         +28,301,852               2/s
20:22:38 GT2047.ge0      :           565,358,483         +35,044,878               2/s
20:22:38 GTPKT.ge0       :         5,650,681,118        +176,357,585           3,785/s
20:22:38 GTMCA.ge0       :         2,894,323,395         +45,425,063           2,034/s
20:22:38 GTBCA.ge0       :           302,719,287          +3,911,733              49/s
20:22:38 GTOVR.ge0       :           104,309,206          +6,743,026
20:22:38 GTBYT.ge0       :     6,472,086,763,949    +193,005,388,859       4,268,102/s
20:22:38 GTUC.ge0        :         2,349,329,230        +120,277,763           1,702/s
20:22:38 GTPOK.ge0       :         5,546,371,912        +169,611,847           3,785/s

查看HOLD寄存器,每个端口都有一个独立的HOLD包统计寄存器,统计出口HOL拥塞丢包计数。

寄存器手册中,还有几个HOL丢包统计相关的寄存器HOLD_COS_PORT_SELECT和HOLD_COS0~7,两者相配合我们就可以精准地定位HOL拥塞丢包发生在指定端口的哪个出口队列。

 

举例说明

BCM.0> getreg HOLD_COS_PORT_SELECT 
HOLD_COS_PORT_SELECT.ipipe0[0xe780118]=0: <PORT_NUM=0>
BCM.0> phy info
Phy mapping dump:
      port   id0   id1  addr iaddr             name    timeout
  ge0(  0)   143  bd84    80    80      1000X/100FX     250000
  ge1(  1)   143  bd84    81    81      1000X/100FX     250000
  ge2(  2)   143  bd84    82    82      1000X/100FX     250000
  ge3(  3)   143  bd84    83    83      1000X/100FX     250000
  ge4(  4)   143  bd84    84    84      1000X/100FX     250000
  ge5(  5)   143  bd84    85    85      1000X/100FX     250000
  ge6(  6)   143  bd84    86    86      1000X/100FX     250000
  ge7(  7)   143  bd84    87    87      1000X/100FX     250000
  xe0( 24)   143  bd91    d8    d8            XGXS5     250000
BCM.0> 
BCM.0> getreg HOLD.ge0
HOLD.ge0[0xe700014]=0x160d: <COUNT=0x160d>
BCM.0> 
BCM.0> 
BCM.0> 
BCM.0> getreg HOLD_COS0
HOLD_COS0.ipipe0[0xe780015]=0x160d: <COUNT=0x160d>
BCM.0> getreg HOLD_COS1
HOLD_COS1.ipipe0[0xe780016]=0: <COUNT=0>
BCM.0> getreg HOLD_COS2
HOLD_COS2.ipipe0[0xe780017]=0: <COUNT=0>
BCM.0> getreg HOLD_COS3
HOLD_COS3.ipipe0[0xe780018]=0: <COUNT=0>
BCM.0> getreg HOLD_COS4
HOLD_COS4.ipipe0[0xe780019]=0: <COUNT=0>
BCM.0> getreg HOLD_COS5
HOLD_COS5.ipipe0[0xe78001a]=0: <COUNT=0>
BCM.0> getreg HOLD_COS6
HOLD_COS6.ipipe0[0xe78001b]=0: <COUNT=0>
BCM.0> getreg HOLD_COS7
HOLD_COS7.ipipe0[0xe78001c]=0: <COUNT=0>

此外,HOLCOSSTATUS和HOL_STAT_BMAP寄存器可以查看指定端口指定COS队列的HOL状态,但是这个是动态刷新的。

前面定位指定端口的指定队列的HOLD丢包,那么怎么解决呢?

以长江水为例,大部分时间段是相对匀速地从上游流向下游(线速转发),但是在洪水暴发季节(下行报文突发),洪水会漫过江堤(每秒可通过多少立方水类似于队列深度)。为了防止洪水漫过江堤造成危害,采取了两方面的措施,一个是三峡蓄水(PAUSE流控帧和反压),即上游降低流速;另外是设置泄洪区或者加高江堤(提高队列深度)。

针对前面的HOL拥塞丢包场景,我们采取调整队列深度,缓解拥塞丢包的办法。这就引入了HOLCOSPKTSETLIMIT寄存器,它基于指定端口和指定COS队列进行配置,其中PKTSETLIMIT设置COS队列深度,即占用MMU资源超过多少个cell时,触发芯片将该队列置为HOL状态;RESETLIMITSEL设置当占用MMU资源数降低到多少个cell时,触发芯片将该队列解除HOL状态。

 

 关于IBP反压,PAUSE流控和HOL拥塞可以参考《BCM56312芯片MMU介绍》。

posted on 2021-08-10 23:36  者旨於陽  阅读(661)  评论(0编辑  收藏  举报

导航