LWN:实时Linux和嵌入式Linux的当前状态!

共 5809字,需浏览 12分钟

 ·

2024-05-15 12:58

关注了就能看到更多这么棒的文章哦~

The state of realtime and embedded Linux

By Jonathan Corbet
April 25, 2024
OSSNA
ChatGPT translation
https://lwn.net/Articles/970555/

Linux 以存在于众多类型的系统中而闻名。其中服务器和数据中心确实获得了大量的关注,而今年又总是被称为 Linux 桌面之年,其实还是有很多 Linux 是运行在实时和嵌入式场景里。在 2024 北美开源峰会中的 realtime and embedded 主题中,听众们了解到了 Linux 近期在这些方面的进展。针对实时 Linux 的工作已经快要完结了,而嵌入式相关社区则还在全力推动开发工作。

完善实时性工作

实时性相关讨论是以小组讨论的形式进行,参与讨论的有 Kate Stewart、Daniel Bristot de Oliveira、Sebastian Siewior,还有代表 Thomas Gleixner 的一个空椅子,由于航空公司的原因,他错过了会议时间。Bristot 开始询问实时性社区,推动所有工作的动机是什么。Stewart 回答说,先有了一个问题(需要一个能够满足实时响应需求的 Linux 版本),然后一些公司联合资助了它。单单最新阶段就是一个长达八年的过程,但这个项目接近完成。

Siewior 补充说,实时性的特有存储库中几乎没有什么核心代码了;大部分与 持续进行的 printk() 工作 有关。其余的是驱动程序的更改等。Stewart 表示,完成这项工作所需的资金支柱也已经具备了。Siewior 指出,也正在努力将与实时性相关的修复内容向后移植到旧内核中。

Bristot 表示,调度和工具方面的工作仍在进行中。人们已经花费多年致力于解决 实时性限流(realtime throttling) 的问题。为了防止一个失控的实时性进程拖死系统,哪怕没有其他人在争夺 CPU,内核也只允许实时任务使用可用 CPU 时间的 95%。实时性开发者希望也能用上那 5%,但又不会损失在系统失控时恢复出来的能力。Bristot 表示,提出的许多解决方案会在未来给开发社区带来限制。他从这个经验中得出的结论是“走捷径是不好的”,并且从长远来看并没有帮助。

目前出现的针对这个限流问题的解决方案是 截止期服务器(deadline servers)。内核的 截止期调度器 以比实时任务更高的优先级运行任务,这意味着它不会被失控的实时任务卡住。截止期服务器是一个任务,会在截止期调度器下以 5% 的 CPU 份额来运行,如果有任何非实时性的进程需要 CPU,那么就运行那些进程。必须要做一些工作来在合适的时间运行截止期服务器,从而最小化对实时性任务的影响。

Stewart 问上游实时性代码是否对内核的其余部分产生了影响;Bristot 回答说,实时性讨论现在只是内核开发过程的一部分,而不是一个独立事物了。Siewior 观察到,实时性代码推送到 upstream 的动作导致完成后续工作的关注变少了。Bristot 指出,内核中有很多有用的代码起源于实时性代码仓库;现在它已经 upstream 了,每个人都从中受益,但他们忘记了它的来源。

一位观众问实时性社区接下来要开展的项目。Bristot 表示,到目前为止,焦点几乎完全集中在延迟方面,但现在是时候开始更多地考虑其他相关问题了。首先要解决的是多个任务的调度以及优化所有任务的响应时间。与多个实时任务共享一个 CPU 可能会引发更多的锁问题;这实际上是在推动将 代理执行 的工作合并到主线中。

Bristot 提出了截止期调度器的一个长期存在的问题:它的准入控制算法(决定是否可以接受新的截止期任务,同时确保所有任务都能满足它们的截止期)是在整个系统范围内的全局性判断。这种设计带来的副作用是不能为截止期任务设置 CPU 亲和性,但用户希望能够这样做。禁用准入控制就可以让用户来安排他们的任务,但这会导致损失一个重要的保证措施,并且全局策略也是低效的做法。因此,人们希望寻找到其他的对系统中各种工作进行区分的方法。

Stewart 将讨论转向人们如何参与到实时性 Linux 中来;Siewior 迅速指出,需要更好的文档。一位观众也表达了这种观点,说用户必须重新认识应该如何设置实时系统;他们会从一些更好的指南中受益。他还指出,实时 Linux 分析工具(RTLA) 在这项任务中已经证明是有帮助的,但这只是一个开始。Bristot 回答说,有些事情需要时间;RTLA 诞生于 2010 年,但多年后才真正变得有用。

另一位观众强调了这一点;用户急需指南来帮助他们进行设置、基准测试等。Bristot 回答说,“在合入内核之后就为此做好了重要准备”,后续可以解决这类问题 — 只是要随着时间的推移。一个适用于所有用例的解决方案可以鼓励进一步的发展。现在比如说就很容易向 RTLA 添加新工具,其他人正在对它们做出贡献。

Tim Bird 表示,他一直在试图说服太空领域的人员,Linux 是一个实时系统,但是“他们并不相信”。实时 Linux 仍然存在一个信息传递问题,他说。RTLA 在这方面并没有帮助,它是一个“显示 Linux 在实时性方面失败的所有方式”的工具;它传递了错误的信息。Bristot 回答说,实时性不仅仅是关于延迟的;解决问题需要理解相关的工作负载,使其适应 Linux 执行模型,并使用工具(如 RTLA)来查找不当行为。在这方面,Linux 和其他操作系统类似。Siewior 补充说,如果购买了一个 100GB/秒 的网络卡,那种带宽不会立即出现。系统必须进行调整才能获得预期的性能水平;实时性是相同的情况。

Bristot 坚称,Linux 是一个事实上的实时方案选项;通过适当的调优和使用 CPU 隔离就能达成,他说,RHEL 系统可以实现低于 10µs 的延迟。Bird 表示,这样的结果只会让人产生这样的印象,即一个专家用户可以在调整了 100 个调优开关之后获得所需的响应。Bristot 承认,确实需要一定程度的专业知识,但他表示情况正在好转。

当一位观众问是否到了需要一本关于 Linux 实时性的详细书籍的时候,Siewior 指出了 实时性维基 作为一个起点。他一直在要求开发者和用户提供更新,但抱怨从来没有发生过。Bristot 建议将信息添加到内核的文档树中,以增加动力并鼓励贡献;Stewart 表示,这往往也会提高文档的质量。Alison Chaiken 建议将内核的冗长 命令行参数文档 拆分出一个专门针对实时性的文档;Siewior 担心这样分割文档会随着时间的推移带来一致性问题。

另一位观众建议消除所有这些内核参数,将实时性的相关调优开关改为可以在运行时修改。Bristot 表示这将是一项漫长而艰巨的任务;Siewior 补充说,有相当多的参数只能在引导时设置。

随着会议时间的不断流逝,讨论逐渐变得不那么严肃,甚至出现了删除所有代码(解决了太多调优开关的问题)或者干脆让一些大型语言模型输出一堆有用的实时文档。Bristot 表示,ChatGPT 对实时 Linux 一无所知,所以这种完全可行的选择被抛弃了,会议随之结束。

了解嵌入式 Linux 的情况

“嵌入式 Linux 的现状”会议于第二天举行;由 Bird 和 Marta Rybczyńska 主持。总体印象是有大量的活动在进行,但还有一些问题有待解决。

Rybczyńska 首先概述了最近的内核发布版本,指出了一些对嵌入式系统开发人员有帮助的改动:

  • 6.4 :移除了 SLOB 内存分配器,构建精简内核的文档,将 MODULE_LICENSE() 声明从非模块化代码中 移除,以及 user trace events。

  • 6.5 :在启动 x86 CPU 时改进了更好的并行化,重新组织了 32 位设备树文件,以及大量的 ftrace 和 perf 更新。

  • 6.6 :能够 在没有buffer head的情况下构建内核,eventfs 文件系统,以及 x86 shadow stack。

  • 6.7 :在 64 位 x86 系统上禁用 32 位仿真执行的参数,移除 Itanium 架构支持,改进了内核同页合并,以及一些 printk() 改进。

  • 6.8 :初步支持截止日期服务器,第一个用 Rust 编写的驱动程序,一些核心网络数据结构的重新组织,perf 的数据类型分析。

  • 6.9 (即将发布):ext2 文件系统已被弃用,一些重要的 内核定时器变更,降低网络堆栈中锁争用的工作,以及 运行时可修改的能源模型。

也讨论了对长期稳定内核版本的六年支持的结束。Bird 表示,寻求更长期支持的用户可以转向 民用基础设施平台(Civil Infrastructure Platform) 或 Ubuntu 的长期支持版本 — 或者在设备生命周期内持续跟随稳定更新更改内核版本。“但我们从来不这样做”。

Rybczyńska 提到了一些正在进行的工作,首先是 TI 公司正在进行的减少启动时间的工作。这在汽车领域尤为重要。该工作似乎侧重于在引导加载程序中就完成设备的初始化,然后以完全就绪的状态将它们传递给内核。

在图形方面,她提到了为 NVIDIA GPU 推出的 NVK Vulkan 驱动程序。正在进行的工作包括改进 MTD-SPI-NOR 子系统以提高文件系统访问速度,以及为 EROFS 文件系统提供缓存和速度增强。实时性工作也被提及。这部分讨论结束时,也谈到了内核项目开始为漏洞 分配自己的 CVE 编号。

Bird 接下来介绍了“关于系统 size 的怨言”;这始终是嵌入式部署中关注的一个问题。他表示,SLOB 分配器被移除了,它本来是为小型系统设计的,不过这是可以接受的,因为它实际上已经不再被使用了。但是,他抱怨说,在 SLOB 被弃用和实际删除之间只有两个内核发布版本;在那段时间内,嵌入式开发人员不太可能注意到 SLOB 已经被弃用了的这个信息,这段时间应该延长。在同一年内删除 SLAB 也同样有问题。他承认增加了 CONFIG_SLUB_TINY 配置选项是有帮助的,但他说 SLUB 永远不会像 SLOB 那样小。他担心,一些用户已经失去了一个有用的内核功能。

在测试方面,有 提议 与 GitLab 的持续集成(CI)系统进行集成,但是 Linus Torvalds 并不 喜欢它。因此,该提议被搁置了,但仍有可能在内核的较低级别添加此类支持,“Linus 不需要关注”。Bird 表示,可以直接运行 CI 测试将使测试变得更容易。

关于工具链,GCC 13.2 于 2023 年 7 月发布;GCC 14 版本随时会发布,并带来一些有趣的 静态分析器改进。他说,GCC 是一个有用的测试程序;它找到的错误比其他任何程序都多。他提到 Bootlin 提供了 一套预构建的交叉工具链,供那些不想自己构建的人使用。

Rybczyńska 提到,Yocto 项目 5.0 版即将发布。这将是一个新的长期支持版本,也是第一个具有通用 Arm 64 位支持的版本。此版本基于内核 6.6。

在行业新闻方面,欧洲的《网络安全法》(CRA, Cyber Resilience Act)正在进展中;它要求供应商为其产品提供安全更新,并对其所包含的组件进行尽职调查。CRA 的最终出版公布预计将于 10 月份完成,在 2027 年全面生效。她表示,三年的准备时间并不长,因为还有许多相关标准需要编写。

HDMI 2.1 规范已经发布。AMD 想要为 HDMI 2.1 编写一个开源驱动程序,但是 HDMI 论坛阻止了这样做,因此将不会有自由代码驱动程序。

她总结说,火星直升机在进行了 72 次飞行后,由于受损的叶片而被迫停飞,该任务已经结束。但她说,我们肯定会看到其他将 Linux 带入太空的任务。

Bird 概述了会议情况;嵌入式 Linux 会议已恢复到每年两次的安排。北半球春季的活动将在北美举行,而秋季活动将在欧洲举行。下一次活动将于 9 月在维也纳举行。一些与会者不喜欢现在不再独立进行而是选择与大型活动(如开源峰会)合作的举措;Bird 表示,这一举措是由赞助(或缺乏赞助)驱动的决定。

嵌入式 Linux 维基,这是该社区的一个长期资源,最近失去了对系统管理员的资金支持。好消息是,参与其中的人已经在 Linux 基金会找到了一份工作,并将继续致力于维基工作。他说,该站点在某些方面已经过时且未充分利用,但它也包含了许多有用的材料;欢迎志愿者提供帮助。

Rybczyńska 结束时表示,嵌入式社区发展良好;今年又会是嵌入式 Linux 的一年。她说,嵌入式 Linux 所需的大部分内核基础设施现在已经就位,而且仍然有新的开发人员加入帮助。整个社区的基础设施需要一些投资,但整体处于一个好的状态。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~



浏览 94
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报