当 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);
例如。