历经20年,Linux主线内核终于合并史诗级‘PREEMPT_RT’补丁——最后障碍竟是Linus“一手造成”
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 用户的胜利。
相关来源
https://www.zdnet.com/article/20-years-later-real-time-linux-makes-it-to-the-kernel-really/
https://wiki.linuxfoundation.org/realtime/start
END
往期回顾
谷歌SRE工程师打拼9年:年薪超60万美元、钱赚够了、对技术不再那么热爱我有一个大胆的想法:呼吁Linus延迟退休!倒计时三年:国产数据库100%替代走到哪了?Zen浏览器——号称是“开源版Arc”、轻如鸿毛、快如闪电“神仙外企”、“IT养老院”前员工忆往昔:曾经是乌托邦、工资多得花不完只能买房