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