EtherCAT是一种由Beckhoff开发的开放实时以太网技术,广泛用于对精度和实时性要求较高的运动控制设备和采集设备中。
由于我们处于特殊的位置,使我们在推广EtherCAT主站协议栈的过程中,我们经常会围绕实时Linux系统与客户展开讨论。根据EtherCAT主站提供商Acontis公司对全球新客户统计,选择实时Linux系统的客户比重在过去10年逐年增加。2019年新客户中采用实时Linux作为控制器操作系统已超过60%。
从近几年的经验中,对于实时Linux系统主要聚焦在采用RT-Preempt 还是Xenomai的争论上。结合实时Linux系统专家Jan Altenberg在Embedded Linux会议上的讲演。整理出此文,希望可以在RT-Preempt 和Xenomai之间选择做出参考。
实时性
在和客户的交流过程,部分工程师会把实时性与执行速度或性能相混淆。Altenberg在讲演中强调:实时性与执行速度和性能无关!
实时性的含义不是越快越好,而是在规定的时间内完成任务的确定性(determinismand timing guarantees)。
在技术讨论中,同样客户对EtherCAT协议不存在错误数据自动重传机制有类似疑问。
EtherCAT主站的工作原理是按循环周期发送数据。所以EtherCAT在协议层面不会自动在后续周期重新发送失败的过程数据。
在Embedded Linux会议讲演中,Altenberg还表述了一个有趣的观点,他希望大家忘掉“软实时”即Softrealtime 的提法,只存在实时和非实时的、确定性和非确定性的区别。能保证确定性,那就是“硬实时” hardrealtime。
Xenomai和Preempt RT
目前,对实时Linux方案的选择集中在Xenomai和Preempt RT之间。Xenomai是在LinuxKernel外增加独立内核的双内核方案,而Preempt RT是标准的单内核实时方案。
图1是Xenomai为代表的双内核方案的原理图:
图1 Xenomai原理图
Altenberg认为双内核实时方案有几个明显不足。首先,维护工作量大。其次,Xenomai不能使用标准C库,实时应用的开发需要特殊库以及单独的API。
主流的实时Linux方案是基于Preempt RT 的单内核方案,通过最大限度地提高Linux内核中的可抢占部分,使Linux本身具备实时性。如图2 Premept RT原理图所示:
图2 Preempt RT原理图
大约80%的PreemptRT功能已经融合进Linux主线,所以任何Linux开发者都可以使用Preempt RT的Linux 内核组件。
随着剩下的20%功能逐渐融入Linux主线,未来有可能不需要在Linux安装补丁程序而直接使用Preempt RT。
性能比较
实时性能最重要的指标是延时。网上有不少文章,表示Xenomai在延迟方面有优势。Altenberg并不认同这种观点,他认为是对Preempt RT的错误配置造成的。
为了证实,他们的团队分别找Xenomai和Preempt RT专家,在相同的硬件上进行测试。测试对象是高负载下Xenomai和Preempt RT在延时Latency和抖动Jitter的表现整个测试程序运行12个小时。
Altenberg强调了两点,第一是测试的最坏结果才有意义;另外一点是系统拿到中断后,在用户空间的应用响应延时是对应用最有意义的。
在用户空间的测试结果,在测试中的最坏延时,Xenomai和 Preempt RT都在90-95 微秒左右。当在Linux系统中只使用单核测试时,PREEMPT RT最坏的延时只有大约80微秒,结果优于Xenomai。
在Kernel空间延时的测试结果,Xenomai最高延时在30微秒,单核运行Preempt RT的最高延时60微秒。如果使用FIQ 快速中断的话,Preempt RT的最坏延时也达到30微秒,平均延时甚至到达10微秒。
最终,对于开发人员最有意义的用户空间内最坏延时方面,两种实时方案在该性能指标上展示出近乎相同的数据。
但是Preempt RT几乎已经和Linux内核主线合并,从系统的开发和维护角度,Preempt RT的工作量与标准Linux相同。这使Preempt RT与Xenomai相比具备更多优势。
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !