在Linux下,禁用特定CPU内核上的所有中断,甚至包含多个芯片的系统中的单个芯片上的所有内核的缺点是什么(如果有)?在编写一个对延迟极其敏感的C程序时,我的迫切愿望是将自己的核心线程分离出来,并将所有其他任务移至独立的核心,我想知道什么是权衡。cpu屏蔽和禁用内核中断
回答
主线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(尽管它尚未实施)。祝你好运!
感谢您的参考! – 2011-05-10 16:00:03
几件事情要考虑:
- 任何的IRQ将少了一个处理器上运行,这意味着你更可能有中断等待。显然这随着处理器数量的增长而变小。
- 没有中断,强制流程放弃执行将会困难得多。如果它决定进入无限循环,则不能中断处理器来停止它。
如果您完全相信进程将在合理的时间内放弃控制并且不担心中断排队,那么禁用中断可能会有所帮助。
我没有想过过程获得处理器控制权的可能性,并且由于错误而不放弃它,非常感谢您指出了这一点! – 2011-05-10 15:59:35
如果确实如此,当活动线程尝试访问无效地址并发生页面错误时会发生什么?它怎么会停不下来? – Syncopated 2012-12-16 18:42:49
@Syncopated没有办法确保会发生。如果它运行'while(1){}'会怎么样?这可以编码为单个指令并且不进行数据访问,因此它一旦启动就不会导致页面错误。 – ughoavgfhw 2012-12-16 19:40:12
- 1. Extjs在IE和FF中屏蔽和取消屏蔽
- 2. cpu中的内核和线程
- 3. 如何禁用/启用CPU内核*不* root访问权限
- 4. 如何中断在多核ARM CPU
- 5. TreePanel中屏蔽
- 6. 内核irq禁用
- 7. CPU调度和内核级线程
- 8. 多核和CPU使用
- 9. 游戏屏蔽。模拟过程中出错。 CPU限制达到
- 10. 用PHP屏蔽URL
- 11. np.where和屏蔽数组
- 12. .Net 4不断浪费StrongNameSignatureVerification上的一个CPU内核
- 13. ptrace会中断CPU上下文,用户空间堆栈还是内核堆栈?
- 14. linux内核中断劫持
- 15. 在内核调用中使用断言
- 16. 禁用内核跟踪器
- 17. 限制Caffe CPU内核使用率?
- 18. 内核/用户模式下的CPU
- 19. 使用附加内核的CPU性能
- 20. 使用javac多个CPU内核
- 21. 使用clusterize和屏蔽UI网格
- 22. 查找linux内核中CPU的数量
- 23. 屏蔽UIWebView
- 24. 如何屏蔽
- 25. ImageMagick的屏蔽
- 26. ncurses在控制台屏幕上禁用内核消息?
- 27. SysTick中断挂起但不会执行调试中断屏蔽问题?
- 28. 如何屏蔽WPF Wrappanel的内容?
- 29. 屏蔽图像时增加内存
- 30. 屏蔽UI XML内联编辑
我想在你的程序中,你不希望任何来自periferies的输入或抛出异常的权利? – Pyjong 2011-05-05 19:15:08