在尝试调度高速线程时,我注意到有时有时会有很大的时间段(数毫秒)未调度该线程。我想知道在我正在使用的配置中,什么可以对调度程序执行此操作。
我确认只有CPU1上有工作程序,计时器等内容。其他所有内容都在CPU0上。
我的线程是SCHED_DEADLINE(唯一这样安排的线程),周期为300us。我使用schedules_yield()释放线程,直到预留时间很久(只是一个测试循环),所以我确定它不会过度运行。
我得到的是一个几乎完美的3333Hz输出(通过一个o形示波器),它一次又一次被阻塞15ms以上。我已经研究了中断(除了计时器之外,该CPU上没有递增),我禁用了NMI中断,依此类推,因此无法找到干扰的过程。我不相信我能完全理解哪些优先事项会导致调度程序跳过句号,所以我希望有人可能有一个主意?
我认为这可能是磁盘IO,但这似乎与差距不符(有时确实如此)。 VGA /控制台的使用似乎会使情况变得更糟,但是即使不使用VGA,也仍然会出现差距。
是的,在您提出问题之前...。这只是一个实验,以查看是否可以可靠地完成此操作。我的实际代码在QNX上运行,在相同的硬件上以这种速率稳定运行。我正在尝试查看是否可以使用PREEMPT_RT将其移植到Debian。
谢谢!