5.5 虚拟通道
虚拟通道(Virtual channel,VC)被称为互联网络中的瑞士军刀,最初作为避免死锁(deadlock)的解决方案被提出,同样在流控制中被用来避免队首阻塞(head-of-line blocking)。队首阻塞在所有上述提及的在每一个输入仅有一个队列的流控制技术都会发生,当队首的包被阻塞,将会使得所有后续的包在其后排队,即使已经有可用的资源。
本质上,一个虚拟通道是路由器中一个独立的队列,多个虚拟通道共享两个路由器之间的物理连线。通过将输入端和多个独立的队列相连,队首阻塞将会减少。当某个虚拟通道被阻塞,其他包仍然可以通过其他虚拟通道来穿过其他物理连接。因此虚拟通道可以提高物理连接的利用率并且提升整个网络的吞吐率。
技术上,尽管Dally最初提出虚拟通道是用于虫孔流控制,虚拟通道可以被应用在所有的上述提及的流控制技术中来减少队首阻塞,例如电路交换(circuit switching)、存储转发(store-and-forward)、虚拟直通(virtual cut-through)。然而,随着片上网络设计大量采用虫孔流控制,我们在这里假定是在虫孔流控制下,缓存器(buffer)和连接(link)在片(flit)粒度上进行管理和复用。一个例子如图所示。
从例子中可以看出,如果是单通道实现,则B包将会始终被A包在路由器1处阻塞,尽管资源已经允许其到达路由器2。虚拟通道的加入使得包B可以无视包A的阻塞到达路由器2。在每一个路由器上,虚拟通道被分配给头片(head flit)一次,之后其余的片继承并使用这个虚拟通道。使用虚拟通道流控制,来自不同包的片可以在相同的物理通道上交叉通过,从上例中时刻0和时刻2中可以观察到。
虚拟通道也被广泛应用于避免死锁,既包括在网络内部的死锁,也包括处理系统(system)级和协议(protocol)级的deadlock。