SCHED_FIFO线程冻结终端

时间:2017-11-05 11:53:29

标签: c++ pthreads scheduler

我有一个最小的六核3.5ghz机器,我不明白为什么SCHED_FIFO实时线程只固定到1个核心,冻结终端?如何避免这种情况,同时保持线程的实时行为而不在循环中使用sleep或阻塞它?为了简化我的问题,该线程尝试在无限循环中从非阻塞,无锁,并发队列中取消项。      内核在核心0上运行,所有其他核心都是免费的。所有其他线程和我的进程也是SCHED_OTHER相同的优先级,20。这是我需要一些高频率计算的超低延迟的唯一线程。启动应用程序后,似乎一切正常,但我的终端冻结(我通过ssh远程连接)。我能够看到创建的线程并从htop强制关闭我的应用程序。 RT线程似乎按预期分配100%的核心。当我杀死应用程序时,冻结的终端被释放,我可以再次使用。        看起来这个线程比所有内核中的其他所有内容都要高,但是我希望这个内核只是固定它。

谢谢

1 个答案:

答案 0 :(得分:0)

您好,您需要将内核与Linux调度程序隔离,以便它不会尝试分配优先级较低的任务,例如将终端运行到运行优先级较高的SCHED_ *作业的内核。通过将内核选项isolcpus = 1添加到grub.cfg(或使用的任何引导加载程序配置)中,可以实现隔离内核1的目的。

重新启动后,您可以通过运行dmesg |确认已成功隔离核心1。 grep异酚 并看到您的内核已使用该选项启动。

以下是有关isolcpus的更多信息: https://www.linuxtopia.org/online_books/linux_kernel/kernel_configuration/re46.html