Description

This article explains how to identify microburst traffic occurring in a network, which could lead to packet drops in the Class of Service (CoS) queue.

Symptoms

Dropped packets are seen on the class-of-service (CoS) interface.

root@router> show interfaces queue ge-0/1/0    
Physical interface: ge-0/1/0, Enabled, Physical link is Up
Interface index: 649, SNMP ifIndex: 518
Forwarding classes: 16 supported, 5 in use
Egress queues: 12 supported, 5 in use
Queue: 0, Forwarding classes: best-effort
  Queued:
    Packets              :                     0                     0 pps
    Bytes                :                     0                     0 bps
  Transmitted:
    Packets              :           92299418556                122542 pps
    Bytes                :        92299407936208             980338976 bps
    Tail-dropped packets : Not Available  
    RL-dropped packets   :                     0                     0 pps
    RL-dropped bytes     :                     0                     0 bps
    Total-dropped packets:          830775607880               1217312 pps
    Total-dropped bytes  :       830775515656432            9738503624 bps


The total bandwidth of this interface is 10 GBPS and 5% is allocated to queue 0. When traffic exceeds 10Gbps, the CoS buffers allocated for queue 0 will appear. Then the server drops the traffic that crosses the buffer limit.

You can monitor interface utilization with Simple Network Management Protocol (SNMP) traps to plot a graph, which will send a query varying from 30 seconds to 5 minutes. The data utilization graph, however, will not show the bandwidth spike that occurred in the interval of a millisecond to a second, making users think that the interface utilization never crossed the defined limit.

Solution

If a queue drop is seen, you can use the following command to check the buffer and data utilization on the node in FPC mode after running "start shell network pfe fpc0" on the EX device. For a QFX device, use "start shell pfe network fpc0," which is a hidden command.

set dcbcm bcmshell "for i=0,200 'sleep 0 10000; dump chg MMU_THDU_XPIPE_COUNTER_QUEUE'"

Note: Here we are executing the above BCM counter dump command 100 times at intervals of 10ms. This will provide the buffer utilization during microburst conditions.

Example

When the output bandwidth of an interface is set to 10Gbps and traffic is pushed to approximately 11Gbps, the command provides the following output:

TFXPC0(vty)# ...000; dump chg MMU_THDU_XPIPE_COUNTER_QUEUE'"                  

HW (unit 0)
Sleeping for 0.010000 seconds
MMU_THDU_XPIPE_COUNTER_QUEUE.mmu0[492]: <SHARED_COUNT=0x19db,PARITY=1,MIN_COUNT=9,ECCP=0x51,ECC=0x11,DATA=0x0033b60009>
Sleeping for 0.010000 seconds
MMU_THDU_XPIPE_COUNTER_QUEUE.mmu0[492]: <SHARED_COUNT=0x19ec,MIN_COUNT=9,DATA=0x0033d80009>
Sleeping for 0.010000 seconds
MMU_THDU_XPIPE_COUNTER_QUEUE.mmu0[492]: <SHARED_COUNT=0x19b3,MIN_COUNT=9,ECCP=0xa,ECC=0xa,DATA=0x0033660009>
Sleeping for 0.010000 seconds
MMU_THDU_XPIPE_COUNTER_QUEUE.mmu0[492]: <SHARED_COUNT=0x1a06,MIN_COUNT=9,ECCP=0x23,ECC=0x23,DATA=0x00340c0009>
MMU_THDU_XPIPE_COUNTER_QUEUE.mmu0[504]: <PARITY=1,MIN_COUNT=1,ECCP=0x43,ECC=3,DATA=0x0000000001>


When traffic is brought down to a lower value, around 10Gbps, then the output indicates there was no microburst:

Sleeping for 0.010000 seconds
Sleeping for 0.010000 seconds
Sleeping for 0.010000 seconds
Sleeping for 0.010000 seconds
Sleeping for 0.010000 seconds
Sleeping for 0.010000 seconds
Sleeping for 0.010000 seconds
Sleeping for 0.010000 seconds​

Modification History

2023-01-17: Added command to access PFE from CLI for QFX and also noted that they are hidden commands