Почему некоторые программы не сбалансированы по нагрузке даже при наличии нескольких ядер?
Пока VTune Analyzer работал на блейд-сервере с 8 ядрами, я наблюдал процент использования процессора, используя mpstat -P ALL 1
,
mpstat показал мне, что VTune занимает 100% одного ядра, тогда как все остальные ядра простаивают.
Почему это происходит? Разве ОС (RHEL Server 5.2) не должна автоматически распределять нагрузку между ядрами? То же самое произошло, когда я попытался запустить MATLAB (даже после включения поддержки многопоточности в настройках MATLAB).
PS: я разработчик. Не администратор системы. Поэтому чувствовал, что лучше спросить здесь, а не на сервере.
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);
Например.