Linux 内核将支持开箱即用的实时调度特性

图片

作者 | Sergio De Simone
译者 | 王强
策划 | Tina

Linux 6.12 将在其主线中正式包含对实时调度特性的支持,这要归功于一项 PR,该 PR 在所有受支持的架构上启用了 PREEMPT_RT。虽然它针对的是需要确定性时间保证的应用程序,如航空电子、机器人、汽车和通信应用,但它也可以改善桌面端的用户体验。

PREEMPT_RT 自 2005 年开始开发,是一组针对 Linux 的补丁,实现了硬实时和软实时计算功能。它使 Linux 内核完全可抢占,并能够在 x86、x86_64、RISC-V 和 ARM64 架构上以确定的时间和低延迟响应外部事件。

虽然 PREEMPT_RT 已经可以单独用于修补 Linux 内核,但它在主线中的引入意味着现在只需在编译时启用 CONFIG_PREEMPT* 选项即可构建实时 Linux 内核。但最重要的是,将 PREEMPT_RT 集成到主线也意味着要完善许多功能,才能使其在大多数情况下都能正常运行。

一项重要的工作涉及 printk 函数,该函数对于内核开发至关重要,但尚未完全为实时做好准备。该函数由 Linus Torvalds 开发,可确保开发人员准确知道崩溃发生的位置。但是,它的旧实现引入了一些延迟,影响了低延迟目标的达成,不过这一延迟现在已经被移除了。

在 PREEMPT_RT 成为内核的一部分之前,运行实时 Linux 的最简单方法是使用 Ubuntu Pro,个人和小规模商业用途可免费使用该版本,但超过五台机器则需付费。

需要强调的是,实时与性能无关,而是与可预测(即确定性)任务抢占有关,有些应用程序依赖某些在外部事件发生后的一定时间内必须发生的操作,实时性对它们非常重要。普通的 Linux 内核经过优化,可最大程度地提高硬件利用率并公平地分配所有进程的时间,但也可以对其进行配置,从而最小化能耗或适应特定任务的要求(又称利用率限制)。

Hacker News 用户 femto 称,运行实时 Linux 可以将每个 CPU 核心的中断延迟从两位数毫秒降低到个位数毫秒。不过,这要求你同时运行具有实时策略(SCHED_FIFO 或 SCHED_RR)的调度程序,以防止触控板触摸等硬件事件妨碍实时任务(例如播放音频或 3D 游戏)。

其他人还提到,使用实时内核似乎可以改善用户体验,避免 Gnome 偶尔出现死机,并且可以在运行 Chrome 和游戏时合成更多乐器。Mixxx 音频播放器还建议启用实时调度(以及其他功能),以减少音频延迟并避免出现可听见的故障。

Linux 6.12 的最终版本预计将于 2024 年 11 月中旬或 11 月底发布,而候选版本 2 目前可供测试。

声明:本文由 InfoQ 翻译,未经许可禁止转载。