I came across this topic VOQ – Virtual Output Queuing, while studying for a technical certification. Although I understood the basic idea behind it, but the authors did not do a good job explaining it, so here are some of my notes. I have tried to write this generic instead of focusing on a specific vendor for better understanding.
I recall, we used to have a half-duplex 10 Mbps network. The need for capacity grew with newer technology and user access; we went from half-duplex 10 Mbps network to full-duplex 10/100 Mbps. That was a decent jump; was that enough for the masses? Soon we were maxing out 100 Mbps links and needed more. As the need for capacity grew, came 10/100/1000 Mbps (1 Gig) links, 10 Gig, 40 Gig, and 100 Gig. Amount of data flowing in the data centers is constantly increasing and technology vendors are coming up with different ways to achieve data transfer efficiency.
Head of Line Blocking:
Head of line blocking is a phenomenon that causes drops on different egress ports of the switch during traffic congestion.
Figure above shows that during congesting at port one, all other traffic buffers/drops instead of reaching their destination ports. This can significantly degrade the performance of the network when there is a lot of data traffic is present. Ports 2, 3 and 4 are not congested; but the queue will not transmit any traffic until the congestion clears and Port 1 notifies the queue that it is ok to send data.
VOQ – Virtual Output Queuing:
Virtual output queuing architecture uses multiple virtual queues to mitigate “Head of Line Blocking” issues. Instead of using a single queue, it uses multiple queues for the data traffic.
As shown in the diagram above; data traffic enters the ingress interface, and the fabric splits it up into multiple virtual queues. If one of the interface is experiencing congestion, it will not stop traffic for the rest of the interfaces. VOQ architecture benefits the data traffic in two key ways:
- Allows the traffic to other interfaces that are not congested pass.
- Buffers only the queue destined for the congested interface instead of sending it, for it to drop at the egress. This behavior saves fabric resources from transmitting data traffic that will get dropped.
Feel free to provide any feedback or add any information that may be helpful to others in your comments.