首页 理论教育PCIExpress流量控制与缓冲管理

PCIExpress流量控制与缓冲管理

【摘要】:假定在一个系统中,一共具有n条VC,而且这几条VC都使用N23算法进行流量控制,那么在使用Static流量控制方式时,该系统一共需要的缓冲大小为×Packet_Size[62]。目前接收缓存的分配常使用两种算法,分别是Sender-Oriented和Receiver-Oriented管理算法。

上文讲述了基于单个VC的流控机制,实际上在Upstream、Current和Downstream节点中一般含有多个VC。多个VC之间如何合理地使用缓存值得重点关注,在实际设计中,可以为每一个VC设置独立接收缓存,也可以使多个VC共享同一个接收缓存。在FCVC的实现中,可以根据实际情况选择独立缓存或者共享缓存。

其中,每一个VC都使用独立接收缓存的流量控制方法称为静态(Static)流量控制;而使用共享缓存的流量控制方法称为自适应(Adaptive)流量控制。

假定在一个系统中,一共具有n条VC,而且这几条VC都使用N23算法进行流量控制,那么在使用Static流量控制方式时,该系统一共需要的缓冲大小为(n×N2+N3)×Packet_Size[62]。如果(n×N2+N3)×Packet_Size并不是很大时,为了使数据链路获得更大的带宽,可以使用Static流量控制。使用这种方法,也将极大地简化缓冲管理的设计难度。

值得注意的是,在一个系统工程架构设计中,应当重点关注“Critical Path”的设计,需要容忍非“Critical Path”的不完美。当(n×N2+N3)×Packet_Size的值大到了可以容忍的范围之外时,设计者必须考虑如何减少Current节点的接收缓存大小。Static流量控制是针对每一个VC都是按照全负荷运转的情况,在绝大多数应用中,几乎不可能出现每一条VC都被充分利用的情况,因为多条VC共享一个物理链路,不可能出现所有VC都在全负荷运行的情况。为此在系统设计时可以使用Adaptive流量控制方法。

Adaptive流量控制的本质是Current节点中,所有VC共享一个接收缓存,从而这个缓存可以远小于(n×N2+N3)×Packet_Size。因为在绝大多数时间内,数据链路的多条VC不可能都被充分使用,因此并不需要为每条VC都提供N2缓冲,而是为所有VC统一提供接收缓冲,从而合理使用这些接收缓冲。

目前接收缓存的分配常使用两种算法,分别是Sender-Oriented和Receiver-Oriented管理算法。这两种算法的缓冲设置如图9-9所示。使用Sender-Oriented管理算法时,Adaptive Buffer的分配在Upstream节点中完成,如果系统中有多个Upstream节点,Current节点需要在其接收端点处为每个Upstream节点准备Adaptive Buffer,而且Current节点并不知道Up-stream节点的使用情况,这为Current节点的缓冲管理带来了不小的困难。(www.chuimin.cn)

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

图9-9 Sender-Oriented和Receiver-Oriented管理算法

而使用Receiver-Oriented管理算法可以有效避免这类困难,使用这种算法时,所有来自Upstream节点的数据报文在Current节点的发送端准备一个Adaptive Buffer,对这个Buffer的分配也在Current节点内部完成。这两种算法的具体实现都较为复杂,本节并不详细介绍这些算法,在PCIe总线中,RC和Switch的硬件设计将会涉及这些内容,而EP无需关心这些问题。

图中的上半部分是Sender-Oriented管理算法的示意图,而下半部分是Receiver-Oriented管理算法的示意图。由图9-9可以发现,使用这两种算法时Adaptive Buffer都在Current节点中,只是位置不同。