5.5 虛擬通道
虛擬通道(Virtual channel,VC)被稱為互聯(lián)網(wǎng)絡(luò)中的瑞士軍刀,最初作為避免死鎖(deadlock)的解決方案被提出,同樣在流控制中被用來(lái)避免隊(duì)首阻塞(head-of-line blocking)。隊(duì)首阻塞在所有上述提及的在每一個(gè)輸入僅有一個(gè)隊(duì)列的流控制技術(shù)都會(huì)發(fā)生,當(dāng)隊(duì)首的包被阻塞,將會(huì)使得所有后續(xù)的包在其后排隊(duì),即使已經(jīng)有可用的資源。
本質(zhì)上,一個(gè)虛擬通道是路由器中一個(gè)獨(dú)立的隊(duì)列,多個(gè)虛擬通道共享兩個(gè)路由器之間的物理連線。通過(guò)將輸入端和多個(gè)獨(dú)立的隊(duì)列相連,隊(duì)首阻塞將會(huì)減少。當(dāng)某個(gè)虛擬通道被阻塞,其他包仍然可以通過(guò)其他虛擬通道來(lái)穿過(guò)其他物理連接。因此虛擬通道可以提高物理連接的利用率并且提升整個(gè)網(wǎng)絡(luò)的吞吐率。
技術(shù)上,盡管Dally最初提出虛擬通道是用于蟲孔流控制,虛擬通道可以被應(yīng)用在所有的上述提及的流控制技術(shù)中來(lái)減少隊(duì)首阻塞,例如電路交換(circuit switching)、存儲(chǔ)轉(zhuǎn)發(fā)(store-and-forward)、虛擬直通(virtual cut-through)。然而,隨著片上網(wǎng)絡(luò)設(shè)計(jì)大量采用蟲孔流控制,我們?cè)谶@里假定是在蟲孔流控制下,緩存器(buffer)和連接(link)在片(flit)粒度上進(jìn)行管理和復(fù)用。一個(gè)例子如圖所示。

從例子中可以看出,如果是單通道實(shí)現(xiàn),則B包將會(huì)始終被A包在路由器1處阻塞,盡管資源已經(jīng)允許其到達(dá)路由器2。虛擬通道的加入使得包B可以無(wú)視包A的阻塞到達(dá)路由器2。在每一個(gè)路由器上,虛擬通道被分配給頭片(head flit)一次,之后其余的片繼承并使用這個(gè)虛擬通道。使用虛擬通道流控制,來(lái)自不同包的片可以在相同的物理通道上交叉通過(guò),從上例中時(shí)刻0和時(shí)刻2中可以觀察到。
虛擬通道也被廣泛應(yīng)用于避免死鎖,既包括在網(wǎng)絡(luò)內(nèi)部的死鎖,也包括處理系統(tǒng)(system)級(jí)和協(xié)議(protocol)級(jí)的deadlock。