16

目标硬件平台的马力有限,和/或您希望实时作业在您的系统上施加尽可能小的开销。这就是双内核通常比原生抢占系统更好的地方。

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

Preempt_rt 确实抢占了整个 Linux。抢占 Linux 以何种方式给系统增加负载?

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

4

2 回答 2

20

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 从一个进程/线程切换到另一个。上下文切换只能在内核模式下发生。这是保存进程当前执行状态(用于稍后恢复执行),并加载新进程/线程的保存状态以执行的过程。

于 2012-04-09T10:57:56.073 回答
4

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

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

当前的问题,例如。Windows 系统是你可能是一个“严肃的游戏玩家或严肃的音乐家”,会注意到诸如 150 微秒的抖动之类的事情。如果您无法指定键盘、鼠标或其他人机界面设备应被视为关键优先级,那么所有类型的“Windows 更新”等都可能出现并执行其操作,这反过来可能会触发 USB 中的某些活动控制器具有比与执行输入相关的线程更高的优先级。

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

于 2018-05-04T23:57:46.013 回答