процессор простаивает для многопроцессорной стабилизации в определенный момент - PullRequest
0 голосов
/ 02 апреля 2012

Во-первых, извините за мой плохой английский.

Я использую инструмент mpstat на сервере Ubuntu для печати значения процента процессора, простаивающего каждую секунду.На стороне клиента я пытался отправить UDP-запрос / секунду, чтобы число запросов увеличивалось каждые 60 с.Сервер использует 8 ядер, и результатом mpstat является уменьшение состояния простоя (со 100% -> стабилизация в 80%).Я считаю, что подсчитать общее использование процессора составляет (100% минус состояние простоя).Программное обеспечение, работающее на сервере, запускается как ROOT (поэтому я не могу использовать параметр us% в mpstat)

Я думал, что это может быть так, как бы я ни увеличивал нагрузку, загрузка процессора будет максимальнойв состоянии ожидания около 80%.Это правильное предположение?Я пытался увидеть некоторые сведения о поведении ОС в отношении производительности, но не могу найти хорошего объяснения, почему после прыжка со 100% до 80% он стабилизируется независимо от количества загружаемых данных.Я предполагаю, что это потому, что механизм блокировки, который использует программное обеспечение на стороне сервера, таким образом, больше никакого увеличения не может быть достигнуто.

Был бы признателен за любые указатели ..

1 Ответ

0 голосов
/ 02 апреля 2012

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

Проверяли ли вы, чтодействительно ли количество отправленных пакетов все еще увеличивается во время выравнивания вашего профиля ЦП?Если причиной является сетевая карта, вы должны увидеть в какой-то момент, что отправляющая сторона не может отправлять больше пакетов за единицу времени, потому что получатель не может получить их так быстро.В краткосрочной перспективе это может быть сглажено путем буферизации, но не в долгосрочной перспективе.Одна возможность состоит в том, что, поскольку вы используете UDP, а не TCP, возможно, пакеты отбрасываются без уведомления, если сеть не может их обработать.Таким образом, с точки зрения отправителя похоже, что они отправляют много-много пакетов, но на самом деле только немногие приходят.Может быть, вы должны установить счетчик в своем приложении и отображать количество правильно принятых пакетов за единицу времени один раз каждые 10000 пакетов или около того.Затем вы узнаете, теряете ли вы пакеты из-за достижения пропускной способности сети (что объясняет ограничение использования ЦП).Если вы действительно правильно получаете эти пакеты, то причина, вероятно, в чем-то другом - но я бы сначала проверил это.

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