目前PCIe总线规范,依然在迅猛发展,但并不是所有PCIe设备都支持这些在PCIe总线的最新规范中提及的概念。一般说来,PCIe总线规范提出的新的概念,最先在x86处理器系统的Chipset和Intel设计的PCIe设备中出现。
当网络设备使用单数据通路进行数据传递时,如果在该通路中正在传递两个数据报文,分别是A和B。其中数据报文B需要经过Node1~5才能到达最终的目的地,而数据报文B在经过Node3时发现由于Node3正在向Node4发送一个数据报文A。
从而数据报文B到达Node3后,由于Node4的接收缓存被数据报文A占用,而无法继续传递。此时虽然在整个数据通路中,Node4和Node5之间的通路是空闲的,但是报文B还是无法通过Node3和4,因为在Node4中只有一个数据缓冲,而这个数据缓冲正在被报文A使用。
使用这种数据传送规则会因为一个节点的数据缓冲被占用,而影响了后继报文的数据传递。为了解决这个问题,在现代网络节点中设置了多个虚通路VC,不同的数据报文可以使用不同的通路进行传递。从而有效解决了单数据通路带来的问题,基于多通路的数据传递如图9-2所示。
如上图所示,所谓多通路是指在每一个节点内设置两个以上的缓存,上例中设置了两个缓存,报文A经过Node1~5时使用缓存2进行缓存,然后再进行数据传递,而报文B使用缓存1进行缓存。因此虽然报文A因为某种原因不能继续传递,也只是将报文阻塞在缓存2中,而不影响报文B的数据传递。
所谓VC是指缓存到缓存之间的传递通路。如图9-2所示的例子中含有两个VC,分别是VC1和VC2。其中VC1对应节点间缓存1到缓存1的数据传递,而VC2对应缓存2到缓存2的数据传递。VC间的数据传递,如Node1的缓存1/2到Node2的缓存1/2,都要使用实际的物理链路“链路1”,这也是将VC称为“虚”通路的主要原因。
在一个实际的系统中,虚通路的使用需要遵循一定的规则。如在PCIe总线中,将不同的数据报文根据TC分为8类,并约定这些TC报文可以使用哪些VC进行数据传递。在PCIe总线中使用TC/VC的映射表,决定TC与VC的对应关系。
PCIe总线规定同一类型的TC报文只能与一条VC对应,当然从理论上讲,不同的TC报文可以与不同的VC对应,也可以实现一种自适应的算法根据实际情况实现TC报文和VC的对应关系。只是使用这种方法需要付出额外的硬件代价,效果也不一定明显。
下文以图9-2所示的数据传递为例,进一步对此说明相同类型的报文使用不同VC的情况。如果报文A和B属于相同种类的报文,但是报文A使用VC1,而报文B使用VC2。首先报文A传递到Node4后被阻塞。而报文B使用的VC和报文A使用的VC不同,报文B最终也会到达Node4。
由于报文A和报文B属于相同类型的报文,Node4阻塞报文B的概率非常大,因为Node4已经阻塞了报文A。阻塞报文A的理由在很大概率上也会对报文B适用。此时两个虚通路都被同一种类型的报文阻塞,其他报文将无法通过。因此在实际应用中,相同类型的数据报文多使用同一个VC进行数据传递,而在PCIe总线中,一个TC只能对应一个VC。
目前多通路技术的应用已经普遍应用到网络传输中,虚通路是一种防止节点拥塞的有效方法。但是在网络传送中,还存在一种不可避免的拥塞现象,即某一条链路或者某个节点是