cpumask如何影响linux内核中其他进程的调度?

时间:2011-11-20 11:47:56

标签: linux-kernel scheduling affinity

我在我的机器上使用了linux 2.6.x内核,安装了ubuntu(如果有任何改动,就会提到Ubuntu)。内核在具有8个内核的计算机上运行。该机器也运行openvz但我不认为这确实改变了问题的上下文。

我安装的软件只允许使用两个CPU,并且它在前两个CPU(cpumask 3)上设置硬CPU亲和力。我问自己,其他进程的调度是如何受此影响的。我想我读了一些关于它的东西,但我现在假设这些进程可能会附加到第一个CPU上。并且内核会尝试始终将进程保留在同一个CPU上,以避免缓存失效。

在机器上运行了很多进程。内核如何处理这种情况?可能是硬CPU兼容性程序运行得更慢,因为它们受到影响而被绑定到拥挤的区域?内核如何关心硬性关系。

1 个答案:

答案 0 :(得分:2)

从长远来看,将会发生的事情是,调度程序的负载平衡代码会将更多未绑定的任务移动到其余的CPU,以便将此任务绑定到前两个任务。

它的工作方式是每个任务都从创建它的CPU开始,在微观层面上,Linux任务调度程序在每个CPU上执行调度决策而不考虑其他任务。但随后会有更多的宏级进程迁移负载平衡代码,它们将逐步说:“这个cpu上的运行队列(等待调度的进程列表)比cpu长,让我们移动一些以平衡负载”。

当然,由于您的特定任务绑定到前两个cpu,因此负载平衡将选择要移动的其他任务 - 因此您的绑定任务将在长时间内“推出”足够的其他非绑定任务到其他的cpus和余额将被保留。