博通交換芯片,工程現象報交換入端口丟包。
此時show counters <pbmp>查看指定端口包統計,RDBGC0和RDBGC2有包統計,RDBGC0~x包統計是從RDBGC0~x寄存器中讀取的。
BCM.0> show c ge16 RUC.ge16 : 8,986,723,402 +247,394 626/s RDBGC0.ge16 : 458,068 +2 RDBGC2.ge16 : 1,602,654 +88 2/s ING_NIV_RFVT.ge16 : 8,992,946,921 +247,733 628/s R127.ge16 : 6,393,207,709 +239,477 584/s R255.ge16 : 293,909,171 +2,879 17/s R511.ge16 : 69,994,865 +1,456 6/s R1023.ge16 : 83,653,035 +1,847 8/s R1518.ge16 : 2,152,046,041 +2,029 13/s R2047.ge16 : 136,260 +45 RPKT.ge16 : 8,992,947,081 +247,733 628/s RUCA.ge16 : 8,986,587,142 +247,349 626/s RMCA.ge16 : 1,603,814 +88 2/s RBCA.ge16 : 4,619,865 +251 ROVR.ge16 : 136,260 +45 RPRM.ge16 : 8,986,587,142 +247,349 626/s RPOK.ge16 : 8,992,810,821 +247,688 628/s RBYT.ge16 : 3,355,369,191,852 +25,630,497 79,117/s T64.ge16 : 58,350,600 +1,120 T127.ge16 : 931,738,405 +14,357 48/s T255.ge16 : 324,775,053 +3,759 18/s T511.ge16 : 129,863,807 +2,768 10/s T1023.ge16 : 182,777,634 +2,768 12/s T1518.ge16 : 14,285,643,850 +343,825 862/s TMGV.ge16 : 733,899,970 +1,000 T2047.ge16 : 733,899,978 +1,000 TPOK.ge16 : 16,647,049,319 +369,597 950/s TPKT.ge16 : 16,647,049,327 +369,597 950/s TUCA.ge16 : 16,559,797,943 +368,102 950/s TMCA.ge16 : 4,678,987 +875 TBCA.ge16 : 82,572,389 +620 TVLN.ge16 : 16,647,049,319 +369,597 950/s TBYT.ge16 : 19,985,827,660,546 +445,383,464 1,115,598/s PERQ_PKT.ge16 : 10,496,740,131 +261,033 71/s PERQ_BYTE.ge16 : 12,391,027,325,988 +323,472,166 31,036/s
查找芯片手冊,找到RDBGC0寄存器的描述,該寄存器統計的包類型由RDBGC0_SELECT寄存器值決定(其他RDBGCx類似)

找到RDBG0_SELECT寄存器的描述,可以看到該寄存器實際上是一個bitmap,每一位表示不同類型的包。

RDBGCx_SELECT的bitmap映射,參考如下定義

接下來,在BCM命令行下獲取RDBGC0_SELECT寄存器值
BCM.0> g RDBGC0_SELECT RDBGC0_SELECT.ipipe0[1][0x3e002100]=0x400ad11: <BITMAP=0x400ad11>
使用排除法,分別置位獲取到的RDBGC0_SELECT寄存器值中置位的每一位
BCM.0> s RDBGC0_SELECT 0x4000d11
BCM.0> g RDBGC0_SELECT
RDBGC0_SELECT.ipipe0[1][0x3e002100]=0x4000d11: <BITMAP=0x4000d11>
清除端口包統計,再讀取端口包統計(需要注意的是,端口包統計一般是定時刷新的,而不是及時刷新的,因此,多次讀取之間要間隔一定時間)
BCM.0> show c ge16 RUC.ge16 : 8,987,412,514 +324,780 168/s RDBGC2.ge16 : 1,602,897 +126 ING_NIV_RFVT.ge16 : 8,993,636,960 +325,258 168/s R127.ge16 : 6,393,875,436 +314,042 158/s R255.ge16 : 293,916,429 +3,896 7/s R511.ge16 : 69,998,999 +2,208 R1023.ge16 : 83,658,311 +2,646 3/s R1518.ge16 : 2,152,051,614 +2,406 1/s R2047.ge16 : 136,331 +60 RPKT.ge16 : 8,993,637,120 +325,258 168/s RUCA.ge16 : 8,987,276,183 +324,720 168/s RMCA.ge16 : 1,604,057 +126 RBCA.ge16 : 4,620,549 +352 ROVR.ge16 : 136,331 +60 RPRM.ge16 : 8,987,276,183 +324,720 168/s RPOK.ge16 : 8,993,500,789 +325,198 168/s RBYT.ge16 : 3,355,440,490,454 +33,006,703 19,805/s T64.ge16 : 58,354,402 +1,583 1/s T127.ge16 : 931,777,872 +18,888 24/s T255.ge16 : 324,783,220 +4,211 5/s T511.ge16 : 129,871,134 +3,907 2/s T1023.ge16 : 182,784,285 +2,589 3/s T1518.ge16 : 14,286,679,112 +490,089 1/s TMGV.ge16 : 733,905,887 +1,027 1/s T2047.ge16 : 733,905,895 +1,027 1/s TPOK.ge16 : 16,648,155,912 +522,294 37/s TPKT.ge16 : 16,648,155,920 +522,294 37/s TUCA.ge16 : 16,560,901,956 +521,342 37/s TMCA.ge16 : 4,679,119 +69 TBCA.ge16 : 82,574,837 +883 TVLN.ge16 : 16,648,155,912 +522,294 37/s TBYT.ge16 : 19,987,169,754,335 +632,563,687 8,781/s PERQ_PKT.ge16 : 10,497,536,696 +327,902 18/s PERQ_BYTE.ge16 : 12,392,014,968,180 +404,154,675 3,608/s
實測發現,當置位RDROP位和RFILDR位時,會統計到入端口丟包

其中,RDROP是指端口無法轉發該SVLAN+DMAC的報文,原因可能有兩種——1)端口未加入SVLAN所在轉發域(用vlan show檢查),2)另外一個端口學習了SVLAN+DMAC的轉發表項,但是兩個端口之間配置了端口隔離(用egress show檢查),導致報文無法轉發到另外一個端口;RFILDR是指入端口報文匹配FP規則丟棄。
同理,排查出端口丟包也可以借鑒上述思路,參考TDBGCx_SELECT的bitmap映射:

A盤

導致端口丟包的原因:
1、由於某些接口、鏈路、雙工異常導致的CRC錯誤(FCS幀)、Alignment Error幀、幀長不在MTU范圍的報文等常見錯誤此類報文交換機會予以丟棄——計入端口包統計,查看端口計數,是否有FCS或者沖突幀
2、QoS限速、rate-limit配置導致的數據包正常丟棄
3、端口BLOCK(STP/RLDP)導致的數據包正常丟棄——查看端口生成樹狀態
4、對端設備發送的速率過快導致本端交換機buffer不足,而又沒有流控(PAUSE幀)導致的丟包——計入端口包統計,嘗試兩端打開端口流控
5、多端口向一個端口發送報文,超出這個端口的轉發能力,導致HOL隊頭阻塞丟包——嘗試調整端口速率和開啟端口流控觀察
6、由於環境因素(例如異常幀較多),導致MMU資源溢出
