cpu屏蔽和禁用内核中断

时间:2011-05-05 19:05:15

标签: c linux

在Linux下,什么(如果有的话)是禁用特定CPU内核上的所有中断,或者甚至是包含多个芯片的系统中单个芯片上的所有内核的缺点?在编写对延迟极其敏感的C程序时,我自然的冲动是将线程隔离在自己的核心上,并将所有其他任务移到单独的核心,我想知道这些权衡是什么。

2 个答案:

答案 0 :(得分:3)

主线Linux内核的设计目的是在CPU上长时间禁用所有IRQ。有许多内部内核函数需要这样的IRQ - RCU就是其中之一。 RCU停止可以并且将使系统的其余部分关闭,并且避免这种停顿可能(取决于所使用的RCU实现)涉及向所有CPU广播的IPI(处理器间中断)。

尽管如此,还是有实验性补丁来正确实现这种CPU隔离;例如:http://lwn.net/Articles/268711/ - 在禁用中断路由之前,它们会通过CPU脱机所需的所有内部回转(从内核其余部分的角度来看)。不过,这是一个相当古老的补丁系列;您可能希望联系补丁系列的开发人员,看看他们是否在某个地方有更新的版本,或者将这些补丁修改为当前版本的内核。 PREEMPT_RT人员也在考虑实施它 - 在https://rt.wiki.kernel.org/index.php/Main_Page查看他们的wiki(虽然它还没有实现)。祝你好运!

答案 1 :(得分:2)

要考虑的几件事情:

  1. 任何IRQ都会少运行一个处理器,这意味着您更有可能等待中断。显然,随着处理器数量的增加,这变得不那么重要了。
  2. 如果没有中断,强制进程放弃执行将会困难得多。如果它决定进入无限循环,则不能中断处理器以停止它。
  3. 如果您完全相信该过程将在合理的时间内放弃控制并且不担心中断排队,那么禁用中断可能是有益的。