1

我在安装了 ubuntu 的机器上使用了 linux 2.6.x 内核(只是提到了 Ubuntu,以防万一发生任何变化)。内核在具有 8 个内核的机器上运行。该机器也运行 openvz 但我认为这不会改变问题的上下文。

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

在机器上,有很多进程正在运行。内核如何处理这种情况?可能是硬 CPU 亲和进程运行速度较慢,因为它们在绑定到拥挤区域时受到影响?内核如何关心硬亲和性。

4

1 回答 1

2

从长远来看,调度程序的负载平衡代码会将更多未绑定的任务移动到其余的 CPU 上,以解决此任务绑定到前两个的问题。

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

当然,由于您的特定任务绑定到前两个 cpu,负载平衡将选择其他任务移动 - 所以从长远来看,您的绑定任务将“推出”足够多的其他非绑定任务到另一个 cpu 和将保持平衡。

于 2011-11-20T15:12:19.303 回答