什么优先于SCHED_DEADLINE?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么优先于SCHED_DEADLINE?相关的知识,希望对你有一定的参考价值。

在尝试调度高速线程时,我注意到有时会有大周期(多个ms)没有调度线程。我想知道在我正在使用的配置中可以对调度程序执行此操作。

  • 带RT(i686)的最新Debian拉伸(稳定)
  • 双核英特尔(2237MHz)
  • PS2键盘和鼠标
  • 保留CPU 1(通过grub)
  • Taskset用于将我的测试过程放到核心1上
  • SMI禁用,speedtep禁用等(典型的RT Bios设置)
  • USB端口未禁用但未插入任何内容
  • IRQ余额已禁用

我确认在CPU1上只有像worker,timer等的东西。其他一切都在CPU0上。

我的主题是SCHED_DEADLINE(这是唯一一个这样安排的),周期为300us。我使用schedules_yield()在保留启动之前很久就释放了线程(只是一个测试循环)所以我确定它没有过度运行。

我得到的是一个几乎完美的3333Hz输出(通过o-scope),它一次被阻挡,一次超过15ms。我看过中断(除了定时器之外没有递增CPU),我已经禁用了NMI中断等等,没有找到干扰过程的运气。我不相信我完全理解什么可以优先考虑并导致调度程序跳过期间所以我希望有人可能有一个想法?

我认为它可能是磁盘IO,但这似乎与间隙不一致(有时它确实......)。 VGA /控制台使用似乎使它变得更糟,但即使没有使用,仍然会出现间隙。

是的,在你问之前......这只是一个实验,看看能否可靠地完成。我的实际代码在QNX上运行,在同一硬件上以此速率稳定运行。我正在尝试查看是否可以使用PREEMPT_RT将其移植到Debian。

谢谢!

答案

SCHED_DEADLINE任务比具有不同优先级的所有其他用户级任务具有更高的优先级(即SCHED_RRSCHED_FIFOSCHED_OTHER)。

请注意,由于内核4.16,可以使用SCHED_FLAG_DL_OVERRUNSIGXCPU信号上的用户级处理程序来检查超限(请参阅here)。

如果你需要检查CPU在做什么,ftrace可能是最好的方法。

以上是关于什么优先于SCHED_DEADLINE?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中使用 LocationManager 优先于提供者

为啥导入的类优先于捆绑类?

什么时候链表优先于列表?

为啥正文中的 javascript 函数优先于头部中的函数?

为啥跳过列表不优先于数据库的 B+-树?

为啥&&和||优先于 -a 和 -o