以太网、PCIe和RapidIO的比较虽然在嵌入式系统中有许多连接元件的方法,但最主要的还是以太网、PCIExpress和RapidIO这三种高速串行标准。所有这三种标准都使用相似的串行解串器(SerDes)技术,它们提供的吞吐量和时延性能都要超过宽的并行总线技术。随着这些标准的不断发展,今后的趋势将是采用通用SerDes技术。这意味着这些协议提供的原始带宽不会有明显的差异。相反,每种协议的用途将取决于如何使用带宽。大多数设计人员都很熟悉基本的以太网协议特征。以太网是一种'尽力而为'的数据包传送方式。在以太网物理层上建立的软件协议,如TCP/IP,需要提供信息的可靠传输,因为基于以太网的系统一般在网络层执行流量控制,而不是在物理层。一般基于以太网的系统带宽都要超配20%到70%。因此以太网最适合高时延的设备间应用,或带宽要求较低的板上/板间应用。相反,PCIExpress(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嵌入式控制符和PCIeDLLP在图的中间部分,器件B中的一个缓存空出来了。此时器件B必须告知器件A它能发送数据包了。在右边底部的PCIe部分,DLLP在当前数据包的传送完成之前是无法得到传送的。在右边顶部的RapidIO部分,控制符被嵌入进了正在发送的数据包内。因此与其它协议相比,RapidIO协议能以更低时延和更高吞吐量完成可靠的数据包传送。将控制符嵌入进数据包的能力使得RapidIO流量控制的其余功能比PCIe或以太网都要丰富,后文对此将有进一步描述。除了更有效的流量控制外,将控制符嵌入进数据包使得RapidIO具有PCIe和以太网目前无法提供的能力。控制符可以用来低时延和低抖动地在整个RapidIO系统中分配事件,如图2所示。图2:RapidIO组播事件控制符和PCIeDLLP这一功能可以支持将公共实时时钟信号分配到多个端点或为天线系统分配帧信号等应用,还可以用于发送其它系统事件信息,以及实现多处理器系统中的调试。如图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支持更多的通道速率和通道带宽组合。PCIe2.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在顶层支持带单个根联合体(RootComplex)的树状结构。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系统中支