在PCIe总线设计之初,它主要针对音频和文章传输等对时间敏感的应用。为了保证这些特殊应用的数据包能够被优先发送,PCIe规范为每个数据包分配了一个优先级,这个优先级通过TLP报头中的三个比特(TC,Traffic Class)来传递。
如下图所示:
TC值越大,优先级越高,相应的包会先发送。一般来说,支持QoS(服务质量)的PCIe总线系统将具有对应于每个TC值的独立虚拟信道(VC)。这个虚拟通道实际上是一个缓冲区,用来缓存数据包。
注:当然也有只有一个VC缓冲区的。这时候不管包的TC值是多少,都只能缓存在同一个VC缓冲区,自然没有办法保证优先传输。这种PCIe设备被称为不支持QoS的PCIe设备。
下图显示了QoS的一个简单示例:
图中左下角的端点(同步业务)比右边的端点(普通业务)具有更高的优先级。因此,在交换机中,来自左端点的分组将被优先传输。交换机的这种决策操作称为端口仲裁。
默认情况下,VC缓冲区中的数据包按照包到达的时间顺序依次放入VC缓冲区。但情况并非总是如此。PCIe总线继承了PCI/PCI-X总线关于事务排序和松散排序的体系结构,但它只对相同的TC值有效。关于事务排序和宽松排序,可以参考PCI-X规范,这里就不详细介绍了。
对于大多数串行传输协议来说,发送方能够有效地向接收方发送数据的前提是接收方有足够的接收缓冲区来接收数据。在PCI总线中,在发送之前,发送者不不知道接收端是否有足够的缓冲区来接收数据(即接收端是否准备好了),所以经常需要一些断开和重试操作,这将严重影响总线的传输效率(性能)。
PCIe公交为了解决这个问题,提出了流量控制的概念,如下图所示。在PCIe总线中,接收方必须经常(在特定时间)向发送方报告其VC缓冲区的使用情况。上报的方式是接收方向发送方发送流量控制的DLLP(数据链路层数据包),这个DLLP的发送和接收是在硬件层面自动完成的,不需要人为干预。应该注意的是,尽管该操作旨在数据链路层之间执行,但是这些VC缓冲器的使用对于应用层(软件层)也是可见的。
与PCI总线相比,具有流量控制机制的PCIe总线具有更高的总线利用率。尽管添加了流量控制DLLP,但这些dllp占用的带宽非常少,对总线利用率几乎没有影响。
标签:vc缓冲区PCIe总线