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