概述
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利用IBPPKTCOUNT和IBPCELLCOUNT兩個計數器來統計每個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數的上限。


