У меня есть веб-сервер с 4 процессорами, он как-то периодически сталкивался с потерей пакетов. Наконец, мы переместили все приложения и данные в другую систему с 8 процессорами. Мы сделали это, потому что не обнаружили ничего неправильного, кроме одного явления, когда средняя загрузка ЦП постоянно увеличивалась до 80%.
Во время устранения неполадок. Я проверил файл / proc / interrupts, и прерывания были зафиксированы на CPU 0. Также была выдана команда «mpstat -p ALL», чтобы увидеть использование каждого CPU. И ни один из них не был на 100% на момент проверки.
При этом только средняя загрузка ЦП повысилась до 100%, но у любого из них может быть скачок до 100%, поскольку мы не использовали систему мониторинга для сбора данных об использовании ЦП на регулярной основе. Вместо этого это было просто проверено с помощью команды. После перехода на новую систему с большим количеством процессоров потери пакетов больше не было. У меня возникают следующие вопросы:
Потеря пакетов была решена после добавления большего количества ЦП для системы, потому что, чем больше ЦП имеет система, тем меньше вероятность использования ЦП, занятого прерыванием от сетевой карты, достигает 100%?
Приводит ли добавление дополнительных процессоров к системе к меньшему переключению контекста и, следовательно, к меньшим накладным расходам системы?
Если загрузка одного из ЦП в четырехъядерной системе оказывается 100%, и это фиксируется для прерывания прерывания от сетевой карты. Запланирует ли ядро другой процессор, который не очень занят, для обработки прерывания сетевой карты вместо него?
Обычно нет. Прерывание в любом случае получает приоритет, поэтому нет необходимости перемещать прерывание сетевой карты.
Потеря пакетов была решена после добавления большего количества ЦП для системы, потому что чем больше ЦП в системе, тем меньше вероятность использования ЦП, занятого прерыванием сетевой карты, достигает 100%?
Нет. Какое это имеет значение? Прерывание, как следует из названия, прерывает CPU и заставляет его обслуживать прерывание.
Приводит ли добавление дополнительных процессоров к системе к меньшему переключению контекста и, следовательно, к меньшим накладным расходам системы?
Может, но вряд ли это будет иметь значение. Чем больше процессоров, тем меньше количество невынужденных переключений контекста (тех, которые система решает принимать, даже если это не обязательно), и никто не проектирует систему настолько плохо, чтобы невынужденное переключение контекста оказывало значительное влияние на производительность.
Исходя из того, что вы сказали, я подозреваю, что в некоторых условиях, когда система находилась под высокой нагрузкой, пакеты терялись из-за того, что сетевая карта не обслуживалась достаточно быстро. Вероятно, это происходит не из-за того, что прерывание не обслуживается достаточно быстро, а из-за того, что другая работа, связанная с сетевым трафиком, не становится полностью достаточно быстрой, чтобы не отставать от скорости передачи пакетов. Это включает, например, все операции, требуемые протоколом TCP. Если это будет резервное копирование, пакеты будут куда-то сброшены.