课程:嵌入式系统        作业:文献翻译
电工理论与新技术_130501_徐浩泽_YS1310501037 如有需要可提供电子版
强实时应用环境下VxWorks, Linux, RTAI 和Xenomai 系
统的性能比较
A. Barbalace, A. Luchetta, G . Manduchi, M. Moro, A. Soppelsa, and C. Taliercio
摘要:使用配置MPC7455 PowerPC 处理器的VMEbus MVME5500 开发板对Wind River VxWorks, Linux, RTAI 和 Xenomai 四种不同操作系统进行性能测试。以一个时间实时应用的框架为例对中断延迟,重调度和程序间通信时间进行比较。
对Gb 以太网通信的性能测试也在目标板上进行。为达成此目的,我们将Linux IP stack 和 RTnet ,Xenomai 和 RTAI 的一种开源强实时通信协议移植到所用的系统中。
测试结果显示被测的开源软件适用于强实时应用环境。
关键词:实时系统,Linux, RTAI, Xenomai, ADEOS,
RTnet,
VxWorks,
PowerPC.
1. 简介
自1998年以来,实时反馈控制系统已经被广泛应用于RFX-mod 实验。RFX-mod 是一个用于研究磁约束热核聚变的环形装置,坐落于意大利的帕多瓦。目前在使用的有7个控制单元,每个单元都包含一个使用摩托罗拉MVME5500单板机和其他ADC/DAC 转换器以及其他数字接口板的模组箱。控制单元组成控制网络,数据在各单元间进行实时交换。一个提供了通用功能以及数据处理和通信功能的软件框架已经在VxWorks 平台上搭建起来。VxWorks 被广泛应用于物理学研究的原因包括:
·提供了一个集成开发环境,简化了开发过程。程序在被下载到目标系统之前可以在主系统中做开发和仿真。
·提供了一个强大的多任务化环境,任务有固定的优先级,可以通过一组丰富的进程间通信(IPC )机制进行通信。
·
VxWorks 的软件模式与UNIX 非常相似,尤其是I/O 和网络,对于熟练使用UNIX 的开发者来说,编程变得非常简单。 但是,近年来,Linux 系统的蓬勃发展使得将其应用于实时控制系统变得极富吸引力。但是对于数据采集,或者更广泛的说,对于所有不需要严格的时间确定性的任务,Linux 已经被应用于科学实验当中。但是Linux 的一些特性使其不能被直接应用于实时应用,例如:
·动态优先级。使用随时变动的优先级是解决分时的一个好方法,但是可能会使一个紧急事件无法足够快的拿到CPU 权限。
·分页。可能会引入额外的延迟除非将页在内存中锁定。
·内存管理单元的重新映射。用户程序
占用CPU 时重新映射进入内存管理单元(MMU )的页面表会减缓上下文切换。 ·粗粒度的同步。由于内核为非先发式,有时系统无法响应冗长的内核操作时。
最近的2.6版本Linux 内核为以上问题提供了解决方案。事实上将固定优先级与过程子集想联系是可能的,这一版本的内核通过精确定义不可中断的程序段和自旋锁保护而不是禁止中断已经被定制为先发制人的了。此外Linux kernel 2.6提供了一个新的O 调度的实现。考虑到交互可以被禁止,而且,给定了级别范围,优先级可以被固定,我们可以将Linux 暂时考虑成一个软实时操作系统并因此可以被应用于许
多可以忍受偶尔的系统响应延迟的场合。但是Linux 2.6 仍然不适用于聚变反应反馈控制这种强实时场合,在这种情况下,事实上,不可预测的反应时间可能恶化控制的质量,或者更糟糕的是,导致不可恢复的不稳定性。然而,在引用文献[4]和[5]中,借助脉冲性质的实验,
Linux已经被成功的应用到了强实时场合。在这种情况下,大多数的时间过程控制系统不需要运行在实时模式。只有在等离子放电这一在大多数现有聚变实验中只持续数秒的过程中才需要实时控制。因此当需要进行实时操作时禁止中断是可行的,这实现了一个循环周期1~2μs的整体抖动。在禁用中断时,尤其要注意:代码和数据必须被锁定到内存中来防止页面错误,软件不能依赖系统服务控制I/O。因此除了轮询输入数据和写输出数据,控制代码不能与外部环境通信,对于一个固定的迭代次数,使用预配置的地址窗口。这个解决方案尽管在特定的应用程序成功,仍然有各种各样的原因使其不能被认为是一个结论,最主要的是因为在下一代聚变装置中,控制系统被期望用于控制长时间放电,或者准稳态过程。
2.Linux 系统的实时扩展
我们主要希望能到一种方法,给Linux增加一些定义新的实时任务的可能性,从而保证在它们已经准备好运行时,能在一个确定的时间内获得控制。这个特性是由两个开源Linux扩展: RTAI和Xenomai提供。RTAI和Xenomai大多数概念相同(他们源自同一个项目),都代表而不是代替了Linux,一个结合Linux工作的额外的组件,处理的实时任务的调度,让Linux提供所有剩余的功能。
但是,为了与Linux配合,额外的组件和Linux共享底层硬件是必要的。通过使用ADEOS超微内核作为硬件功能的代理,RTAI 和Xenomai都实现了这种共享。特别的,ADEOS通常掌控硬件中断,并为其他组件传播通知序列。所以,Linux和RTAI (或Xenomai)代表ADEOS域,并由超微内核作为管线从逻辑上组织起来。
声明在流水线前端的组件将先接收到中断通知,然后可以决定ADEOS是否让它们沿着域管传播。在RTAI(或Xenomai)位于管道前端因而优先于Linux的情况下,可以忽略Linux的实际运行,确定响应时间。如图  1 所示这个组织在Xenomai中已经完全实现。
图  1 Xenomai分层
图  2 RTAI的分层
如图  2 所示RTAI有稍微不同的组织形式,与Xenomai让ADEOS掌控所有的中断源不同的是,RTAI拦截它们,使用ADEOS将那些RTAI不感兴趣的中断通知送给Linux(也就是,中断不影响实时时序)。这样混合过程的目的是提高性能,因为在这种情况下,如果中断是要唤醒一个实时任务,就避免了由ADEOS管理中断的开销。
RTAI和Xenomai都有一个活跃的开发者社区,都可以作为一个VxWorks的开源替代。
为了评估是否适合我们的目标,我们进行了一组测量比较了Linux,RTAI,Xenomai 和VxWorks的性能。我们使用PowerPC架构,使用摩托罗拉MVME5500单板机,这个选择的原因是PowerPC构架在执行浮点运算时性能要优于x86构架。此外,在开发RFX-mod的实时控制系统时,我们得到一个非常有价值的经验:使用PowerPC系列处理器提供的向量构架组件((AltiV ec)进行并行浮点运行。
但是,RTAI还没有往PowerPC构架进行移植,ADEOS也有程序错误而无法在我们的平台上应用。因此,为了在MVME5500单板机上使用RTAI和Xenomai(两者都在ADEOS分层)我们先开发了一个补丁集。
3.MVME5500平台上
LINUX,ADEOS,RTAI
和XENOMAI的移植
为了将Linux, ADEOS, RTAI和Xenomai移植到目标板上,我们开发了一些补丁。
为了安装Linux,V anilla Linux Kernel v 2.6.14使用了一个从摩托罗拉公司获得的补丁。但是我们必须开
发一个附加的补丁修正一些VME数据存取中的错误。超微内核ADEOS已经被移植到PowerPC架构,但是有一个程序错误使其不能被应用于使用Galileo GT-64260系统控制器的所有平台。我们在一个新的补丁中已经修正了这个错误。安装Xenomai时并未做任何改动,因为已经有PowerPC使用的版本,而且不需要特定板支持。Xenomai已经在AEDOS完全分层。RTAI没有PowerPC可用的版本,所以需要进一步的开发。最后,RTnet不需要额外的开发。
ADEOS和RTAI两个系统开发的补丁已经被集成在官方的配置中。在RFX-mod 上可以得到MVME5500板的所有Linux补丁。
由于目标板是无盘的,系统引导首先由厂商提供的引导装载程序Motload完成。Motload使用普通文件传送协议(TFTP)从服务器下载内核。Linux使用网络文件系统(NFS)进行文件输入/输出。
4.性能测定
为了评估性能,我们重点关注两个特性:中断延迟和延期时间。我们使用一个测试程序,acqloop,通过VME总线从ADC 获得64个cannel产生一个输出到DAC板,对应于获得的第一个信号。虽然很简单,这个程序可以测试我们感兴趣的特性,因为当一组新的数字化数据已经准备好后ADC会产生一个中断。通过用示波器测量一个输入信号和系统的输出间的延迟,我们可以对系统的总体性能进行非扰乱性的测量,测定中断延迟和延迟时间的不同。整体延迟中的其他部分实际上是对VME I/O的访问引起的,在所
有被测系统中可以认为是相同的。
最后,我们考虑网络实时通信,因为大多数聚变装置的控制系统都涉及实时通信。RTAI和Xenomai都依靠Linux IP堆栈实现网络通信。因此我们首先扩展我们的测试程序acqloop,通过以太网连接和使用UDP协议在另一块板上生成输出信号,对VxWorks 和Linux的IP堆栈性能进行了比较。我们对UDP协议感兴趣是因为它正在被现有的控制系统RFX-mod用于实时通信。然后我们考虑用一个开源项目RTnet,实现实时网络通信。RTnet实现了一种新的IP堆栈(对于UDP),非确定性的原因被精确的避免了。特别的,为了避免内存动态分配,数据包的内存分配由预分配所有需要提前的缓冲区实现。RTAI和Xenomai都可以使用RTnet。
在第一轮测试中,我们关注被测系统中断延迟时间的差别。该情况下,acqloop首先安装一个中断服务程序(ISR),直接读取ADC数据寄存器并写入DAC(通过VME)。对于VxWorks (v 5.5.1) acqloop为一个C函数实现,然后由shell调用,所有代码运行在本机的内核模式。其他系统,这段代码集成为Linux模块,因为它必须在内核模式执行。整个测量延迟是由于完成以下工作所需
的时间组成:
1)ADC板用于AD转换;
2)控制板上的VME芯片用于检测
VME中断,并将其传播到系统控制
器;
3)操作系统(OS)来处理中断和调用
副ISR;
4) ISR从VME读ADC数据;
5) ISR向DAC写输出值;
6)DAC转换器输出相应的电压值
以上各段时间,只有第三段依靠操作系统实现。因此,被测系统的不同的测量延迟突出表现中断延迟的差异。
测得的时间如图  3 所示
图3无重调度的测量延迟和抖动
整体性能数据是相似的,最快的(VxWorks) 和最慢的(Xenomai)约有5%的差别。进一步分析表明RTAI和Xenomai的差异是因为在Xenomai中,中断总是首先被调度进入超微内核,这就Linux而言引入一个小的开销。相反的,RTAI在管理中断时旁路了ADEOS,只有在中断要传播到另一个域(Linux)时才依赖ADEOS。值得注意的是RTAI的性能和VxWorks非常接近,而且,抖动显然更小。
在第二轮测试中,我们改变了acqloop 程序,输出不直接由中断服务程序,而是由ISR设定的另一个等待信号量的内核任务写。测试结果如图  4 所示,每个条形图的第二个部分代表重调度时间。
图4有重调度的测量延迟和抖动
Linux的性能不管是延迟还是抖动都令人惊喜,但是该测试结果仅表示系统不加载的情况下,当工作量增加时会很快减少。相对地,其他系统的性能测试结果被证明受工作负载的影响非常小,除非在高中断率的情况下。
VxWorks的性能和RTAI又非常接近,特别地,RTAI对执行本地实时任务一个非常高效的调度器。
在最后一轮测试中我们考虑了网络通信,在这种情况下,等待信号量的进程不直接向DAC写输出,而是向另一块写DAC 的MVME5500板发送一个包含所有获得样本数据的UDP数据包,UDP数据包的大小大约256字节(为了防止丢包,一些额外的字节用于UDP数据包时间标记)。
有网络通信的测量延迟如图  5 所示:
图5有实时网络通信的测量延迟
本次性能比较中,Linux使用本地IP堆栈,RTAI和Xenomai都使用RTnet,VxWorks 使用本地IP堆栈。值得注意的是VxWorks 的网络通信性能是较差的,事实上在RFX-mod上使用VxWorks最新的版本的时候,我们已经体验过这个情况。RTnet显示了良好的性能,抖动很小。我们再一次观察到RTAI和Xenomai有细微的差别,可能是中断执行路径不同引起的。
在上述测试中,我们禁止了RTnet的所
有以太网访问控制规则。我们使能以太网时分多址(TDMA)访问规则后重复RTnet的上述实验。该规则由RTnet选择性提供,旨在强制网络访问中的决定论,避免可能的冲突。使用循环时间100μs,数据分组时间片40μs 的TDMA,我们获得了一个约150μs整体的延迟和约50μs的抖动。减少TDMA 的周期时间是不可能的(因此减少延迟和抖动也是不可能的)因为这将导致不可接受的CPU负荷。
5.讨论
本篇文章的目的是为了评估Linux实时解决方案替代RFX-mod目前正在使用的VxWorks的可能性。基于性能测定的结果,我们可以得到以下结论:
●当前Linux 2.6内核的性能非常好,
在小的专用系统是可以接受的。但
RFX-mod的反馈控制系统并非如
此,涉及的控制单元要处理高数据
吞吐量的输入/输出和网络通信。
●RTAI和Xenomai都值得考虑。
Xenomai的性能表现略次于RTAI,
主要是因为它分层的方法在中断
管理中引入一些开销。另一方面,
linux和安卓的关系
Xenomai结构化更优,很多平台可
以使用。此外,Xenomai提供一组
模拟层,这在大型系统的移植中会
非常有用。
●RTAI和Xenomai在软件开发时用
户友好都不及VxWorks。因为实时
任务要在内核模式执行以实现最
佳性能,程序员不能使用通常在用
户空间可用的系统服务,调试变得
非常困难。然而,对于Xenomai
和RTAI,让用户进程成为实时却
是可能的。允许实时应用用户进程
的开发简化了实时系统程序开发
也允许IPC Linux标准进程。实时
用户进程靠一个与Linux调度器协
同工作的专门的调度程序进行管
理,当用户进程需要实时性时,窃
取它们。与内核进程不同,为用户
进程进行上下文转换需要重新映
射页表,这是一个潜在的耗时的操
作。因为这个原因我们计划进一步
测试量化MMU重新映射对上下文
切换的影响。
●网络性能是对RTAI和Xenomai最
有利的支持。UDP已成功用于实时
网络通信。RTnet被证实是一种良
好的解决方案,尤其是的与目标板
的最新版VxWorks IP堆栈的不良
性能给我们的用户体验相比的时
候。
RTnet只在不使能TDMA时可以达到最佳性能,这似乎最适合有大量接入点但是没有严格时间要求的系统(访问冲突的机率更高)。RFX-mod并不是运行在这样的环境下,只有不到10个控制单元。
因此我们可以说,RTAI和Xenomai都可以在RFX-mod,或者更广泛的说,在聚变装置的实时控制系统有效替代VxWorks。
参考文献
[1] A. Luchetta and G. Manduchi, ―RFX 数字反馈控制的总体构架,实现和性能‖ IEEE Trans. Nucl. Sci., vol. 47, pp. 186–191, 2000.
[2] M. Cavinato, G. Manduchi,    A. Luchetta, and C. Taliercio, ―核聚变实验中一般目的的实时控制框架‖ Trans. Nucl. Sci., vol. 53, pp. 1002–1008, 2006.
[3] Wind River 主页, [在线].可访问: http: www.windriver.
[4] J. A. Stillerman, M. Ferrara, T. W. Fredian, and S. M. Wolfe, ―Alcator C-Mod 数字实时等离子体控制系统‖ Fus. Eng. Des., vol. 81, pp. 1905–1910, 2006.
[5] B. G. Penaflor, J. R. Ferron, M. L. Walker, D. A. Piglowski, and R. D. Johnson, ―使用一个Linuxα的计算集对DIII-D等离子放电进行实时控制‖ Fus. Eng. Des., vol. 56-57, pp. 739–742, 2001.
[6] RTAI主页, [在线]. 可访问:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。