Загрузка процессора и потоки - PullRequest
4 голосов
/ 27 февраля 2011

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

Если посмотреть на загрузку ЦП на коробке, она никогда не превышает 33%.Теперь у нас появился новый клиент, по крайней мере, в два раза превышающий объем существующего клиента.Некоторые из нас утверждают, что, поскольку загрузка процессора намного ниже максимальной загрузки, мы должны использовать ту же конфигурацию.

Другие утверждают, что не существует прямой корреляции между использованием ЦП и скоростью обработки транзакций, и, поскольку логика базового программного модуля основана на количестве доступных ядер, то имеет смысл получить коробку с пропорционально большейЯдра доступны для нового клиента для размещения увеличенного объема трафика.

Кто-нибудь имеет представление о том, кто прав в этом случае?

Спасибо,

1 Ответ

2 голосов
/ 16 июля 2011

Чтобы определить оптимальную конфигурацию для вашего нового клиента, понимание причины низкой загрузки ЦП имеет первостепенное значение.

Очень вероятно, что причина заключается в одном из следующих:

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

  • Ваш процесс ограничен дисковым вводом / выводом.Может помочь использование более быстрых подключений к диску (SATA и т. Д.) И / или обновление до SSD, но большая мощность процессора не поможет.

  • Ваш процесс ограничен конфликтом синхронизации.В этом случае добавление большего количества потоков для большего количества ядер может даже привести к обратным результатам.Редизайн вашего алгоритма может помочь в этом случае.

Сказав это, я также видел ситуации, когда процессы, которые однозначно связаны с ЦП, не достигают 100% использования ЦП на современных процессорах (Core i7и т. д.), поскольку в некоторых случаях, связанных с турбонаддувом, диспетчер задач будет показывать менее 100%.

Как уже говорилось в 9000, вам необходимо выяснить, какие у вас узкие места, когда они находятся под нагрузкой.Perfmon может предоставить достаточно данных для выяснения.

Еще одна запоздалая мысль: вы можете ограничить свой процесс на существующей машине до части ядер (но все же не менее 30%, чтобы теоретически ЦП не стал узким местом).из-за этого ограничения) и проверьте, не ухудшается ли общая пропускная способность.Если этого не произойдет, добавление большего количества ядер не приведет к повышению производительности.

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