问题 preempt_rt [关闭]的缺点


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

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

Preempt_rt确实抢占了整个Linux。以何种方式抢占Linux会给系统带来负担?

与Xenomai相比,那里的FAQ讨论了preempt_rt。


8965
2018-04-06 10:59


起源

或者,您可以查看此演示文稿: slideshare.net/jserv/realtime-linux 更长的描述。它涵盖了有关实时系统的一般概念,Linux内核如何用于抢占,Linux中的延迟,PREEMPT_RT和Xenomai,作为双内核方法的实时扩展。 - jserv


答案:


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


所用技术术语的描述


16
2018-04-09 10:57



本答案中描述的选项“CONFIG_PREEMPT_RT”与源URL中给出的“CONFIG_PREEMPT”的描述相匹配。事实上,我在FAQ中读过“如果实时Linux应用程序需要的延迟小于一位数毫秒,强烈建议使用CONFIG_PREEMPT_RT补丁。” - aleixrocks


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

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

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

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


0
2018-05-04 23:57