In a switch ASIC, there could be many packets that end up being destined to the same output port, arriving across an arbitrary subset (perhaps all) of the input ports, N times faster than they can be transmitted on that output port.
You have two main choices:
- buffer packets somewhere until they can be transmitted to the destined output port
- drop the packets
(Yes, there are other variations that people have devised, too, e.g. truncate the packet to only its headers, and buffer that, when there is congestion. But there is only a finite amount of buffering, and it doesn’t help to ALWAYS make this choice for every packet. I will restrict the rest of this message to the two choices above).
If you buffer the packet, then at the data rates that modern switch ASICs tend to operate at, FIFO queues are a very common arrangement for how to buffer the packets waiting to be transmitted to an output port. You can imagine fancier non-FIFO buffering arrangements, but the fanciest that are in common use are to have a small fixed number of FIFO queues, all containing packets destined to the same output port, with a packet scheduling algorithm that chooses which of these queues to dequeue the first packet from next, and be sent to the output port.
These FIFO queues are explicitly represented in many software switches, e.g. BMv2/behavioral-model/simple_switch has by default one FIFO queue per output port. By changing a few lines of code and recompiling it, it can have a small number K of FIFO queues per output port, and simple packet scheduling algorithm to choose between them.
A switch ASIC might have other queues or packet buffers in it other than these, but if there are others, they tend to be quite small amounts of buffering compared to this central packet buffer of where packets are stored waiting for their destined output port to become available.
Are you thinking of packet buffering that exists for some reason OTHER than what I describe above? If so, do you have a picture or some other description of what you have in mind?