首页 理论教育Credit-Based机制的算法使用

Credit-Based机制的算法使用

【摘要】:如果一个设计将上述这些因素考虑进去,Credit-Based机制的实现更为复杂。为深入研究Credit-Baed机制所使用的算法,我们首先定义以下系统参数。使用Credit-Based机制进行报文传递时,Upstream需要获得Credit然后才能发送报文。图9-6 Buf_Alloc的组成N1缓冲该参数用来防止因为线路延时而造成的Overrun,Credit-Based流量控制机制所采用的算法对该参数的解释有略微区别,详见下文。如果N2的值为10,Current节点每转发10个报文后,才向Downstream发送一个Credit报文,从而整个系统用于传送Credit报文所占用的带宽不会超过10%。

在第9.1.2节中提到的Credit-Based机制是一个较为理想的模型,在这个模型中,没有考虑网络的延时和拥塞,也没有考虑Current节点何时采用哪种策略将Credit传送给Up-stream节点,同时也没有考虑Buf_alloc缓冲是否会出现上溢出(Overrun)或者负载(Un-derrun)。本节将首先给出Overrun和Underrun的定义,然后讨论Credit-Based机制使用的各类算法以及这些算法中使用的各类参数。

●在本章中,Overrun指Current节点没有足够的缓存接收来自Upstream节点的数据报文;或者Downstream节点没有足够的缓存接收来自Current节点的数据报文。

●而Underrun指Downstream节点有足够的缓存可以接收Current节点的报文,但是Cur-rent节点的缓存中没有需要发送的报文;或者Current节点有足够的缓存可以接收Up-stream节点的报文,但是在Upstream节点的缓存中没有需要发送的报文。

这两种溢出情况都将导致链路带宽的浪费,在实际设计中需要尽力避免这两种溢出。此外在一个设计中,还需要考虑链路的传送延时。由于传送延时的存在,Current节点向Up-stream节点传送Credit信息时,这个Credit信息并不能瞬间到达,因而会造成这两个节点间,Credit的同步问题。如果一个设计将上述这些因素考虑进去,Credit-Based机制的实现更为复杂。为深入研究Credit-Baed机制所使用的算法,我们首先定义以下系统参数。

(1)RTT(Round Trip Time)

该参数记载数据通路的链路延时,单位为s(秒)。使用Credit-Based机制进行报文传递时,Upstream需要获得Credit然后才能发送报文。在链路中存在两个延时,一个是Current节点向Upstream节点发送Credit报文的线路延时TCU,另一个是Upstream节点向Current节点发送数据报文的延时TUC

如果一个物理链路的发送与接收链路速度相等,而且Credit报文长度等于数据报文长度时,TCU将等于TUC。但是在很多情况下这两个值并不相等。本章为简化起见,假设TCU与TUC的值相等。

而RTT是这两种延时之和,RTT的值和物理链路的延时成正比。除此之外节点在发送数据报文时需要通过若干逻辑门,这也增加了传送延时。RTT的值可以在链路配置时计算出来,但是在具体实现中,设计者可能使用一个事先预估的数值作为RTT。值得注意的是,该参数不能估计得过低,否则将会造成Current节点的Overrun;也不能估计得过高,否则将可能引发Current节点的Underrun。

(2)BLINK

该参数存放Upstream、Current和Downstream节点间数据传递的峰值带宽,即数据链路所能提供的最大物理带宽,单位为bps(Bits Per Second)。为简便起见,本章认为这几个节点间进行数据传递时的峰值带宽相等。

(3)Packet_Size

该参数存放一个数据报文的大小,单位为Bit。假定所有节点间进行数据通信时使用的数据报文的大小相等。值得注意的是,在PCIe总线中,数据报文并不等长,这为PCIe总线的流量控制带来了不小的麻烦。

(4)F(In-flight Data)

该参数存放在RTT时间段内,Upstream节点和Current节点之间的双向链路上存在的报文,其单位为报文数。其最大值等于RTT×BLINK/Packet_Size。该值在链路进行远距离传送时必须要考虑。而PCIe链路通常在一个PCB内部,至多作为机箱到机箱之间的链路,因此RTT的值非常小,F参数几乎可以忽略不计。

(5)BVC

该参数存放源节点到目标节点的有效数据带宽,单位为bps。在一个物理链路上除了要传递有效数据之外,还需要传递Credit报文,因此BVC<BLINK

该参数不一定是一个常数,因为在一个实际的系统中,不同时间内的带宽并不一定相等。为了简化模型,使用BVCR参数替代BVC参数,BVCR参数为一个常数。(www.chuimin.cn)

本节力求简化流量控制的数学模型,并依此进行量化分析。有关流量控制的量化分析涉及一些相对复杂的数学推导,本章对此不做详细说明。

使用Credit-Based机制时,Buf_Alloc参数可以被分解为三部分,分别由N1、N2和N3组成,Buf_alloc参数与N1~3间的关系如图9-6所示。

978-7-111-29822-9-Part02-119.jpg

图9-6 Buf_Alloc的组成

(1)N1缓冲

该参数用来防止因为线路延时而造成的Overrun,Credit-Based流量控制机制所采用的算法对该参数的解释有略微区别,详见下文。

(2)N2缓冲

N2的值与VC的设置有相关。当Current节点向Downstream节点每转发N2个报文后,将向Upstream节点发送一个Credit报文。Current节点可以将所有VC的N2值设为相同,也可以分别设置。

N2的值越大,Buf_Alloc参数的值也越大,节点发送Credit报文的频率也越低,从而Credit报文占用数据通路带宽的比例越小;N2的值越小,则Buf_Alloc的值也越小,向Up-stream节点发送的Credit报文的频率越高,Credit报文占用数据通路带宽的比例也越大。如果N2的值为10,Current节点每转发10个报文后,才向Downstream发送一个Credit报文,从而整个系统用于传送Credit报文所占用的带宽不会超过10%。

(3)N3缓冲

该参数保证Current节点不会出现Underrun,即出现Downstream节点仍有缓存接收报文,而在Current节点的缓存中没有报文需要发送这种情况。

为此在进行系统设计时,需要合理设置N3的值。使得在理想情况下,只要Upstream节点向Current节点不断地发送报文,且Downstream节点有足够的缓存时,就不会在Current节点中出现Underrun的现象。

当然Downstream节点接收数据报文的速度足够快,而且Current节点未能及时地从Up-stream节点获得报文时,Current节点总会出现Underrun的现象。

假设Downstream节点从Current节点获取报文的速度为BVCR,只要N3=BVCR×RTT/Packet_Size,那么在Downstream节点将N3中的报文取完之前,Current节点总能获得新的报文(其前提是Upstream节点在不断地向Current节点发送数据报文)。

由此可见BVCR与N3的容量有关,BVCR越大,N3也越大。N3的容量可以影响数据通路的有效带宽,在流量控制机制的实现中,如果N3过小,那么Current节点将出现Under-run的现象,从而影响数据通路的有效带宽。根据上述数学模型,H.T.Kuang与Alan Chapman提出了三种流量控制算法,分别为N123、N123+和N23算法。