APP下载

Rapid IO高性能通信中间件设计

2014-12-10

电子技术应用 2014年12期
关键词:中间件队列数据包

潘 灵

(中国电子科技集团公司第十研究所,四川 成都 610036)

0 引言

近年来,RapidIO总线作为嵌入式领域的总线互联标准,以其高性能、低延迟、低引脚数和低功耗等特点得到了广泛关注,基于RapidIO总线互联的嵌入式系统硬件技术日益成熟[1-3]。在系统应用方面,目前有两种数据传输方式:(1)直接使用 RapidIO逻辑层功能;(2)将 RapidIO逻辑层功能与通用协议适配。前者由于缺乏节点间端到端互联功能,很难应对多任务并发的系统应用;对于第二种方式,Linux平台上采用了设备抽象的方式,将消息与门铃功能接入TCP/IP协议[4-5],vxWorks平台通过内存映射机制提供了对TIPC协议的支持[6-7]。采用第二种方式虽然能够支持复杂的应用,但冗余的协议处理使其很难应付对带宽、时延都要求特别高的场合。本文针对RapidIO逻辑层消息机制的传输特点,设计实现了采用HOST节点集中控制的RapidIO通信中间件,解决了PE节点间高效的端对端数据传输问题。

1 Rapid IO通信中间件

RapidIO通信中间件采用了分层的设计思想,RIO消息驱动层负责对RapidIO总线接口进行管理,包括收发邮箱的初始化、硬件收发队列的管理、中断的响应等操作。逻辑链路层实现对节点之间点对点链路的维护,将邮箱功能映射为数据包发送与数据包接收队列。虚通道层将逻辑链路层单个收发队列复用为多个虚通道,提供给逻辑事务层使用。控制代理使用控制虚通道进行HOST节点与PE节点之间控制信息的交互,应用程序使用应用虚通道传输数据。RapidIO通信中间件采用工作进程进行各类任务的处理,逻辑链路层与虚通道层各部署了一个工作队列,图1给出了RapidIO通信中间件层次模型。

1.1 虚通道状态

RapidIO通信中间件为每个虚通道维护了一个虚通道状态,在虚通道对象创建时处于UC状态,并主动向对端发送请求包;然后根据收到请求包、应答包的先后顺序,分别经过URP、UBB向正常状态 NM跃迁,虚通道上的超时定时器避免握手时发生死锁。处于NM状态的虚通道可正常收发数据,当发送处于拥塞状态时,会切换到拥塞状态CGST,待拥塞恢复后方能继续发送数据。挂起状态HG使得HOST节点能够根据当前系统需求,暂停、恢复PE节点上的虚通道数据传输功能,删除态DEL使得虚通道对象能够在资源释放完毕后正常销毁。图2给出了虚通道状态的变迁。

图1 RapidIO通信中间件层次模型

图2 虚通道状态变迁图

1.2 虚通道的建立

RapidIO通信中间件中应用虚通道的建立采用了对等握手的机制。PE节点中虚通道控制代理负责接收HOST指令,发起对等握手过程,并将结果反馈给HOST节点。控制虚通道的建立采用HOST节点主动发起、PE节点被动建立的方式。图3给出了控制虚通道与应用虚通道的建立过程。

图3 控制虚通道与应用虚通道的建立过程

1.3 虚通道句柄映射

RapidIO通信中间件采用通信句柄对虚通道进行标识,应用程序通过预分配的虚通道名称获取通信句柄进行数据传输。获取通信句柄时,若对应的虚通道已经建立,则将分配的句柄结构与虚通道对象进行双向关联;若虚通道未建立,则将虚通道名称保存在分配的句柄结构中,待对应的虚通道建立后,扫描通道句柄映射表,实现通信句柄的延迟绑定。图4给出了通道句柄与通道对象映射关系。

图4 通信句柄与通道对象的映射

1.4 数据包传输

RapidIO通信中间件采用了M_BLK与CLUSTER两类缓存对象进行内部数据包的传递,CLUSTER作为存放数据包内容的载体,M_BLK负责对CLUSTER中的包头信息进行描述,并通过单向指针与CLUSTER一对一关联。每个M_BLK有相互索引的双向指针,可方便地挂接到逻辑链路层与虚通道层的传输队列上。为提高搜索效率,缓存池中的M_BLK采用固定64 B长度,而CLUSTER则在长度 2N(5≤N≤12)中取值,每种 CLUSTER所占比例可根据系统应用进行配置。数据包在各层之间传递时,只需修改M_BLK中的双向指针,避免了数据的拷贝。同时,RapidIO通信中间件启用了硬件消息队列模式,CPU提交数据包到队列后,不必等待消息发送完毕,从而达到CPU与硬件接口并行工作的目的。

1.5 流控机制

RapidIO通信中间件基于消息目的端流控,采用ACK包交互实现了源端流控功能。ACK包向对端通报本地端接收队列的信息,包括接收队列总共已接收包个数(TotalRcvPacks)、还可以接收包个数(AllowRcvPacks)。定义发送端允许发送包个数AllowSendPacks,发送端总共已发送包个数TotalSendPacks,则有AllowSendPacks=Allow-RcvPacks-(TotalSendPacks-TotalRcvPacks)。 当AllowSend-Packs=0时发送端将进入拥塞状态直至收到对端ACK包使AllowSendPacks>0。接收端在接收队列中包个数为队列长度的1/2时,将向发送端发送ACK包,图5给出了AllowSendPacks在传输过程中的变化过程。

2 RapidIO通信中间件性能评估

图5 发送窗口变化过程

基于RapidIO通信中间件的设计思想,实现了RapidIO通信中间件的vxWorks版本,支持vxWorks5.5.1。测试环境为3个MPC8548E节点通过2个TSI578交换节点互联的系统,RapidIO物理层工作在1X模式,频率为1.25 GHz,其中一个MPC8548E作为HOST节点,其余两个MPC8548E作为PE节点。HOST节点配置两个PE节点之间的物理路径[8]与应用虚通道,两个PE节点在虚通道上传输数据进行性能测试。

测试数据长度在2n基础上减去了8 B的数据帧头,使消息能够以最高效的方式传输。在带宽指标测试中,RapidIO物理层1.25 GHz的工作频率8 B/10 B转换后,提供给RapidIO逻辑层的极限带宽为125 MB/s,RapidIO消息层损失了大约10%的传输带宽,经过RapidIO通信中间件的虚通道层后,测试的极限带宽达102 MB/s。在时延指标测试中,不超过64 B的短数据传输时延都在25μs以下。图 6与图 7分别给出了传输不同长度数据时的带宽与时延。

图6 传输带宽测试结果

3 结束语

图7 传输时延测试结果

RapidIO总线技术作为新一代芯片级互联总线的代表,在嵌入式领域具有广泛的应用前景,然而,缺少基于逻辑层业务的端对端通信功能大大限制了该总线在复杂系统中的应用。设计的RapidIO通信中间件在消息机制上提供了虚通道数据传输功能。高带宽、低时延以及易于实现功能迁移与重构的特性使其具备很强的工程应用价值。可以看出,在本文采用的流控机制中,接收端回复ACK包的策略没有考虑传输特征因子的影响,造成ACK包的占比偏高,需要在后期工作中进一步优化。

[1]RapidIO Trade Association.RapidIO,PCI express and gigabit ethernet comparison,Rev 03[Z].2005.

[2]RapidIO Trade Association.RapidIOTM interconnect specification part 6:1x/4x LP-serial physical layer specification,Rev.1.3[Z].2005.

[3]RapidIO Trade Association.RapidIO interconnect specification,Rev.1.3[EB/OL].(2008-05-08).www.rapidio.org.

[4]PORTERM.RapidIO for Linux[EB/OL].(2008-05-06).htttp://www.kernel.org/doc/ols/2005/ols2005v22pages243256.pdf.

[5]COMER D E,STEVENS D L.用TCP/IP进行网络互连第二卷:设计,实现与内核(第三版)[M].张娟,王海,黄述真,译.北京:电子工业出版社,2001.

[6]Multicore Association.TIPC:transparent inter process communication protocol[Z].2006.

[7]Wind River Systems,Inc.Wind river TIPC programmer′s guide,1.7.6[Z].2009.

[8]潘灵,桑楠.一种 RapidIO网络路径分配策略[J].计算机应用,2008,28(Z2):294-295.

猜你喜欢

中间件队列数据包
二维隐蔽时间信道构建的研究*
基于Jpcap的网络数据包的监听与分析
队列里的小秘密
基于多队列切换的SDN拥塞控制*
在队列里
SmartSniff
RFID中间件技术及其应用研究
基于Android 平台的OSGi 架构中间件的研究与应用
丰田加速驶入自动驾驶队列
中间件在高速公路领域的应用