akp*_*akp 49 c linux cpu scheduling linux-kernel
在Linux中是否有任何方法可以将一个CPU内核分配给特定的给定进程,并且不应该在此内核上安排任何其他进程或中断处理程序?
我已经阅读了Linux 绑定进程中使用taskset实用程序对CPU的进程关联,但这并没有解决我的问题,因为它只是试图将给定的进程关注到该核心,但是可能可以在此核心上安排其他进程,这是我想避免的.
我们应该更改内核代码以进行调度吗?
gby*_*gby 61
就在这里.事实上,有两种不同的方法可以做到这一点:-)
现在,实现目标的最佳方法是执行以下操作:
在引导期间从引导加载程序将参数isolcpus = [cpu_number]添加到Linux内核命令行.这将指示Linux调度程序不在该CPU上运行任何常规任务,除非使用cpu affinity特别请求.
使用IRQ亲和性设置其他CPU来处理所有中断,以便隔离的CPU不会收到任何中断.
使用CPU关联性将特定任务修复到隔离的CPU.
这将为您提供Linux在CPU隔离方面所能提供的最佳功能,而无需使用树外和开发中的补丁.
你的任务仍然会得到从时间的Linux代码中断时,包括其他的任务 - 如定时器节拍中断和调度程序代码,从的IPI其它CPU之类的东西的工作队列内核线程,虽然中断应该是相当小.
有关(几乎)完整的中断源列表,请访问我的页面https://github.com/gby/linux/wiki
另一种方法是使用cpusets这是方式更优雅和动感,但在这个时间点(无例如定时器的迁移)的一些弱点遭受这让我推荐老,原油,但有效isolcpus参数.
请注意,Linux社区目前正在开展工作以解决所有这些问题,并提供更多隔离.
将整个CPU核心专用于特定程序
虽然taskset允许将特定程序分配给某些CPU,但这并不意味着不会在这些CPU上安排其他程序或进程.如果要防止这种情况并将整个CPU内核专用于特定程序,可以使用"isolcpus"内核参数,该参数允许您在引导期间保留CPU内核.
在引导期间或GRUB配置文件中将内核参数"isolcpus ="添加到引导加载程序.然后Linux调度程序不会在保留的CPU核心上安排任何常规进程,除非特别请求使用taskset.例如,要保留CPU核心0和1,请添加"isolcpus = 0,1"内核参数.在启动时,然后使用taskset将保留的CPU内核安全地分配给您的程序.
来源(S)
| 归档时间: |
|
| 查看次数: |
41625 次 |
| 最近记录: |