三层交换机之BCM56312交换芯片MMU介绍

概述

BCM5631x系列交换芯片不支持HQoS,其MMU提供以下功能:

1)Ingress back pressure (IBP)

2)PAUSE metering

3)Head-of-line (HOL) blocking prevention

4)Congestion bits

本方案旨在对缓存利用增加约束条件,同时确定拥塞场景的预定义行为。芯片内部的拥塞丢包要么体现在入端口包统计,要么体现在出端口和COS队列包统计。

IBP(Ingress Back Pressure)

IBP机制的目的有两个:

1)最大限度保证不丢包;

2)尽量让各Ingress Port公平地利用缓存资源;

IBP机制包括local IBP(end-to-end IBP)和remote IBP(end-to-end flow control)。

IBP利用IBPPKTCOUNTIBPCELLCOUNT两个计数器来统计每个ingress port占用的包个数和MMU cell数。当入口拥塞时,PAUSE流控帧被用来告知对端停止发送报文,什么时候发送PAUSE流控帧取决于前述计数值和一些预定义的阈值。

IBPBKSTATUS用来跟踪ingress port是否处于back pressure状态。当ingress port处于back pressure状态时,定期发送PAUSE流控帧(timer value 0xffff)给对端,解除back pressure状态之后,发送PAUSE流控帧(timer value 0x0)给对端通知对端继续发送报文。

当IBPCELLCOUNT超过CELLSETLIMIT时,ingress port进入back pressure状态并停止收包;当超过DISCARDSETLIMIT时,开始丢包;降至RESETLIMITSEL时,退出backpressure状态并开始收包。

IBP Cell Thresholds和Packet Thresholds任意一个满足条件,则进入back pressure状态;两者且不满足,才退出back pressure状态。

 

各阈值寄存器定义如下:

PAUSE Metering

每个ingress port都有一个单独的漏桶(leaky bucket)用来计算端口占用的带宽。PAUSE Metering可以用来触发ingress port反压(即PAUSE流控帧),从而限制带宽。这种机制提供了入端口流量整形(rate shaping)的能力。

 漏桶的原理是,每隔T_REFRESH时间间隙,从BUCKET_COUNT中取出REFRESHCOUNT个令牌(token),最开始,BUCKET_COUNT为0,当入端口接收报文时,令牌被放入BUCKET_COUNT中。

每发送一个cell数据,漏桶状态都会被更新。当MMU检测到达到阈值时,会在1~2个时钟周期内给入端口发送消息,入端口在完成当前数据发送之后响应。

当MMU占用资源达到DISCARD阈值时,MMU开始丢弃后续报文(同时通知ingress port丢弃后续报文),直到MMU占用资源降低到RESUME阈值。

HOL Prevention

HOL预防机制的目的是:

  • 最大限度保证缓存不丢包
  • 以Egress Port和COS队列的粒度管理缓存资源

IBP是最大限度保证不丢包,而HOL是通过有选择的丢包来实现缓存管理。

HOL包统计寄存器

COSPKTCOUNT

COSCELLCOUNT

DYNCELLCOUNT

TOTALDYNCELLUSED

HOL状态寄存器

HOLSTATUS

HOL阈值寄存器

为了处理接收到的分片包,MISCCONFIG.SKIDMARKER用来设置最大分片数。因此,真实的PKTSETLIMIT阈值是PKTSETLIMIT - MISCCONFIG.SKIDMARKER。

MISCCONFIG.DYNAMIC_MEMORY_EN决定当前缓存是静态分配还是动态分配。

静态缓存分配

LCCOUNT统计每个Egress Port和COS队列的缓存占用数,如果达到LWMCOSCELLSETLIMIT.CELLSETLIMIT,则置为HOL状态,降到LWMCOSCELLSETLIMIT.CELLRESETLIMIT,则解除HOL状态。

动态缓存分配

每个COS队列都会分配一个保证cell数,由LWMCOSSETLIMIT.CELLSETLIMIT配置,其总和不应该超过CBP总cell数(6144)。剩下的cell资源被称为“Dynamic Pool”,被所有COS队列共享,动态缓存分配的阈值即定义每个COS队列最大可以从共享缓存池中占用的cell数的比例,其实际占用数可以通过TOTALDYNCELLUSED获取。

芯片级别的HOL通过TOTALDYNCELLUSED计数与TOTALDYNCELLLIMIT和TOTALDYNCELLRESETLIMIT比较决定。

端口级别的HOL通过DYNCELLCOUNT计数与DYNCELLSETLIMIT和DYNCELLRESETLIMIT比较决定。

LWNCOSSETLIMIT.CELLSETLIMIT和DYNCELLLIMIT共同决定每个端口可以占用cell数的上限。

 

posted on 2021-08-13 13:51  者旨於陽  阅读(1274)  评论(0编辑  收藏  举报

导航