Juniper has a good description of a Virtual Output Port
queued switch. There are also some references here. Wikipedia
also has an entry for VoQ switching. Output port buffered switches are rare in new
designs. Cisco Cisco Catalyst 6500 and HP 4000Ms have
substantial output port buffers.
The main theme for the buffer page is How much buffer is there for a single flow? Packet buffers for a single queue is essentially the same thing. This question is easier in a shared memory architecture. In VoQ, we would need to know the switch policies for dynamic buffer assignment. If the switch has 100 output ports and 8 queues per port, it could be that buffers are permanently allocated to the 100 x 8 = 800 port-queues. If 12 ports are sharing a single input ASIC and its 4 GByte packet buffer and there are 800 port-queues per input port, there is on average about a 0.5 Mbyte per queue. Pretty whimpy. It would be very unlikely that buffer from one ASIC could be loaned to another ASIC, so sharing on the input side probably can't happen. On the other hand, if an output port is oversubscribed by traffic coming in from more than one input, VoQ memory on the several input ports could contribute to virtual output port buffer capacity.
Whether dynamic or fixed allocations on each input buffer are used will be implementation dependent. Arista
seems to favor dynamic allocation with a cap of 50 mS for any one queue. Whether or not that is exactly
what Arista has done, at least they have said something. Juniper sets the maximum for
the QFX10000 at 100 mS per port. Pretty generous. Sadly, this sort of information rarely populates
data sheets. [added June 2020] The question dynamic vs static is answered for Broadcom in
an Arista architecture white paper. Buffer
allocation is dynamic. Quoting:
. . . the majority of the buffer is allocated in a dynamic manner wherever it is required across potentially millions of VoQs per system: |