Три серверных процесса потребляют не более 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
выплюнет все ядра.