为什么主线内核中默认不包含 -rt (RT-Preempt) 内核补丁?

为什么主线内核中默认不包含 -rt (RT-Preempt) 内核补丁?

根据https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO,RT-Preempt 补丁将 Linux 转换为完全可抢占的内核。魔法是通过以下方式完成的:

  1. 通过使用 rtmutexes 重新实现,使内核锁定原语(使用自旋锁)可抢占。
  2. 由 ie spinlock_t 和 rwlock_t 保护的关键部分现在是可抢占的。使用 raw_spinlock_t 仍然可以创建不可抢占部分(在内核中)(与 spinlock_t 相同的 API)
  3. 为内核互斥锁、自旋锁和 rw_semaphores 实现优先级继承。
  4. 将中断处理程序转换为可抢占的内核线程:RT-Preempt 补丁在内核线程上下文中处理软中断处理程序,它由一个任务结构表示,就像一个常见的用户空间进程一样。然而,也可以在内核上下文中注册 IRQ。
  5. 将旧的 Linux 计时器 API 转换为用于高分辨率内核计时器的单独基础设施以及一个用于超时的基础设施,从而产生具有高分辨率的用户空间 POSIX 计时器。

实时处理而不是多任务处理有什么缺点吗?

答案1

-rt (RT-Preempt) 内核补丁不在内核主线中,因为 Linux 内核专注于通用内核的实现,而多任务处理是 Linus Torvalds 在开始实现它时的选择。

奇怪的是为什么内核是这样的。答案是,就是这样,因为Linus选择了这样。而他为什么选择这样的方式呢?因为他相信这是更好的方法,或者是可以实现的实施方法。

有些人认为别人的设计理念比实际的要好。但这是不可能的。每个人都有自己的看法,有时由于复杂性和可能性而无法进行基准比较。

Linus Torvalds 和 Andrew Tanenbaum 之间有关于整体内核与微内核的经典讨论。有很多论据可以说每一个都是更好的模型。

同样的,还有多任务和实时性。哪一个更好?每一种都有其自身的优点和缺点。

总而言之,主线内核并没有实时修补。简单的!这只是因为开发者的选择和信念!

答案2

这将基于意见,所以请尊重它的价值。

任何工程决策都是为了平衡权衡。 -rt 补丁是关于处理时序的确定性。这是为了确保事情会在正确的时间执行。记住那句老话:

实时是指在错误的时间给出的正确答案是错误的

但典型的用法与实时无关。 Vanilla Linux 在这方面对于典型用途来说已经足够好了,所以它不需要 -rt 补丁。使用 -rt 补丁,系统在典型使用情况下很可能会变慢。

由于 -rt 不会添加任何对典型用​​户有用的内容,会降低典型的工作负载性能,因此它不包含在通常的内核发行版中。

-rt 补丁肯定有用途,因此将其作为内核源代码的标准部分包含在内是非常好的。现在,这只是构建内核时要做出的选择(构建内核时,各个领域都有很多可用的选择)。如果您的工作负载通过 -rt 补丁得到改善,请选择启用该补丁的内核(或者根据您的具体情况自行构建)。

答案3

现在 Linus Torvald 最终决定将 preempt-rt 锁代码合并到主线内核中。 http://lkml.iu.edu/hypermail/linux/kernel/2108.3/05759.html

相关内容