Три серверных процесса потребляют не более 50% двухъядерного процессора

У меня есть три процесса, работающие на процессоре Intel Core 2 Duo. Наблюдая за выводом top и графиками загрузки ЦП (отрисованными MRTG, сбор данных через SNMP), я вижу, что загрузка ЦП никогда не превышает 50%, и, большую часть дня, когда эти процессы заняты, загрузка ЦП имеет потолок на 50 %. Я имею в виду, загрузка процессора увеличивается до 50% с утра и остается там до позднего вечера.

Моей первой мыслью было, что на 100% использовалось только одно ядро, что давало 50% обоих процессоров. Но, поскольку запущены три процесса и "сверху", я вижу, что загружаются оба ядра, так что это не так. schedtool показывает, что сродство процессора к этим трем процессам по умолчанию составляет 0x03, что позволяет им использовать оба ядра. Если я принудительно заставлю один процесс использовать одно ядро ​​(schedtool -a 0x01), а два других - второму (schedtool -a 0x02), кумулятивное использование превысит 50 %.

Почему три процесса потребляют только 50% двух ядер? Почему принудительное использование их для разных процессоров позволяет увеличить их использование? Есть намеки?

PS Рассматриваемые процессы - это серверы Counter-Strike.

1 ответ

С привязкой к процессору ОС может избежать некоторых переключений контекста и привести к более высокой загрузке процессора. Я сомневаюсь, что выигрыш был бы значительным, если у вас нет высокой сетевой или дисковой IO.

Также top суммирует данные по нескольким ядрам, и я видел странные ошибки округления / математики. Вверху попробуйте просмотреть каждое ядро ​​(нажмите 1, когда вверху). Это даст вам лучшее представление о том, как используется каждый процессор.

От мужчины

Доля задачи, затраченная с момента последнего обновления экрана, в процентах от общего времени ЦП. В реальной среде SMP, если "Режим Irix" выключен, top будет работать в "Режиме Solaris", где загрузка ЦП задачи будет разделена на общее количество ЦП. Вы можете переключать режимы "Irix/Solaris" с помощью интерактивной команды "I".

Возможно, стоит проверить использование sysstat для более подробной информации о показателях ЦП. Команда mpstat поможет вам здесь:

mpstat -P ALL 
01:06:12 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
01:06:12 PM  all    0.06    0.00    0.02    1.84    0.00    0.00    0.03   98.05     96.39
01:06:12 PM    0    0.06    0.00    0.02    1.84    0.00    0.00    0.02   98.05     50.98
01:06:12 PM    1    0.58    0.00    0.67    1.81    0.00    0.00    4.10   92.85     50.98
01:06:12 PM    2    0.35    0.00    0.73    1.85    0.00    0.00    4.10   92.98     50.98
01:06:12 PM    3    0.12    0.00    0.38    1.06    0.00    0.00    4.09   94.35     50.98

выплюнет все ядра.

Другие вопросы по тегам