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


    概述

    BCM56310系列交换芯片不支持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数的上限。

     

  • 相关阅读:
    topcoder SRM 592 DIV2 LittleElephantAndBooks
    codeforces round #201 Div2 A. Difference Row
    Codeforces Round #199 (Div. 2) A Xenia and Divisors
    objective-c "performSelector may cause a leak because its selector is unknown".
    ccrendertexture to uiimage
    TopCoder SRM 588 DIV2 KeyDungeonDiv2
    ios clang: error: linker command failed with exit code 1 (use -v to see invocation)解决方法
    c++ for_each()与仿函数
    c++ map删除元素
    c++ map和mutimaps 插入值
  • 原文地址:https://www.cnblogs.com/justin-y-lin/p/15089601.html
Copyright © 2020-2023  润新知