首页 理论教育PCIExpress流量控制简介

PCIExpress流量控制简介

【摘要】:在Upstream节点、Current节点和Downstream节点中存在两个VC,下文以其中的一个VC为例,说明如何使用Credit-Based机制进行数据传递。为简便起见,本章仅讨论在单向通路下,Credit-Based流量控制机制的原理与实现。Credit-Based机制需要使用以下参数进行报文传递。Credit-Based流量控制使用的各个参数之间的关系如图9-5所示。Current节点将这个值作为Credit,发送到Upstream节点。

为便于Credit-Based流量控制机制的讨论,假设在网络中存在三类节点,分别是Up-stream节点、Current节点和Downstream节点,这些节点之间通过实际的物理链路互连,在每一个节点内部都使用两个VC,其结构如图9-4所示。

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

图9-4 Upstream Current与Downstream节点的关系

其中Upstream节点通过物理链路将数据报文发向Current节点,而Current节点通过物理链路将数据报文发向Downstream节点。在虚通路的设计中,每个节点的发送端口和接收端口之间具有分属于不同VC的数据缓冲,这些数据缓冲之间的互连组成了不同的VC。

Current节点首先将来自Upstream节点的报文暂存在数据缓冲中,然后再发送到Down-stream节点。当Upstream节点通过Current节点,向Downstream节点发送数据报文时,流量控制发生在Upstream节点和Current节点、Current节点和Downstream节点之间,而不是Upstream节点到Downstream节点。简而言之,流量控制发生在链路的两端,基于端到端之间,而不是基于节点到节点间。

在Upstream节点、Current节点和Downstream节点中存在两个VC,下文以其中的一个VC为例,说明如何使用Credit-Based机制进行数据传递。值得注意的是,Current节点、Up-stream节点和Downstream节点只是一个相对概念。Current节点也可以从Downstream节点接收数据报文,而向Upstream节点转发这些数据报文,从而组成一个双向通路。为简便起见,本章仅讨论在单向通路下,Credit-Based流量控制机制的原理与实现。

Credit-Based机制基于“Credit”进行数据传递,当Upstream节点需要发送数据报文时,需要具备足够的Credit,才能向Current节点发送数据。这个Credit由Current节点提供,并与Upstream节点保存的Credit同步,为此Current节点需要定时向Upstream发送“传递Credit”的数据报文。

下文为简便起见,假设节点间传送的数据报文,其长度固定,而且每次只能传递一个数据报文。Credit-Based机制需要使用以下参数进行报文传递。

●Buf_Alloc参数。该参数保存在Current节点中接收数据缓冲的总大小。Upstream节点能够发送的数据报文总数不能大于该参数。

●Crd_Bal参数。该参数是Upstream节点可以发送的数据报文数,Current节点需要定时向Upstream节点发送Credit报文。Upstream节点收到该报文后,使用该报文中的“Credit”同步Crd_Bal参数。Upstream节点可以发送的数据报文数不能超过Credit_Bal参数。

●Tx_Cnt参数。该参数为Upstream节点已经发送的数据报文数。

●Fwd_Cnt参数。该参数为Current节点转发到Downstream节点的数据报文数。

Credit-Based流量控制使用的各个参数之间的关系如图9-5所示。

978-7-111-29822-9-Part02-118.jpg(www.chuimin.cn)

图9-5 使用Credit-Based机制进行数据传递

1.Upstream节点向Current节点发送报文

Upstream节点向Current节点发送报文时,Current节点必须有足够的缓冲,而且Current节点需要预先将其剩余的缓冲数量,即Credit(其值为一个正整数),及时地发送给Up-stream节点。Upstream节点使用Crd_Bal参数保存这个Credit。

Crd_Bal参数的初始值为Buf_Alloc,即Current节点能够接收的最大报文个数,该值在系统初始化时由Current节点发向Upstream节点。因此Upstram节点在流量控制机制初始化完毕后,Crd_Bal参数与Current节点中能够存放的最大报文数相同。

Upstream节点每成功发送一个数据报文后,Crd_Bal值减1,当Crd_Bal参数为0时,Upstream节点不能向Current节点发送数据报文。此时Upstream节点必须等待Current节点发送Credit报文,更新Crd_Bal参数后,才能继续发送数据报文。

2.Current节点向Upstream节点发送Credit

Current节点收到来自Upstream节点的数据报文后,将会根据链路的实际情况,将这些报文转发到Downstream节点。

假设在一段时间之内,Current节点共收到了Tx_Cnt个报文,而转发了Fwd_Cnt个报文,那么此时在Current节点中还能容纳Buf_Aloc-(Tx_Cnt-Cx_Cnt)个报文空间。Current节点将这个值作为Credit,发送到Upstream节点。而Upstream节点将根据这个Credit的值更新Crd_Bal参数。

3.Current节点将报文转发到Downstream节点

Current节点接收到报文之后再将其转发出去涉及一些路由算法。常用的算法有Cut-Through路由和Wormhole路由算法。

当使用Wormhole路由方式时,一个报文将被分解为若干个Flit,包括Header Flit、Data Flit和Tail Flit。当数据报文到达Current节点后,Current节点立即对Header Flit进行分析,首先根据路由算法决定发向哪个Downstream节点[61]。如果在对应的Downstream节点中,链路空闲且有足够的缓冲资源时,Current节点将发送Data Flit直到Tail Flit,即发送整个数据报文;如果对应的Downstram节点没有资源接收这个报文,数据报文将在Current节点中存储。

Cut-Through路由与Wormhole路由类似。采用Cut-Through路由时,Downstream节点必须具有接收整个报文的能力时,才能接收报文;而采用Wormhole路由时,Downstream节点具有接收部分报文的能力时,就可以接收报文。采用Wormhole路由的优点是数据报文传送延时较短,每一个节点所需要的数据缓存相对较小。当网络发生拥塞时,采用Wormhole路由技术可能会使一个报文分别缓冲在Current节点和Downstream节点中,而使用Cut-Though路由技术数据报文最终缓冲在一个节点中。

巨型机一般使用Wormhole技术进行报文传递,而网络系统中多使用Cut-Though路由技术。有关Wormhole和Cut-Though技术的优劣分析超出了本书的范围,本书不会对此进行详细分析。巨型机应用针对的是可预知的网络拓扑结构,而网络系统的拓扑结构是变化的。在一个网络拓扑结构可预知的前提下,采用Wormhole技术可以在避免拥塞的前提下,降低网络报文的传递延时;而对于一个未知的网络拓扑结构,使用Cut-Though技术更为合理。