У меня постоянно 5% и более процессорного времени тратится на обработку мягких прерываний. Doe to that, the ksoftirqd
работает почти постоянно, но использует очень мало ресурсов ЦП (менее 1%).
Однако, несмотря на такую большую нагрузку, все равно остается довольно высокий процент простоя (30% и более) (это top
значение холостого хода или холостой ход от mpstat
).
Немного предыстории (однако я хотел бы получить концептуальный ответ, а не тот, который решает проблему в моей системе). Система используется для маршрутизации (echo 1 > /proc/sys/net/ipv4/ip_forward
) и NAT с помощью iptables, а также запускает дополнительное пользовательское приложение, не связанное с сетью. Кроме того, средняя загрузка всегда выше 1 (это одноядерный процессор) (это значение средней загрузки с top
, или вывод sar -q
).
Что мешает системе использовать время простоя для предотвращения пропуска обработки мягких прерываний?
Я ожидал увидеть, что время простоя (id вверху) будет использоваться для обслуживания программных прерываний (si вверху), и не будет, чтобы процессор пропустил задачи и одновременно простаивал.
Ваша система не нагружена.
Прерывания обрабатываются правильно, как и ваша маршрутизация и ваше приложение. Если бы это было не так, ваша система не простаивала на 30%. (В любом случае, где вы это видите?)
Использование небольшой системы для множества разных задач одновременно не всегда означает перегрузку, особенно если для NAT не слишком много данных. Если ваши сетевые интерфейсы работают с DMA (что очень вероятно), тогда ваши обработчики прерываний даже не делают одноблочную копию в текущих ядрах.
Кроме того, вы загружаете свою систему совсем по-другому (пока чип вашей сетевой карты взаимодействует с dma, ваше приложение может работать).
Единственная серьезная проблема может заключаться в вашей системе в большом соотношении переключателей задач. Это основная проблема подобных одноядерных, многоцелевых, замечательных серверов. Но в вашем случае это вызвало большую нагрузку на систему, чего не происходит.
Я был бы счастлив расширить этот ответ, если бы вы объяснили, откуда берется эта «30% простоя». Вы говорите, что нагрузка на систему всегда больше 1.