Загрузка ЦП рабочих процессов на многоядерном сервере - PullRequest
2 голосов
/ 22 марта 2012

Настройка

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

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

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

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

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

Проблема

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

  • Неужели мы не понимаем?значения, о которых нам говорит диспетчер задач?% ЦП - это количество процессорного времени, потребляемого всеми ядрами?Если да, то почему это одинаково на совершенно другом оборудовании?

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

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


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

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

По существу:

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

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

1 Ответ

1 голос
/ 22 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...