preempt_rt的缺点

时间:2012-04-06 10:59:36

标签: linux operating-system real-time xenomai preempt-rt

  

目标硬件平台具有有限的马力,和/或您想要的   实时工作,以尽可能小的开销   系统。这是双内核通常比原生内核更好的地方   先发制度。

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

Preempt_rt确实抢占了整个Linux。以何种方式抢占Linux会对系统造成负担?

与Xenomai相比,FAQ中讨论了preempt_rt。

2 个答案:

答案 0 :(得分:16)

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

CONFIG_PREEMPT_RT -
                此选项使得受自旋锁保护的区域之外的所有内核代码(由raw_spinlock_t创建)有资格获得更高优先级内核线程的非自愿抢占。由spinlock_t和rwlock_t创建的自旋锁,并且在启用此选项的情况下也可以抢占中断。使用此选项,最坏情况延迟降至(大约)单位数毫秒。

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

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

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


使用的技术术语说明

什么是延迟
在计算机系统上发出的请求和对相同需求的响应开始之间的时间被称为延迟或响应时间。
各种延迟:

  • 中断延​​迟
    生成中断和开始执行相应中断处理程序之间经过的时间 示例:当硬件设备执行任务时,它会生成中断。此中断包含有关要执行的任务以及要执行的中断处理程序的信息。然后,中断处理程序执行特定任务。
  • 安排延迟
    它是唤醒信号发生事件发生和内核调度程序有机会调度等待唤醒发生的线程(响应)之间的时间。调度延迟也称为调度延迟。
  • 最差延迟
    在计算机系统上发出的请求与对同一需求的响应开始之间可以存在的最长时间。

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

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

答案 1 :(得分:1)

添加到最高投票答案"优先级较低的任务将无法获得通过"

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

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

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