PCIe系列专题之二:2.4 Flow Control机制概
一、故事前传
之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transaction layer), 数据链路层(Data link layer)和物理层(Physical layer)。
较为详细解释请见之前的文章:
1. PCIe技术概述;
2.0 PCIe Transaction layer事务层概述;
2.1 TLP的前世今生;
2.2 TLP事务处理方式解析。
2.3 TLP事务结构解析。
二、事务层Flow Control概
在PCIe协议中,如果要发送一个TLP,就必须要保证接收端有足够的缓存(Buffer)来接收。为了实现这一功能,接收端会随时回报可用的缓存空间。
在接收端有一个缓存空间叫作VC buffer, 其中VC代表的是Virtual Channel,翻译过来就是虚拟通道。VC buffer可以存放从发送端传过来的TLPs。
PCIe可以支持8虚拟通道(VC),每个VC之间可以相互独立传输TLPs, 当一个VC buffer满的时候,并不影响其他VC继续传输。
有关VC的详细内容会在后续章节介绍,本文就不再展开了~
在flow control中, 还有一个很重要的概念不得不提一下:信用机制(Credit-based Mechanism)。因为接受端的可用VC buffer是以信用机制的方式告知发送端,在这里,信用积分代表接收端VC buffer的可用空间。
接收端会通过发送DLLPs(Data Link Layer Packets)来告知发送端VC buffer的信用积分(也就是告知VC buffer可用空间),当缓存空间快满的时候,发送端会停止发送TLP,以防VC buffer容量不足而造成发送端传输的数据被丢弃,从而避免要求发送端重新发送刚才发送的数据,最终达到更加有效利用网络带宽。
其实,事务层(Transaction Layer)和链路层(Data Link Layer)是Flow Control机制的共同监护人。如下图:
Device A和Device B均会把其事务层对应的可用空间(FC Buffer)告知链路层,链路层会在适当的时间生成Flow control DLLPs将可用空间的信息转送至接收端。(Device A to Device B, Device B to Device A)