为什么有些软件即使有多个核心也无法实现负载平衡?

为什么有些软件即使有多个核心也无法实现负载平衡?

当 VTune Analyzer 在具有 8 核的刀片服务器上运行时,我使用 观察了 CPU 使用率百分比mpstat -P ALL 1

mpstat 显示 VTune 占用了单个核心的 100%,而所有其他核心都处于空闲状态。

为什么会发生这种情况?操作系统(RHEL Server 5.2)不应该自动在核心之间分配负载吗?当我尝试运行 MATLAB 时也发生了同样的情况(即使在 MATLAB 设置中启用了多线程支持)。

附言:我是一名开发人员。不是系统管理员。所以觉得在这里问比在 serverfault 上问更好。

答案1

操作系统分发线程跨核心。

一个进程由一个或多个线程组成。

只有一个线程的进程只能在一个核心上运行。具有 2 个线程的进程可以在 1 个核心或 2 个核心上运行。具有 500 个线程的进程可以在您拥有的任意核心上运行(例如,四核处理器每个核心 125 个线程)。

所以一切都取决于过程。

这将只能在一个核心上运行:

for(i=0; i<1000; i++)
{
    do_something_intensive();
}

而这对核心更友好:

pthread_create(pth1,&do_something_intensive,attr,&args);
pthread_create(pth1,&do_something_else_intensive,attr,&args);

例如。

相关内容