Disadvantage(s) of preempt_rt



目标硬件平台的马力有限,和/或您想要将尽可能小的开销放在您的系统这就是双内核通常比原生内核更好的地方抢占系统。

从这里:http://www.xenomai.org/index.php/Xenomai:Roadmap#Xenomai_3_FAQ

Preempt_rt确实抢占了整个Linux。抢占Linux以什么方式给系统带来负载?

常见问题解答中谈到了preempt_rt与Xenomai的比较。

CONFIG_PREEMPT_VOLUMENTARY-
该选项引入了对内核代码中长延迟最常见原因的检查,以便内核可以自愿将控制权交给等待执行的优先级更高的任务。据说这种选择在很大程度上减少了长延迟的发生,但仍然没有完全消除。

CONFIG_PREEMPT_RT-
此选项会使spinlock保护区域(由raw_spinlock_t创建)之外的所有内核代码都有资格由优先级较高的内核线程进行非自愿抢占。由spinlock_t和rwlock_t创建的Spinlocks,以及启用此选项后中断也可抢占。使用此选项,最坏情况下的延迟将降至(大约)个位数毫秒。

缺点-
只有在执行用户空间代码时,普通的Linux内核才允许更高优先级的任务抢占任务。

为了减少延迟,CONFIG_PREEMPT_RT补丁迫使内核在更高优先级内核任务到来时非自愿地抢占手头的任务。这势必会导致系统的总体吞吐量降低,因为会有几个上下文切换,而且优先级较低的任务也不会有太多机会通过。

来源:https://rt.wiki.kernel.org/index.php/Frequently_Asked_Questions


所用技术术语的描述

什么是延迟
从计算机系统上发出的需求到对同一需求开始响应之间的时间称为延迟或响应时间
延迟类型:

  • 中断延迟
    从产生中断到开始执行相应的中断处理程序之间经过的时间
    示例:当硬件设备执行任务时,它会生成一个中断。该中断具有关于要执行的任务和关于要执行中断处理程序的信息。然后中断处理程序执行特定的任务
  • 计划延迟
    这是从发出事件发生的唤醒信号到内核调度器有机会调度等待唤醒发生的线程(响应)之间的时间。调度延迟也称为调度延迟
  • 最坏情况延迟
    在计算机系统上发布的需求和对同一需求的响应开始之间的最长时间

什么是吞吐量
计算机在给定的时间段内可以完成的工作量称为吞吐量。

什么是上下文切换
上下文切换是CPU从一个进程/线程切换到另一个进程或线程。上下文切换只能在内核模式下发生。这是保存进程的当前执行状态(用于以后恢复执行),并加载新进程/线程的保存状态以供执行的过程。

将"优先级较低的任务不会有太多机会通过"添加到最高投票答案中

这就是重点(尽管在4+核心系统上,只要禁止这些低优先级任务做会干扰关键任务的事情,它们仍然可以运行——这就是确保所有连接的外围设备在运行关键线程的应用程序想要访问它们时不被阻止的重要之处)。关键的一点(例如,如果考虑开发一个有用的系统来及时处理外部输入,或者用实时数据(而不是模型)测试数据转换的行为)是有一种方法来告诉内核时间关键输入来自哪里。

当前Windows系统的问题是,你可能是一个"严肃的游戏玩家或严肃的音乐家",会注意到150微秒的抖动。如果你无法指定键盘、鼠标或其他人机界面设备应优先处理,那么所有类型的"窗口更新"等都可以来做它们的事情,这可能会触发USB控制器中的一些活动,这些活动的优先级高于与输入相关的线程。

我读到一个案例,通过添加第二个USB控制器来解决音频中的故障,除了输入设备之外,控制器上什么都没有。在便携式设置中,您实际上需要Thunderbolt PCIe直通来添加一个专用集线器(或fpga),该集线器可以与驱动程序一起覆盖系统上的所有其他内容。这就是为什么市场上没有多少USB产品能为音乐家提供足够好的性能。(2 ms往返延迟,全天最大抖动150微秒,无中断)

最新更新