[置顶] 泰晓 RISC-V 实验箱,配套 30+ 讲嵌入式 Linux 系统开发公开课
嵌入式 Linux 系统怎样保证实时性
By Falcon of TinyLab.org 2015/7/14
简介
简单来说,可以根据实时需求选择不同实时 Linux 方案,然后在选定方案上针对特定需求做进一步的优化。
明确需求
首先看具体使用环境,确定是硬实时环境(Safety-Critical,低延时,比如几十个us内)还是软实时(几百个us~几个/几十个ms),还是普通的低延迟桌面(几个ms到几百个ms)等?
比如说有航天飞控、汽车制动系统、动力传输解决方案、精密仪器等都有较高的硬实时要求,硬实时通常跟高确定性、可靠性要求同时出现,如果达不到,可能会造成重大生命或者财产损失。
而普通的,比如音视频播放、游戏画面,对于实时性要求相对较低,只要达到播放的 Frame Rate 就好,比如说有的视频播放 24 个 FPS,而游戏 40~60 FPS 就很流畅,几乎感觉不到卡顿,也就是 16.6 ms。
而桌面交互应用点击、网页加载、应用启动这类则没有那么高的要求,通常在 100ms 以内,加上过度动画,就会有很好的体验效果。
对于软实时,可靠性要求没那么高,即使出现了延迟,造成的损失可控,比如说音频失真,视频过度不自然或者是交互不顺畅。而硬实时领域,通常一旦出现延迟,造成的损失可能不可估量,所以要求有比较高的可确定性。
可选方案
Linux 本身已经有硬实时的方案,比如来自风河的 RT Linux,或者西班牙一家研究所的 XtratuM + PartiKle,还有其他的比如 Xenomai,RTAI 等。另外,内核官方还有完全抢占内核(Preempt-RT Linux)的支持,这个在某些情况下也达到了硬实时要求,比如我 09 年移植的 MIPS 实时抢占 Linux 在 Loongson-2F 上的 Latency 已经达到 100us 左右,看图:
原图地址:Latency plot of Loongson Real Time Linux system in OSADL
注:这个机器(龙芯 2F 盒子)是笔者的奥地利导师 09 年带到欧洲某实验室的,放在那里跑了几年,实时性一直都很稳定,笔者当时移植最早的一版是 linux-2.6.26.8-rt16
,现在都支持:Linux 3.12.24-rt38
了。
如果要求再低一些,用内核里头的其他抢占选项就可以。
然后就是各种优化,包括驱动(irq, preempt disable), spin lock 等使用,中断函数线程化,mdelay 优化等。
优化时需要用到很多工具,比如 Ftrace, Perf, Cyclictest, Oscilloscope 等。
需要提到的是,除了系统以外,硬件本身的低延迟设计、可靠性设计等也会严重影响系统的实时性,所以在选择方案时一定要兼顾考虑这部分,比如说 ARM Cortex A/R/M 三系中的 R 就是专为高端嵌入式实时系统设计的,比如说在中断行为方面做了优化。这里不做深度展开。
更多内容请查看后续参考资料,回复该文,或者关注 @泰晓科技 后私信。
相关资料
猜你喜欢:
- 我要投稿:发表原创技术文章,收获福利、挚友与行业影响力
- 知识星球:独家 Linux 实战经验与技巧,订阅「Linux知识星球」
- 视频频道:泰晓学院,B 站,发布各类 Linux 视频课
- 开源小店:欢迎光临泰晓科技自营店,购物支持泰晓原创
- 技术交流:Linux 用户技术交流微信群,联系微信号:tinylab
支付宝打赏 ¥9.68元 | 微信打赏 ¥9.68元 | |
请作者喝杯咖啡吧 |