在Linux下,禁用特定CPU内核上的所有中断,甚至包含多个芯片的系统中的单个芯片上的所有内核,都有什么缺点? 在编写对延迟极其敏感的C程序时,我自然要求将自己的核心线程分离出来,并将所有其他任务移动到独立的核心中,我想知道什么是权衡。
主要的Linux内核并不是为了在一个CPU上长时间禁用所有的IRQ而设计的。 有许多需要这种IRQ的内核函数–RRC就是其中之一。 一个RCU暂停可以并且将会使系统的其余部分停止,并且避免这样的暂停可能(取决于使用中的RCU实现)涉及广播给所有CPU的IPI(处理器间中断)。
也就是说,有一些实验性的补丁可以正确实现CPU的隔离。 例如: http : //lwn.net/Articles/268711/ – 在禁用中断路由之前,这些过程会经历使CPU离线(从内核其余部分的角度来看)所需的所有内部回转。 虽然这是一个相当古老的补丁系列, 您可能需要联系补丁程序系列的开发人员,看他们是否在某个地方有新版本,或者将这些补丁修改为当前版本的内核。 PREEMPT_RT的人也正在考虑实施它 – 检查他们的维基在https://rt.wiki.kernel.org/index.php/Main_Page (虽然尚未实施)。 祝你好运!
有几件事要考虑:
如果您完全相信这个过程会在合理的时间内放弃控制权,并且不担心中断队列,那么禁用中断可能是有益的。