Установка
Мы написали службу Windows, которая запускает отдельные рабочие процессы для выполнения различных задач, интенсивно использующих процессор. Сервер и рабочие общаются через именованные каналы IPC.
В настоящее время мы создаем рабочих с помощью простого Process.Start()
вызова.
Когда мы запускаем несколько рабочих процессов на двухъядерной серверной виртуальной машине с довольно низкими характеристиками, диспетчер задач сообщает нам, что каждый рабочий использует примерно 2–3% ЦП.
Однако (вот что нас смущает), когда мы выполняем тот же тест на очень мощном восьмиъядерном сервере, мы все равно видим, что каждый рабочий процесс использует 2–3% ЦП. Теперь, когда доступно больше «мощности» ЦП, я ожидал, что каждый рабочий будет использовать гораздо меньший процент ЦП.
Это также означает, что на маломощном сервере мы загружаем 100% ЦП после создания 30-ти рабочих процессов. Но на мощном процессоре мы достигли того же предела после того же количества рабочих. Мы ожидаем, что сможем запустить гораздо больше рабочих.
Проблема
Итак, у меня есть пара вопросов:
Не понимаем ли мы значения, которые нам сообщает Диспетчер задач? Значение CPU% - это количество процессорного времени, потребляемого всеми ядрами? Если да, то почему это одинаково на совершенно другом оборудовании?
Должны ли мы делать что-то особенное / отличное для правильного распределения наших рабочих процессов по нескольким ядрам? На данный момент процессы имеют привязку к процессору по умолчанию (поэтому они могут работать на любом ядре).
Любая помощь, совет, ссылки будут очень благодарны.
Дополнительная информация для людей, оставивших комментарии:
Я не упоминал об этом изначально, поскольку не обязательно хотел усложнять свой вопрос, но наши рабочие процессы выполняют транскодирование видео потоков видео в реальном времени. Таким образом, ни один работник никогда не «завершает» свою задачу - он просто работает, пока подключен клиент.
По сути:
- Клиент подключается к серверу
- Сервер запускает рабочий процесс, который подключается к удаленному видеопотоку.
- Когда видео получено из указанного видеопотока, работник перекодирует его и отправляет перекодированное видео обратно клиенту.
Не уверены, что это поможет с другими предложениями? Спасибо за все комментарии.