之前我们讲了对PCIe的一些基础概念做了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol)主要包括事务层(Transaction layer), 数据链路层(Data link layer)和物理层(Physical layer)。
一:事务层Flow Control概述
话说,前端时间小编想探访一下故宫深邃与博大,就就兴致勃勃的去了,在长安街上过了无数个安检终于到达了天安门城楼之下,通过天安门城楼之后就看到了梦寐以求的故宫,准备买票呀~当走到售票窗口时,看到一行字,小编失望极了,因为上面写着"故宫限流了~售票截止"!我的天呐~白跑一趟~当时小编就想,如果来之前能得到限流的信息就好了~
讲到这里,不要为小编叹息呢~小编今天给大家带来个新朋友“Flow Control”。从英文的字面意思来看,它跟小编在故宫遇到的“限流”差不多是一个意思~
在PCIe协议中,如果要发送以恶搞TLP,就必须要保证接收端有足够的缓存(buffer)来接收,为了实现这一功能,接收端回随时回报可用的缓存空间。
在接收端有一个缓存空间叫做VC bufferr,其中VC代表的是Virtual Channel,翻译过来就是虚拟通道,VC buffer可以存放从发送端传递过来的TLPs;
在flow control中,还有一个很重要的概念不得不提一下:信用机制(Credit-based Mechanism),因为接收端的可用VC buffer是以信用机制的方式告知发送端,在这里,信用积分代表接收端VC buffer的可用空间。
接收端通过发送DLLP(Data Link Layer Packets)来告知发送端VC buffer的信用积分(也就是告知VC buffer可用空间),当缓存空间快满的时候,发送端会停止发送TLP,以防止VC buffer容量不足而造成发送端传输的数据被丢失,从而避免要求发送端重新发送刚才发送的数据,最终达到更加有效利用网络带宽。
其实,事务层(Transaction Layer)和链路层(Data Link Layer)是Flow control机制的共同监护人,如下图: