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