标签 RTL 下的文章

 title=

实时 Linux 在过去十年中已经走了很长的路。Linutronix 的 Jan Altenberg 提供了对该主题做了概述,并在 ELC Europe 的视频中提供了新的 RTL 性能基准。

实时 Linux(RTL)是一种启用 PREEMPT\_RT 的主线 Linux,在过去十年中已经走了很长的路。大约 80% 的确定性的 PREEMPT\_RT 补丁现在可用于主线内核本身。然而,Linux 上单内核 RTL 的最强大的替代品——双内核 Xenomai——继续声称在减少延迟上有巨大的优势。在去年 10 月的 欧洲嵌入式 Linux 会议的演讲中,Jan Altenberg 反驳了这些声明,同时对实时主题做了论述。

德国嵌入式开发公司 Linutronix 的 Altenberg 并不否认 Xenomai 和 RTAI 等双核方法提供较低的延迟。然而,他揭示了新的 Linutronix 基准,旨在表明差异不如所声称的那样大,特别是在实际使用中。争议较少的是,他认为 RTL 更易于开发和维护。

在我们深入永恒的 Xenomai 与 RTL 的辩论之前,请注意,2015 年 10 月,开源自动化开发实验室(OSADL)将 RTL 项目的控制权转移给了管理 Linux.com 的 Linux 基金会。此外,Linutronix 是 RTL 项目的主要贡献者,并承担了 x86 的维护者。

RTL 的进步是过去十年中 Linux 从实时操作系统(RTOS)中获得市场占有率的几个原因之一。实时操作系统在微控制器上比应用处理器上更频繁出现,并且在缺乏高级用户级操作系统(如 Linux)的单用途设备上实现实时很简单。

Altenberg 通过清除关于实时确定性的内核方案的一些常见的误解开始他的演讲。Altenberg 告诉他的 ELCE 观众:“实时不是快速执行,这基本上是决定论和定时保证。实时为你提供保证某些内容将在给定的时间内执行。你不想要尽可能快,但是要尽快指定。”

在给定的执行时间内的迟缓的反应会导致严重后果,特别是当它可能导致人们受到伤害时,开发人员往往会使用实时的方式。这就是为什么实时性仍然在很大程度上受到工厂自动化行业的推动,并且越来越多地出现在汽车、火车和飞机上。然而,并不总是生死攸关的情况 - 金融服务公司使用 RTL 进行高频交易。

Altenberg 说:“实时需求包括确定性的定时行为、抢占、优先级继承和优先级上限。最重要的要求是高优先级任务总是需要能够抢占低优先级的任务。”

Altenberg 强烈建议不要使用术语“软实时”来描述轻量级实时解决方案。“你可以是确定性的或者不是,但两者之间什么也没有。”

双内核实时

像 Xenomai 和 RTAI 这样的双内核方案部署了一个与单独的 Linux 内核并行运行的微内核,而像 RTL 这样的单内核方案使得 Linux 本身能够实时运行。Altenberg 说:“使用双内核,当优先级实时程序不在微内核上运行时,Linux 可以获得一些运行时间。 “问题是人们需要维护微内核并在新的硬件上支持它。这需要巨大的努力,并且它的开发社区不是很大。另外,由于 Linux 不直接在硬件上运行,所以你需要一个硬件抽象层(HAL)。有两件事要维护,你通常会落后主流内核一步。”

Altenberg说:“RTL 的挑战以及花了这么久才出现的原因是,要使 Linux 实时,你基本要修改每个内核文件。” 然而,大部分工作已经完成并合并到主线,开发人员并不需要维护一个微内核或 HAL。

Altenberg 继续解释了 RTAI 和 Xenomai 之间的差异。“使用 RTAI,你将编写一个由微内核调度的内核模块。这就像内核开发 - 真的很难深入,很难调试。”

RTAI 的开发可能会更加复杂,因为工业用户通常希望包括封闭的源代码以及 GPL 内核代码。 Altenberg 说:“你必须决定哪些部分可以进入用户态,哪些部分可以通过实时的方式进入内核。”

RTAI 与 RTL 想必支持更少的硬件平台,特别是 x86 之外。双内核 Xenomai 将 RTAI 作为主要的双内核方式,比 RTAI 具有更大的操作系统支持。更重要的是,Altenberg 说:“它提供了“在用户空间中进行实时的合适解决方案。要做到这一点,他们实现了皮肤的概念 - 一个用于不同 RTOS 的 API 的仿真层,比如 POSIX。这使你可以重用一些 RTOS 中的现有代码的子集。”

然而,使用 Xenomai,你仍然需要维护一个单独的微内核和 HAL。有限的开发工具是另一个问题。Altenberg说:“与 RTAI 一样,你不能使用标准的 C 库。你需要专门的工具和库。即使对于 POSIX 来说,你也必须链接到 POSIX 层,这更复杂。” 他补充说,任何一个平台,很难将超过 8 到 16 个 CPU 的微内核扩展到金融服务中使用的大型服务器集群。

睡眠自旋锁

主要的单内核解决方案是基于 PREEMPT.RT 的 RTL,它主要由 Thomas Gleixner 和 IngoMolnár 在十多年前开发。PREEMPT.RT 重新生成内核的 “spinlock” 锁定原语,以最大化 Linux 内核中的可抢占部分。(PREEMPT.RT 最初称为睡眠自旋锁补丁)

PREEMPT.RT 不是在硬中断环境中运行中断处理程序,而是在内核线程中运行它们。Altenberg 说:“当一个中断到达时,你不会运行中断处理程序代码。你只是唤醒相应的内核线程,它运行处理程序。这有两个优点:内核线程可以中断,并且它会显示在进程列表中,有自己的 PID。所以你可以把低优先级的放在不重要的中断上,高优先级的放在重要的用户态任务上。”

由于大约 80% 的 PREEMPT.RT 已经在主线上,任何 Linux 开发人员都可以使用面向 PREEMPT.RT 的内核组件,如定时器、中断处理程序、跟踪基础架构和优先级继承。Altenberg说:“当他们制作实时 Linux 时,一切都变得可以抢占,所以我们发现了很多竞争条件和锁定问题。我们修复了这些,并把它们推送到主线,以提高 Linux 的稳定性。”

因为 RTL 主要在 Linux 主线上,Altenberg 说:“PREEMPT.RT 被广泛接受,拥有庞大的社区。如果你编写一个实时应用程序,你不需要知道很多关于 PREEMPT.RT 的知识。你不需要任何特殊的库或 API,只需要标准的 C 库、Linux 驱动程序和 POSIX 程序。”

你仍然需要运行一个补丁来使用 PREEMPT.RT,它每隔两个 Linux 版本更新一次。然而,在两年内,剩下的 20% 的 PREEMPT.RT 应该会进入 Linux,所以你就“不再需要补丁”了。

最后,Altenberg 透露了他的 Xenomai 对 RTL 延迟测试的结果。Altenberg说:“有很多论文声称 Xenomai 和 RTAI 的延迟比 PREEMPT.RT 更小。但是我认为大部分时候是 PREEMPT.RT 配置不好的问题。所以我们带来了一个 Xenomai 专家和一个 PREEMPT.RT 专家,让他们配置自己的平台。”

Altenberg 称,虽然 Xenomai 在大多数测试中表现更好,并且有更少的性能抖动,但是差异不如一些 Xenomai 拥护者声称的高达 300% 至 400% 的延迟优势。当用户空间任务执行测试时,Altenberg 说这是最现实的、最重要的是测试,最糟糕的情况下 Xenomai和 RTL/PREEMPT.RT 都是 90 到 95 微秒的反应时间。

当他们在双 Cortex-A9 系统中隔离单个 CPU 来处理中断时,Altenberg 表示这相当普遍,PREEMPT.RT 执行得更好,大约80微秒。(有关详细信息,请查看大约第 33 分钟的视频。)

Altenberg 承认与 OSADL 的两到三年测试相比,他的 12 小时测试是最低标准,而且它不是一个“数学证明”。无论如何,考虑到 RTL 更简单的开发流程,它都值得一试。他总结说:“在我看来,将完整功能的 Linux 系统与微内核进行比较是不公平的。”


via: https://www.linux.com/news/event/open-source-summit-na/2017/2/inside-real-time-linux

作者:ERIC BROWN 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在不久前的 Linux 大会活动 ( LinuxCon ) 上 Linux 基金会 ( Linux Foundation ) 宣称, 实时Linux操作系统项目 ( RTL,Real-Time Linux ) 得到了新的资金支持,并预期这将促进该项目,使其自成立15年来第一次有机会在实时操作性上和其他的 实时操作系统 ( RTOS,Real Time Operation System ) 一较高下。Linux 基金会将 RTL 组重组为一个新的项目,并命名为 RTL协作组 ( Real-Time Linux Collaborative Project ) ,该项目将获得更有力的资金支持,更多的开发人员将投入其中,并更加紧密地集成到 Linux 内核主线开发中。

新的 RTL 协作组将加速实时 Linux 的发展

根据 Linux 基金会的说法,RTL 项目并入 Linux基金会旗下后,“在研发方面将为业界节省数百万美元的费用。”同时此举也将“通过强有力的上游内核测试体系而改善本项目的代码质量”。

在过去的十几年中,RTL 项目的开发管理和经费资助主要由 开源自动化开发实验室 ( OSADL,Open Source Automation Development Lab ) 承担,OSADL 将继续作为新合作项目的金牌成员之一,但其原来承担的资金资助工作将会在一月份移交给 Linux 基金会。RTL 项目和 OSADL 长久以来一直负责维护 内核的实时抢占 ( RT-Preempt 或 Preempt-RT ) 补丁,并定期将其更新到 Linux 内核的主线上。

据长期以来一直担任 OSADL 总经理的 Carsten Emde 博士介绍,支持内核实时特性的工作已经完成了将近 90%。 “这就像盖房子,”他解释说。 “主要的部件,如墙壁,窗户和门都已经安装到位,就实时内核来说,类似的主要部件包括: 高精度定时器 ( high-resolution timers ) , 中断线程化机制 ( interrupt threads ) 和 优先级可继承的互斥量 ( priority-inheritance mutexes ) 等。然后所剩下的就是需要一些边边角角的工作,就如同装修房子过程中还剩下铺设如地毯和墙纸等来完成最终的工程。”

以 Emde 观点来看,从技术的角度来说,实时 Linux 的性能已经可以媲美绝大多数其他的实时操作系统 - 但前提是你要不厌其烦地把所有的补丁都打上。 Emde 的原话如下:“该项目(LCTT 译注,指 RTL)的唯一目标就是提供一个满足实时性要求的 Linux 系统,使其无论运行状况如何恶劣都可以保证在确定的、可以预先定义的时间期限内对外界处理做出响应。这个目标已经实现,但需要你手动地将 RTL 提供的补丁添加到 Linux 内核主线的版本代码上,但将来的不用打补丁的实时 Linux 内核也能实现这个目标。唯一的,当然也是最重要的区别就是相应的维护工作将少得多,因为我们再也不用一次又一次移植那些独立于内核主线的补丁代码了。”

新的 RTL 协作组将继续在 Thomas Gleixner 的指导下工作,Thomas Gleixner 在过去的十多年里一直是 RTL 的核心维护人员。本周,Gleixner 被任命为 Linux 基金会成员,并加入了一个特别的小组,小组成员包括 Linux 稳定内核维护者Greg Kroah-Hartman,Yocto 项目维护者 Richard Purdie 和 Linus Torvalds 本人。

据 Emde 介绍,RTL 的第二维护人 Steven Rostedt 来自 Red Hat 公司,他负责“维护旧的,但尚保持维护的内核版本”,他将和同样来自 Red Hat 的 Ingo Molnàr 继续参与该项目,Ingo 是 RTL 的关键开发人员,但近年来更多地从事咨询方面的工作。有些令人惊讶的是,Red Hat 竟然不是 RTL 协作组的成员之一。相反,谷歌作为唯一的白金会员占据了头把交椅,其他黄金会员包括 国家仪器公司 ( NI,National Instruments ) ,OSADL 和德州仪器(TI)。银卡会员包括Altera 公司,ARM,Intel 和 IBM。

走向实时内核的漫长道路

当15年前 Linux 第一次出现在嵌入式设备上的时候,它所面临的嵌入式计算市场已经被其他的实时操作系统,譬如 风河公司 ( WindRiver ) 的 VxWorks,所牢牢占据。VxWorks 从那时起到现在,一直在为众多的工控设备、航空电子设备以及交通运输应用提供着工业级别的高确定性的,硬实时的内核。微软后来也提供了一个支持实时性的操作系统版本- Windows CE,当时的 Linux 所面临的是来自潜在工业客户的公开嘲讽和层层阻力。他们认为那些从桌面系统改进来的 Linux 发行版本顶多适合要求不高的轻量级消费类电子产品,而不适合那些对硬实时要求更高的设备。

对于嵌入式 Linux 的先行者如 MontaVista 公司来说,其早期的目标很明确就是要改进 Linux 的实时能力。多年以来,对 Linux 的实时性能开发发展迅速,得到各种组织的支持,如成立于2006年的 OSADL,以及 实时 Linux 基金会 ( RTLF,Real-Time Linux Foundation ) 。在2009年 OSADL 与 RTLF 合并,OSADL 及其 RTL 组承担了所有的 抢占式实时内核 ( Preempt-RT ) 补丁的维护工作和将补丁提交到上游内核主线的工作。除此之外 OSADL 还负责监管其他自动化相关的项目,例如 高可靠性 Linux ( Safety Critical Linux ) (译者注:指研究如何在关键系统上可靠安全地运行Linux)。

OSADL 对 RTL 的支持经历了三个阶段:拥护和推广,测试和质量评估,以及最后的资金支持。Emde 表示,在早期,OSADL 的角色仅限于写写推广的文章,制作专题报告,组织相关培训,以及“宣传” RTL 的优点。他说:“要让一个相当保守的工控行业接受象 Linux 之类的新技术及其基于社区的那种开发模式,首先就需要建立其对新事物的信任。从使用专有的实时操作系统转向改用 Linux 对公司意味着必须引入新的战略和流程,才能与社区进行互动。”

后来,OSADL 改而提供技术性能数据,建立质量评估和测试中心,并在和开源相关的法律事务问题和安全认证方面向行业成员提供帮助。

当 RTL 在实时性上变得愈加成熟的同时,相反地 Windows CE 却是江河日下,其市场份额正在快速地被 RTL 所蚕食,一些与 RTL 竞争的实时 Linux 项目,主要是 Xenomai 也已开始集成 RTL。

“伴随 RTL 补丁的成功,以及明确的预期其最终会被完整集成到 Linux 内核主线代码中,导致 Xenomai 关注的重心发生了变化,”Emde 说。 “Xenomai 3.0 可与 RT 补丁结合起来使用,并提供了所谓的‘皮肤’,(LCTT 译注:一个封装层),使我们可以复用为其他系统编写的代码。不过,它们还没有完全统一起来,因为 Xenomai 使用了双内核方法,而RT 补丁只适用于单一的 Linux 内核。“

近些年来,RTL 组的资助来源越来越少,所以最终 OSADL 接过了这个重任。Emde 说:“当最近开发工作因缺少资金而陷入停滞时,OSADL 对 RTL 的支持进入到第三个重大阶段:开始直接资助 Thomas Gleixner 的工作。”

正如 Emde 在其10月5日的一篇博文中所描述的那样,实时 Linux 的应用领域正在日益扩大,由其原来主要服务的工业控制扩大到了汽车行业和电信业等领域,这表明资助的来源也应该得到拓宽。Emde 原文写道:“仅仅靠来自工控行业的资金来支撑全部的工作是不合理的,因为电信等其他行业也在享用实时 Linux 内核。”

当 Linux 基金会表明有兴趣提供资金支持时,OSADL 认为“单一的资助和控制渠道要有效得多”(LCTT 译注:指最终由Linux 基金会全盘接手了 RTL 项目),Emde 如是说。不过,他补充说,作为黄金级成员,OSADL 仍参与监管项目的工作,会继续从事其宣传和质量保证方面的活动。

汽车行业期待 RTL 的崛起

Emde 表示,RTL 会继续在工业应用领域飞速发展并逐渐取代其他实时操作系统。而且,他补充说,RTL 在汽车行业发展也很迅猛,以后会扩大并应用到铁路和航空电子设备上。

的确,Linux 在汽车行业将扮演越来越重要的角色,这也是 Linux 基金对 RTL 所寄予厚望的原因之所在。RTL 工作组可能会与 Linux 基金会旗下的 车载Linux ( AGL,Automotive Grade Linux ) 工作组展开合作。Emde 猜测,Google 高调参与的主要动因可能也是希望将 RTL 用于汽车控制。此外,德州仪器(TI)也非常期望将其 Jacinto 处理器应用于汽车行业。

面向车载 Linux 的项目(比如AGL)的目标是要扩大 Linux 在车载设备上的应用范围,其应用不是仅限于 车载信息娱乐 ( IVI,In-Vehicle Infotainment ) ,而是要进入到譬如集群控制和车载通讯领域,而这些领域目前主要使用的是 QNX 之类的实时操作系统。无人驾驶汽车在实时性上对操作系统也有很高的要求。

Emde 特别指出,OSADL 的 SIL2LinuxMP 项目可能会在将 RTL 引入到汽车工业领域上扮演重要的角色。SIL2LinuxMP 并不是专门针对汽车工业的项目,但随着 BMW 公司参与其中,汽车行业成为其很重要的应用领域之一。该项目的目标在于验证 RTL 在采用单核或多核 CPU 的 标准化商用 ( COTS,Commercial Off-The-Shelf ) 板卡上运行所需的基本组件。它定义了引导程序、根文件系统、Linux 内核以及对应支持 RTL 的 C 库。

无人机和机器人使用实时 Linux 的时机也已成熟,Xenomai 系统早已用在许多机器人以及一些无人机中。不过,在更广泛的嵌入式 Linux 世界,包括了消费电子产品和物联网应用中,RTL 可以扮演的角色很有限。主要的障碍在于,无线通信和互联网本身会带来延迟。

Emde 说:“目前实时 Linux 主要还是应用于系统内部控制以及系统与周边外设之间的控制,在远程控制机器上作用不大。企图通过互联网实现实时控制恐怕不是一件可行的事情。”


via: http://www.linux.com/news/software/applications/858828-new-collaborative-group-to-speed-real-time-linux

作者:Eric Brown 译者:unicornx 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出