preempt_rt的缺点

Aqu*_*irl 13 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.

Aqu*_*irl 18

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


所用技术术语的描述:

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

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

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

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