Использование ЦП рабочими процессами на многоядерном сервере

Установка

Мы написали службу Windows, которая запускает отдельные рабочие процессы для выполнения различных задач, интенсивно использующих процессор. Сервер и рабочие общаются через именованные каналы IPC.

В настоящее время мы создаем рабочих с помощью простого Process.Start() вызова.

Когда мы запускаем несколько рабочих процессов на двухъядерной серверной виртуальной машине с довольно низкими характеристиками, диспетчер задач сообщает нам, что каждый рабочий использует примерно 2–3% ЦП.

Однако (вот что нас смущает), когда мы выполняем тот же тест на очень мощном восьмиъядерном сервере, мы все равно видим, что каждый рабочий процесс использует 2–3% ЦП. Теперь, когда доступно больше «мощности» ЦП, я ожидал, что каждый рабочий будет использовать гораздо меньший процент ЦП.

Это также означает, что на маломощном сервере мы загружаем 100% ЦП после создания 30-ти рабочих процессов. Но на мощном процессоре мы достигли того же предела после того же количества рабочих. Мы ожидаем, что сможем запустить гораздо больше рабочих.

Проблема

Итак, у меня есть пара вопросов:

  • Не понимаем ли мы значения, которые нам сообщает Диспетчер задач? Значение CPU% - это количество процессорного времени, потребляемого всеми ядрами? Если да, то почему это одинаково на совершенно другом оборудовании?

  • Должны ли мы делать что-то особенное / отличное для правильного распределения наших рабочих процессов по нескольким ядрам? На данный момент процессы имеют привязку к процессору по умолчанию (поэтому они могут работать на любом ядре).

Любая помощь, совет, ссылки будут очень благодарны.


Дополнительная информация для людей, оставивших комментарии:

Я не упоминал об этом изначально, поскольку не обязательно хотел усложнять свой вопрос, но наши рабочие процессы выполняют транскодирование видео потоков видео в реальном времени. Таким образом, ни один работник никогда не «завершает» свою задачу - он просто работает, пока подключен клиент.

По сути:

  • Клиент подключается к серверу
  • Сервер запускает рабочий процесс, который подключается к удаленному видеопотоку.
  • Когда видео получено из указанного видеопотока, работник перекодирует его и отправляет перекодированное видео обратно клиенту.

Не уверены, что это поможет с другими предложениями? Спасибо за все комментарии.


person James Frost    schedule 22.03.2012    source источник
comment
ваши задачи связаны с процессором? Я ожидаю, что задача, связанная с ЦП, будет потреблять большую часть 1 ядра столько, сколько занимает задача. т.е. около 50% и 12,5% соответственно.   -  person Jodrell    schedule 22.03.2012
comment
Отличается ли общая пропускная способность двух систем? (Не очевидное использование ЦП, а общий объем работы, выполненной за заданное время настенных часов)   -  person Reed Copsey    schedule 22.03.2012
comment
перефразируя @Reed Copsey, большая ли коробка закрывается быстрее?   -  person Jodrell    schedule 22.03.2012
comment
Еще одна приятная мысль: вы пробовали это с 30 рабочими?   -  person gbianchi    schedule 22.03.2012
comment
Может быть, глупый вопрос, но отличаются ли скорости / архитектуры процессоров? Если двухъядерный компьютер значительно быстрее, имеет доступ к памяти с меньшей задержкой, имеет больший кеш и т. Д., То вполне возможно, что он на самом деле такой же производительный, как и 8-ядерный.   -  person Chris Shain    schedule 22.03.2012


Ответы (1)


Тот факт, что процессы используют 2–3% ЦП, говорит о том, что ваш процесс не привязан к ЦП, а скорее всего будет привязан к вводу-выводу или будет иметь какое-то другое ограничение.

Операция ввода-вывода на двухъядерном сервере ВМ, вероятно, немного медленнее, чем на вашем 8-ядерном сервере, что, в свою очередь, ограничивает его поведение. Может быть, поэтому очевидное использование ЦП такое же, хотя я подозреваю, что полный сервер, скорее всего, завершит задачу раньше в целом.

person Reed Copsey    schedule 22.03.2012
comment
Вы очень хорошо замечаете, что ЦП или ограничение ввода-вывода. Даже если это так, разве вы не ожидаете, что загрузка ЦП будет ниже в системе с большим количеством ядер? (потому что это процентное распределение по большому количеству ядер) - person James Frost; 23.03.2012
comment
@JamesFrost Не обязательно - система с большим количеством ядер может иметь более быстрый ввод-вывод, что, в свою очередь, снижает эффект дросселирования ввода-вывода на ЦП. Если ввод-вывод в этой системе выполняется быстрее (поскольку это не виртуальная машина), это может компенсировать дополнительные ядра. Вот почему я спросил об общей пропускной способности ... - person Reed Copsey; 23.03.2012