虽然在嵌入式系统中有许多连接元件的方法,但最主要的还是以太网、PCI Express和RapidIO这三种高速串行标准。所有这三种标准都使用相似的串行解串器(SerDes)技术,它们提供的吞吐量和时延性能都要超过宽的并行总线技术。随着这些标准的不断发展,今后的趋势将是采用通用SerDes技术。这意味着这些协议提供的原始带宽不会有明显的差异。相反,每种协议的用途将取决于如何使用带宽。
大多数设计人员都很熟悉基本的以太网协议特征。以太网是一种'尽力而为'的数据包传送方式。在以太网物理层上建立的软件协议,如TCP/IP,需要提供信息的可靠传输,因为基于以太网的系统一般在网络层执行流量控制,而不是在物理层。一般基于以太网的系统带宽都要超配20%到70%。因此以太网最适合高时延的设备间应用,或带宽要求较低的板上/板间应用。
相反,PCI Express(PCIe)针对板上互连的数据包可靠传送作了优化,这种场合的典型时延在毫秒数量级。PCIe协议交换的是事务处理层数据包(TLP),如读和写,以及被称为数据链路层数据包(DLLP)的少量特殊链路信息。DLLP用于链路管理功能,包括物理层的流量控制。PCIe后向兼容传统的PCI和PCI-X器件,这些器件认为处理器位于总线层的顶部,因此PCIe具有能够充分利用与PCI相关的软件和硬件知识产权的优势。正如后文要讨论的那样,传统PCI总线对交换式PCIe协议有很大的约束。
RapidIO技术则针对嵌入式系统作了优化,尤其是那些要求多处理单元合作的嵌入式系统。与PCIe一样,RapidIO协议交换的是数据包和被称为控制符的少量特殊链路信息。RapidIO兼具PCIe和以太网的特性。例如,RapidIO可以提供可靠和非可靠的数据包传送机制。RapidIO也具有许多独特的功能,因此最适合板上、板间以及短距离(小于100米)的设备间应用。
物理层
在物理层/链路层,这些协议在流量控制和误码恢复方面有很大的区别。以太网流量控制主要是在网络层用软件实现的,因为对大型网络来说这是最有效的处理方式。以太网唯一的物理层流量控制机制是PAUSE,它将中断传输一定的时间。有限的物理层流量控制意味着以太网将采用弃包的方式处理拥塞。
相反,PCIe和RapidIO的物理层流量控制机制可确保数据包的可靠传送。每个包都会被发送器保留直到被确认。如果检测到发送误码,链路维护协议可确保发生误码的数据包得到重传。
PCIe保证采用数据链路层数据包(DLLP)发送,而RapidIO则使用控制符进行发送。与DLLP不同的是,RapidIO控制符可以被嵌入在数据包内,这样可以实现低时延的RapidIO流量控制信息(如缓存占用量)交换,将允许更快地发送更多的数据包。图1阐明了这一概念。在最左边部分,器件A不能向器件B发送任何数据包,因为器件B中的缓存是满的。器件B在向器件A连续发送数据包。
图1:RapidIO嵌入式控制符和PCIe DLLP。
在图的中间部分,器件B中的一个缓存空出来了。此时器件B必须告知器件A它能发送数据包了。在右边底部的PCIe部分,DLLP在当前数据包的传送完成之前是无法得到传送的。在右边顶部的RapidIO部分,控制符被嵌入进了正在发送的数据包内。因此与其它协议相比,RapidIO协议能以更低时延和更高吞吐量完成可靠的数据包传送。将控制符嵌入进数据包的能力使得RapidIO流量控制的其余功能比PCIe或以太网都要丰富,后文对此将有进一步描述。
除了更有效的流量控制外,将控制符嵌入进数据包使得RapidIO具有PCIe和以太网目前无法提供的能力。控制符可以用来低时延和低抖动地在整个RapidIO系统中分配事件,如图2所示。
图2:RapidIO组播事件控制符和PCIe DLLP。
这一功能可以支持将公共实时时钟信号分配到多个端点或为天线系统分配帧信号等应用,还可以用于发送其它系统事件信息,以及实现多处理器系统中的调试。如图2所示,PCIe的DLLP在每次通过交换机传送时都会引入很大的时延和抖动。相反,RapidIO协议允许在整个RapidIO架构中分配信号时具有低于10个单位间隔(UI)的抖动性能和每次交换低于50ns的时延性能,并且与数据包业务无关。
PCIe和以太网可以选择扩展各自的规范以允许事件获得低时延的分配。引入类似控制符的概念对以太网来说是很大的进步。以太网生态系统下已有几家组织正在改进存储应用中的以太网能力,其中就可能需要用到类似控制符的概念。以太网还准备采用简单的XON/XOFF流量控制来进一步增强性能。
PCIe目前不允许将DLLP嵌入进TLP,因为这一概念不能兼容传统的PCI/X总线操作。嵌入TLP的DLLP会产生没有数据可以放置到传统总线上的周期。PCIe端点可以工作在存储-转发模式,确保数据包在转发给总线之前全部接收到,代价是时延的显著增加和吞吐量的降低。由于PCIe主要用于单处理器系统的板上互连,并且一直需要保持与传统总线标准的兼容,PCIe阵营不太可能允许DLLP被嵌入进TLP。
带宽选项
除了流量控制和链路维护外,以太网、PCIe和RapidIO在物理/链路层方面的最显著区别是所能支持的带宽选项。以太网带宽具有一代增加10倍的悠久历史。以太网目前工作在10Mbps、100Mbps、1Gbps和10Gbps。一些专用器件甚至支持2Gbps(2.5GBaud)。下一代以太网将能工作在40Gbps和/或100Gbps。
PCIe和RapidIO采用了不同的方法,因为板上、板间和设备间互连要求功率与数据流匹配。因此与以太网相比,PCIe和RapidIO支持更多的通道速率和通道带宽组合。PCIe 2.0允许通道工作在2Gbps或4Gbps(2.5和5Gbaud),而RapidIO支持1、2、2.5、4和5Gbps(1.25、2.5、3.125、5和6.25Gbaud)的通道速率。PCIe和RapidIO都支持从单个通道到16个通道的通道带宽组合。PCIe规范中还支持32通道端口。对于给定的通道带宽,RapidIO端口可以提供多于或少于PCIe的带宽,因此允许系统设计人员调整系统中用于数据流的功率大小。
传输层
RapidIO和以太网标准都是模糊拓扑结构。任何端点组都可以用任何拓扑结构连接,包括环形、树形、网状、超立方体以及超复杂网络等更深奥的几何图形。数据包则根据它们的网络地址在这些拓扑中完成路由。互联网协议(IP)地址就是一种以太网网络地址。RapidIO网络地址被称为目的识别符,简称destID。
与拓扑无关的(Topology-agnostic)协议可实现各种资源备份和冗余功能。例如,一些系统使用N+1备份策略来确保高可用性和可靠性,而不用显著增加硬件数量。(备份功能将未使用的设备作为在用设备的备份。在N+1备份机制时,N个元件有一个共同的备份,因此当N个元件中的一个发生故障时系统可以继续工作。这个策略也被称为1:N备份)。支持不同拓扑选项还允许系统设计人员通过匹配数据路径和数据流程消除系统中的性能瓶颈。系统扩展和演变在RapidIO和以太网络中是不受约束的。
相反,PCIe在顶层支持带单个根联合体(Root Complex)的树状结构。PCIe还使用了多种路由算法,具体取决于TLP类型。PCIe支持的单路拓扑是传统PCI/X总线支持的一部分。PCIe标准已经用多根I/O虚拟化(MRIOV)进行了扩展,进一步增加了PCIe可以支持的物理拓扑数量。然而,由于MRIOV实现代价高,是否能被PCIe生态系统采纳还是未知数。PCIe元件还支持非透明桥接(NTB)功能,因此一个PCIe层可以访问另一个PCIe层中的确定存储范围。这种方法的系统可靠性和可用性将在后文作进一步阐述。
许多基于以太网的系统功能也受限于树形结构。例如,许多以太网实现使用不同生成树协议(STP)将可用链路组减少到树形使用链路。作为将以太网扩展到存储网络的一部分努力,协议中规定可以为以太网支持的4096个虚拟通道中的每个通道创建生成树,这样可以允许同时使用更多的链路。然而,支持4096个虚拟通道会增加交换的复杂性,可能需要更多的缓存,并增加通过交换机的时延。
逻辑层
RapidIO、PCIe和以太网在逻辑层方面也有多个差异较大的地方。最明显的区别是所支持的语义,如图3所示。
图3:读、写和消息语义。
PCIe数据包支持基于地址的读写语义。在PCIe系统中,发起读或写的实体必须知道系统的全局存储器映射图中的目标地址,这对控制平面应用而言是很自然的一种方法。然而,这种对全局地址映射图的依赖性也会导致难以发展的紧耦合软件系统。
PCIe协议也支持通过消息TLP的消息传送。不过消息TLP只支持有限数量的功能,如中断和复位信号。这点与以太网和RapidIO消息包有很大的不同,后者可用于进程间通信。
与PCIe不同,建立在以太网物理层之上的软件协议只支持消息语义。在发送消息时,发送者只需知道接收地址。寻址机制一般是分层的,因此没有哪个节点必须知道所有的地址。地址可能会随系统发展而改变,支持软件单元实现相互间的松散耦合。这些属性对数据平面应用来说是必要的。
RapidIO同时支持读/写和消息语义。除了明显的架构优势和系统灵活性外,对读/写和消息处理的支持允许单路互连同时用于控制和数据平面。RapidIO系统因此要比必须结合PCIe和以太网的系统来得更简单,从而具有降低功耗和成本的优势。
PCIe不可能在其数据包定义中合并进程间通信消息语义,因为与传统PCI和PCI-X总线的操作相冲突。PCIe是围绕根联合体概念设计的,这个联合体只包含系统中的处理器。在这个范例中,没有消息处理是在PCIe到其它软件实体上完成的,因此消息语义没有价值。
人们对以太网通过远程直接存储器访问(RDMA)协议支持读写语义尚存争议,该协议支持设备间进行直接存储器拷贝。然而,RapidIO(和PCIe)读写语义的效率要比RDMA高得多。RDMA协议建立在其它以太网协议之上,如TCP,并且每个数据包都需要大量的包头开销。与RapidIO读/写事务处理相比,RDMA实现在时延和带宽方面付出的代价都要大得多。虽然一些RDMA能帮助卸载已有引擎的负担,但很难想象将RDMA用于控制平面功能,例如对寄存器进行编程。
消息语义的一种可能应用是其它协议的封装。RapidIO拥有封装各种协议的标准。这种封装能力给系统设计人员提供了许多优势,包括未来将要证明的RapidIO背板。任何未来、传统或专有协议都可以用标准的RapidIO组件进行封装和传送。例如,用于以太网封装的现有RapidIO规范就允许设计人员在基于RapidIO的系统中使用基于以太网的软件。
以太网也支持封装,并且有多种封装标准可以选择。RapidIO的封装效率要比以太网高,因为以太网协议层需要更多的头部开销。
曾经有个组织试图对在PCIe类结构上的各种协议封装进行标准化。但几年前这个组织宣告失败,因为过程太过复杂。由于与传统总线相关的要求,很难将PCIe扩展成适合嵌入式系统的结构。
可靠性和可用性
大多数系统对可靠性和/或可用性都有要求。有可靠性和/可用性要求的系统需要误码检测、误码提醒、故障元件分析与隔离以及恢复机制。从高层看,PCIe、RapidIO和以太网在所有这些方面都要相似的功能。不过在备份策略以及快速隔离系统使之免受故障元件影响的功能方面有很大差别。
起初,互联网使用网络层的软件协议,在可能会经历严重损伤的网络上提供可靠的通信。因此以太网的原始误码管理功能主要用于检测、隔离和避免网络中的新漏洞,而不是用于单个系统的鲁棒性。系统可靠性通过网络元件的复制来实现。后来的性能增强则增加了标准化的误码捕捉和误码提醒机制来简化网络管理。
RapidIO具有与以太网类似的备份、误码捕捉和误码提醒功能。PCIe支持有限的备份策略,因为它的传输层仅限于树状结构。上文提及的PCIe非透明桥接(NTB)允许两个或多个树状结构进行通信,足以实现1+1备份(也称为1:1备份)。NTB很难拓展到采用N+M备份机制的系统。理论上多根I/O虚拟化(MRIOV)可以用来在PCIe系统中支持N+M备份,其中N+M的总数量不超过8。然而,由于MRIOV系统中的子树无法相互通信,从故障恢复可能要求系统中断运行,目的是重新配置系统,以便隔离故障元件,并采用新的元件。
与PCIe和RapidIO相比,以太网的误码检测机制通常比较慢,因为以太网是针对全球范围内分布的网络设计的。PCIe和RapidIO都有误码检测和提醒机制,其时延要比以太网小得多。
虽然PCIe和RapidIO都保证数据包的发送,但在误码条件下它们会弃包,以防止故障元件造成致命拥塞。然而,PCIe误码条件机制是不可配置的。当链路必须再学习时数据包通常会被丢弃。另外,PCIe隔离机制只在几个毫秒后就被激活。这些并不是所有系统都理想的行为。
相反,RapidIO标准允许对误码作出特殊系统响应,如链路再学习。当误码发生时,系统会立即开始弃包,或者它会保留包,并允许拥塞发生。RapidIO使用'漏桶'式误码计数方法,并有两个可配置门限。DEGRADED门限能尽早提醒系统管理软件链路上正在发生误码。FAILED门限用于触发丢包以实现用户定义的误码率。RapidIO误码管理的灵活性反映了嵌入式系统设计人员的不断变化需求。
流量控制
流量控制贯穿互连规范的物理、传输和逻辑层。流量控制功能非常重要,可确保系统在各种条件下都能正确和鲁棒性地操作,这些条件包括部分故障和过载。流量控制机制允许尽可能高效和完整地使用可用带宽。为了尽量减少由于超配高频串行链路而浪费的带宽和功率,流量控制策略正变得越来越重要。
目前还不可能讨论统一的以太网流量控制策略,因为许多不相干的以太网消息处理标准都有特殊协议流量控制策略来避免丢包。一般来说,这些标准的流量控制策略基于的是检测到丢包时降低传送速率。流量控制策略一般用软件实现,并且要求很强的缓存能力来实现重传。
PCIe流量控制仅限于物理层。PCIe流量控制机制基础是跟踪数据包头和数据块的信用,并且对投递、非投递和完整事务的跟踪是分开的。
RapidIO规定了物理层和逻辑层的流量控制机制。物理层流量控制机制设计用于处理几个毫秒周期的拥塞。在物理层,RapidIO提供PCIe风格的流量控制,并辅之以简单的重传机制。简单的重传机制能很高效地实现,与PCIe风格的流量控制相比性能损失最少。RapidIO物理层流量控制还包括基于虚拟输出队列的反压机制。这种在RapidIO 2.0中引入的机制允许交换机和端点了解哪些目的地是拥塞的,并将业务发送到未拥塞的目的地。这种特性可以实现分布式决策制定,确保可用的网络带宽得到最大化的利用。决策制定的时延很低,因为拥塞信息使用控制符进行交换,而这些控制符如前所述可以被嵌入RapidIO包。
虚拟的输出队列反压机制如图4所示。
图4:RapidIO虚拟输出队列反压机制。
在图的上面部分,数据源发送数据的速率比端点(EP)1接收数据包的速率快得多,这将导致一个拥塞状态控制符由EP1发送到交换机2,它级联在消息后面返回给源端。当交换机2在与EP1连接的端口上检测到拥塞时,交换机2也能产生拥塞状态控制符。一旦源接收到拥塞状态控制符,它就开始将数据包发送给EP2,并降低到达EP1的数据包发送速率。
RapidIO的逻辑层流量控制机制设计用于避免网络中的拥塞,方法是计量发到网络的确认数据包数量,从而在网络级管理拥塞。这种方法与基于以太网的软件协议非常相似。针对特殊流程的数据包接纳可以通过XON/XOFF类协议,以及基于速率和信用的流量控制进行管理。也许最重要的是,这些流量控制机制也能用于应用层来提高软件应用性能。最好的一点是,这些流量控制机制可用硬件实现,从而释放宝贵的CPU资源,为用户提供更高的价值。RapidIO流量控制机制可以确保基于RapidIO的系统能以高效、可预测的方式使用可用带宽。
本文小结
以太网、PCIe和RapidIO都是基于相似的SerDes技术,因此SerDes技术不再是这些技术的差异点,而是它们使用可用带宽的方式。每种技术都有最适合的专门应用领域。
以太网最适合地理上分散的、具有长时延并且动态网络配置的网络。PCIe则能对单板上的分层总线结构提供最理想的支持。这两种技术都可用于板上、板间和设备间通信,而且在许多应用场合被同时用于同一系统。RapidIO能将这两种互连的优势结合到单个互连中,并可显著节省功率和成本。
RapidIO是嵌入式系统的最佳互连选择。RapidIO具有与PCIe和以太网相似的功能,并具有其它互连技术无法复制的功能,如:低时延、低抖动的系统事件分发;组合式链路层和网络层流量控制机制;可配置的误码检测和模糊拓扑路由可实现高效的备份、高可靠性和可用性;读/写和进程间通信消息语义的硬件实现。这些功能允许系统架构师创建性能更高、功耗更低并且更容易扩展的系统