Что произойдет, если загрузка процессора увеличится до 100% в инфраструктуре SMP?

У меня есть веб-сервер, который имеет 4 процессора, он как-то периодически сталкивается с потерей пакетов. Наконец, мы перенесли все приложение и данные в другую систему с 8 процессорами. Мы сделали это, потому что не нашли ничего плохого, кроме одного явления, когда средняя загрузка ЦП постоянно увеличивалась до 80%.

Во время устранения неполадок. Я проверил файл /proc/interrupts, и прерывания были зафиксированы для ЦП 0. Также был выдан "mpstat -p ALL", чтобы увидеть загрузку каждого ЦП. И ни один из них не был на 100% в то время, когда мы их проверяли.

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

  1. Если загрузка одного из ЦП в четырехъядерной системе составляет 100%, и он фиксируется на прерывании на прерывание NIC. Запланирует ли ядро ​​другой процессор, который не очень занят обработкой прерывания NIC вместо него?
  2. Потеря пакетов была решена после добавления большего количества процессоров для системы, потому что чем больше процессоров в системе, тем меньше вероятность использования процессора, занятого прерыванием сетевого адаптера, до 100%?

  3. Приводит ли добавление большего количества процессоров в систему к меньшему переключению контекста и, следовательно, к снижению системных издержек?

1 ответ

Если загрузка одного из ЦП в четырехъядерной системе составляет 100%, и он фиксируется на прерывании на прерывание NIC. Запланирует ли ядро ​​другой процессор, который не очень занят обработкой прерывания NIC вместо него?

Как правило, нет. Прерывание в любом случае получает приоритет, поэтому нет необходимости перемещать прерывание NIC.

Потеря пакетов была решена после добавления большего количества процессоров для системы, потому что чем больше процессоров в системе, тем меньше вероятность использования процессора, занятого прерыванием сетевого адаптера, до 100%?

Нет. Почему это имеет значение? Прерывание, как следует из его названия, прерывает процессор и заставляет его обслуживать прерывание.

Приводит ли добавление большего количества процессоров в систему к меньшему переключению контекста и, следовательно, к снижению системных издержек?

Может, но это вряд ли что-то изменит. Большее количество процессоров уменьшит только вынужденные переключатели контекста (те, которые система решит использовать, даже если это не обязательно), и никто не спроектирует систему настолько плохо, чтобы принудительные переключатели контекста оказали значительное влияние на производительность.

Исходя из того, что вы сказали, я подозреваю, что в некоторых условиях, когда система находилась под высокой нагрузкой, пакеты терялись, потому что сетевая карта не предоставляла услуги достаточно быстро. Вероятно, это связано не с тем, что прерывание обрабатывается недостаточно быстро, а с другой работой, связанной с тем, что сетевой трафик не получается достаточно быстро, чтобы не отставать от скорости передачи пакетов. Это включает, например, все операции, требуемые протоколом TCP. Если это резервное копирование, пакеты будут отброшены где-то.

Другие вопросы по тегам