在尝试调度高速线程时,我注意到有时会有大周期(多个ms)没有调度线程。我想知道在我正在使用的配置中可以对调度程序执行此操作。
我确认在CPU1上只有像worker,timer等的东西。其他一切都在CPU0上。
我的主题是SCHED_DEADLINE(这是唯一一个这样安排的),周期为300us。我使用schedules_yield()在保留启动之前很久就释放了线程(只是一个测试循环)所以我确定它没有过度运行。
我得到的是一个几乎完美的3333Hz输出(通过o-scope),它一次被阻挡,一次超过15ms。我看过中断(除了定时器之外没有递增CPU),我已经禁用了NMI中断等等,没有找到干扰过程的运气。我不相信我完全理解什么可以优先考虑并导致调度程序跳过期间所以我希望有人可能有一个想法?
我认为它可能是磁盘IO,但这似乎与间隙不一致(有时它确实......)。 VGA /控制台使用似乎使它变得更糟,但即使没有使用,仍然会出现间隙。
是的,在你问之前......这只是一个实验,看看能否可靠地完成。我的实际代码在QNX上运行,在同一硬件上以此速率稳定运行。我正在尝试查看是否可以使用PREEMPT_RT将其移植到Debian。
谢谢!