Linux 主线内核已合并史诗级补丁 ‘PREEMPT_RT’


在 2024 年 9 月的欧洲开源峰会上,Linus Torvalds 宣布 ‘PREEMPT_RT’(Real-Time Linux) 补丁已被接受合并到 Linux 主线内核

从 Linux 6.12 开始,所有发行版都将包含实时 Linux 代码。这意味着 Linux 将开始运行在更多任务关键设备 (mission-critical devices) 和工业硬件上。

通过 ‘PREEMPT_RT’ 补丁,Linux 内核实现了完全可抢占 (fully preemptible) 特性,从而能够在微秒内响应事件。

这一能力对于需要精确时间控制的应用程序至关重要,如工业控制系统、机器人技术和音频制作。

via https://wiki.linuxfoundation.org/realtime/start

PREEMPT_RT 补丁从 2004 年开始启动开发工作,为 Linux 内核实现了实时计算能力。事实上,实时 Linux (Real-time Linux) 的故事最早可追溯到 20 世纪 90 年代后期,当时 Linux 需要支持实时应用的需求日益增长。

最初的尝试集中在创建可以与 Linux 内核并行运行的独立实时内核。这包括堪萨斯大学的 KURT;米兰大学的 RTAI;以及新墨西哥矿业与科技学院的 RTLinux 等学术项目。

Linux 内核开发者 Ingo Molnar 于 2004 年开始收集并重新整理这些项目的代码片段,并构建了实时抢占补丁 (real-time preemption)  PREEMPT_RT 的基础。

这种方法与早期的实时 Linux 解决方案不同,因为它修改了现有的 Linux 内核,而不是创建一个单独的实时内核。

到 2006 年,它获得了广泛关注,以至于 Linus Torvalds 评价称:"用 Linux 控制激光器太疯狂了,但在座各位都有自己的疯狂之处。因此,如果你想用 Linux 来控制工业焊接激光器,我对你使用 PREEMPT_RT 没有意见。

2009 年,内核开发者 Thomas Gleixner、Peter Ziljstra 和 Rostedt 组建了小团队,将之前的原型开发整合成一个单一的树外补丁集。

正是从那时起,许多公司开始使用这个补丁集来构建需要毫秒级精度的强实时工业系统

2015 年,Linux 基金会创建 Real-Time Linux (RTL) 协作项目,以协调将 PREEMPT_RT 补丁合并到主线内核。

但要将 PREEMPT_RT 补丁完整合并到内核还面临着最后一个障碍:重新设计 print_k 函数。

这是一个可以追溯到 1991 年的关键调试工具,最早是 Linus Torvalds 本人开发用于调试。然而,每当 Linux 程序调用 print_k 时就会产生硬延迟。这在实时系统中是不可接受的

Rostedt 解释道:“print_k 有千百种‘hacks’技巧,用来处理上千种不同的情况。每当我们将 print_k 修改为执行某种操作时,就会破坏这些情况之一。print_k 在调试中可以让开发者确切知道进程崩溃时对应的代码定位。如果对系统进行高强度测试,延迟主要在大约 30 微秒左右,但随后会突然变成 5 毫秒。这个延迟就是 print_k 消息。

经过大量工作,许多激烈的讨论,以及几次被拒绝的提案,今年初 Linux 内核社区终于在重新 print_k 上达成了一致。

随着 ‘PREEMPT_RT’ 补丁的合并,相信 Linux 将会在实时操作系统领域成为有力的竞争者。这不仅对实时系统制造商来说是一个胜利,也是所有 Linux 用户的胜利。

延伸阅读

  • Canonical 发布实时内核 (Real-time) 版 Ubuntu 24.04 LTS
  • Ubuntu 的实时内核 (Real-Time Kernel) 接近 GA 状态

相關推薦

2023-01-13

已接近 GA 状态。 据介绍,Ubuntu 实时内核应用了树外 PREEMPT_RT 补丁的 Linux 内核构建,专门为 x86_64 和 AArch64 硬件提供。Canonical 希望通过它进一步支持 Ubuntu 在电信/5G设备和其他具有低延迟要求的工业系统中的使用,为关键基础

2024-06-01

力。 实时内核版 Ubuntu 24.04 LTS 集成了 AMD64 和 ARM64 上的 PREEMPT_RT 补丁。作为事实上的 Linux 实时实现,PREEMPT_RT 通过修改现有内核代码来提高可预测性。通过对关键任务延迟要求的有时限响应,实时 Ubuntu 24.04 LTS 为从制造和汽车

2022-02-24

的主要维护者,其中最值得留意的就是实时 Linux 内核(PREEMPT_RT)相关的工作。 PREEMPT-RT 的核心思想是最小化内核中不可抢占部分的代码,同时将为支持抢占性必须要修改的代码量最小化。对临界区、中断处理函数、关中断等

2023-01-03

正式支持全志 D1 RISC-V 开发板),但对 D1/D1s 平台的 Linux 主线支持还未合并。 在 2022 年的最后关头,Allwinner D1/D1s 平台的 Linux 主线支持补丁发布了 v4 修订版。此系列补丁更新了构建配置、新的 DeviceTree 文件,同时测试并启用了

2023-02-16

应用程序延迟,进而提高性能。 该内核集成了 out-of-tree PREEMPT_RT 补丁,通过使用比 CFS 调度程序具有更高优先级的实时调度类,使其比主线 Linux 内核更具抢占性。Canonical 表示,实时 Ubuntu 内核旨在满足电信网络的 5G 转型需求,

2022-11-23

ng 的 CFI 支持。 早在十年前,在 Clang 能够构建 Linux 内核主线之前,已经有开发者为内核提交 GCC LTO 补丁,不过最终没有被合并,原因是当时 GCC 的 LTO 支持不够完善,未能说服 Linus。近年来,也有多家厂商发布了针对 Linux

2022-04-28

收到维护者的任何响应。因此,现在需要确定是否应该从主线中删除该驱动程序,或采取什么措施,使驱动程序进入维护状态。 从代码仓库的提交日志来看,自从去年合并到 Linux 5.15 以来,NTFS3 文件系统驱动程序确实没有进

2022-08-09

发布对 Gaudi2 的 Linux 驱动程序支持,基于“habanalabs”的主线 Linux 内核驱动程序。过去几周,Gaudi2 支持代码已在 Linux 6.0 的 char-misc 区域中排队等待,现在已合并到主线。 Habana Labs Guadi2 支持引领了这轮 char/misc 更改,新的头文件

2023-06-06

的 Linux 网络驱动开发社区之前进行早期审查。 Linux 内核主线现在仍在继续进行许多不同的 Rust 工作,而到目前为止合并的主要是基础设施、子系统抽象,同时在等待任何值得关注的 Rust 驱动 —— 比如 Apple DRM 内核驱动,为上

2022-11-08

的微软 hypervisor 支持可能会在 Linux 6.2 内核周期中合并进主线。  

2023-03-07

编译最新的内核代码。 现在 GCC 和 LLVM/Clang 仍然是构建主线 Linux 内核的编译器选项,GCC 一直是内核的不二之选,而在过去几年中,LLVM/Clang 主线也对 Linux 内核进行大量适配工作,还添加了许多针对内核构建的编译器功能。 基

2022-09-30

先回顾关于 Linux 内核支持 Rust 的消息。 2019 年,内核维护者 Greg 表示愿意接受用 Rust 开发 Linux 内核的驱动程序。 2020 年,Linus Torvalds 回应了针对 Linux 内核支持 Rust 的个人看法。他没有否定该提议,而是提倡在默认

2024-10-25

的 501(c)(6) 组织。Linus实际上对什么代码能够合并进入Linux主线代码具有相当的、可以历史追溯的责任,甚至可以说是“代码终身责任制”。

2023-04-18

PU 调度程序修复补丁,修复了自 2019 年底以来一直存在于主线内核中的“ CFS 调度器计算不平衡导致的整数溢出” 问题。 该问题最先在英特尔至强可扩展 Sapphire Rapids 服务器上发现,自 2019 年 10 月被报告以来,一直存在于