微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 硬件电路设计讨论 > 折腾了一轮实时linux

折腾了一轮实时linux

时间:12-13 整理:3721RD 点击:
折腾了一天...趁我还记得就写个记录保存下吧...
因为这个东西最终的目标是驱动cnc,跟嵌入式方向更近,
所以就发本版吧,linux版面估计反而没人感兴趣...
先说结果,最终还是收敛到linuxcnc提供的现成方案...如图所示...
注意max jitter与系统负荷无关。我这里是跑个opengl并且用vnc remote desktop上
去了。实际情况不管是CPU 100%还是磁盘压满,max jitter最终大概会稳定在10us左
右。如果不开X server,max jitter只有1-2us。
感觉上对max jitter影响比较大的主要是opengl和磁盘IO,CPU压力影响倒是不大。
开始之前先简单介绍下linux的rt方案吧。有3大派,最早的rtai,后来的xenomai,再
到最新的RT-preempt。
其中xenomai还进一步分v2和v3,v3是从零开始彻底重写的。然后v3还分两种完全不同
的实现...
rtai比较旧了,目前最新只支持到3.18.22内核
xenomai v2最新支持3.18.20,v3最新支持4.1.18
rt-preempt最新支持4.6.5
目前所有的RT实现都没进mainstream kernel,所以都要自己patch。
注意rtai和xenomai都是跳跃支持几个版本号的,可以跑的版本一只手都数的过来,并不
是每版本都连续支持。
rt-preempt的虽然还没到每版本都支持的程度,但跳的版本号不多,支持丰富程度远超
过上2个解决方案。未来的RT方案基本都会走这条路了。包括xenomai v3的其中一条路
也是基于rt-preempt的。
简单的说说3者区别吧。rtai是最为暴力的解决方案。给linux kernel打了许多补丁,
改进了大部分耗时的中断处理过程或者让它们可重入。并且用户自己的rt thread需要编
译成内核模块,在内核态运行。效果上来说rtai是最好的,但这个实现只支持x86平台,
而且随便让用户代码在内核态运行也是比较粗暴的解决方案。
xenomai性能非常接近rtai,基本思路是构造一个高优先级的rt thread专门处理实时任
务。到v3这个rt thread演化成cobalt kernel,独占一个cpu core,比linux kernel
优先级更高。
xenomai也需要用专门的api来开发用户态实时代码,但不会运行在内核态。xenomai对
linux kernel的改动相对较小,也有arm,ppc等等各种不同体系结构的版本。
rt-preempt是linux的一个扩展,只专注于改进kernel的实时性性能。大致相当于rtai
一部分工作的子集。但rt-preempt目前呼声很高,有可能被并进mainstream。
rt-preempt并不提供任何用户态api,只是一个rt的基石。xenomai v3提供了另一个
mercury core,就是基于rt-preempt扩展的。这样的好处是如果rt-preempt被并入
mainstream,那么基于xenomai v3开发的应用可以兼容。
实时性来说,看jitter,rtai <= xenomai v3 < xenomai v2 << rt-preempt。
rtai和xenomai v3 average的情况下差距并不大。但xenomai v3的worst case大概要
差4倍。xenomai v2和v3也类似,average差距不大。但v2明显还有很多中断没处理干
净,启动停止opengl的时候必定会有100多us的lag,又是2-3倍差距。
rt-preempt我目前还没测...下次有心情再测吧...目前看反馈是不太行的...只能说比
普通的linux kernel好...
除了这3个实现自身的区别外,我还对比了3台机器...
机器1:Intel(R) Celeron(R) CPU  N2930  @ 1.83GHz
机器2:Intel(R) Atom(TM) x5-Z8350  CPU @ 1.44GHz
机器3:Intel(R) Processor 5Y70 CPU @ 1.10GHz
机器性能是依次提高,每档性能差3-4倍的...
测试都是用的xenomai v3我自己裁剪的4.1.18 kernel。
结果大致是机器2 max jitter 13us,机器1和3都要到40us左右。
按照intel的whitepaper,intel号称在xeon上用xenomai v2可以达到0.2us的max
jitter...虽然我没拿我的i7去测,但我实在是有点不敢相信这个结果...丫的max
jitter基本就是我的min jitter甚至还要更好...看起来好扯...
总的来说,忙了一天...最终还是用别人prebuild的linuxcnc image...
虽然这货实在是有点旧,但看在不折腾的份上就这样吧...

这总结写的,狂赞啊。

我觉得带图形的就没法实时
.146

狂赞总结。。。一天都折腾完效率爆表了。
Xenomai和RTAI似乎都是基于i-pipe的?
好像最早是RTAI,然后分出来的Xenomai。
Xenomai对Kernel的支持受到i-pipe的影响,每个版本都要等很久;
似乎i-pipe开发者很少。。。?
对LTS的Kernel版本,跳一个支持一个似乎差不多;每个都支持玄。
PREEMPT-RT跟进Kernel的速度会比较快,且大体上LTS都有。
在ARM平台上,据说,简单实时以太网的测试表明,
Xenomai v2和Preempt_RT最差没有十分显著的差异。

图形界面与实时不矛盾的。尤其现在多核环境下,界面和实时线程可以跑在不同的核上

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top