Использует ли IPTables преимущества многоядерных процессоров?

10

Каждый пакет обрабатывается другим ядром? Или это однопоточный процесс?

Ensnare
источник
2
Я не уверен, почему Chopper3 закрыл этот вопрос. Чтобы ответить на это: Iptables на самом деле является лишь интерфейсом пользовательского пространства для брандмауэра Linux, который является netfilter. Netfilter - это система хуков в ядре, связанных с обработкой пакетов. Каждый пакет обрабатывается ядром, вызывая прерывание. От того, сколько ему лет, зависит балансировка вашего ядра между несколькими процессорами. Смотрите эту ветку на StackOverflow об этом. stackoverflow.com/questions/7467688/…
JakePaulus
+1, потому что я думаю, что это подлинный вопрос.
Сачин Дивекарь
@JakePaulus Это IRQ-балансирование никогда не назначит более одного ядра одному прерыванию. Таким образом, переключение ядер для каждого пакета в одной строке никогда не произойдет?
Нильс
С точки зрения кэша памяти ЦП переключение ядер для одного соединения не имеет особого смысла - возможно, даже замедлилось бы, если бы эти ядра не использовали один и тот же кэш. Но почему вы задаете этот вопрос?
Нильс
@ Nils Прерывания, генерируемые интерфейсом, могут быть перенаправлены на другой, менее загруженный процессор. Кроме того, прерывания могут передаваться нескольким интерфейсам на разные процессоры для распределения нагрузки. Я думаю, что вы правы в том, что трафик с одного интерфейса не сбалансирован между процессорами для каждого пакета.
JakePaulus

Ответы:

6

Iptables на самом деле является лишь интерфейсом пользовательского пространства для брандмауэра Linux, который является netfilter. Netfilter - это система хуков в ядре, связанных с обработкой пакетов. Каждый пакет обрабатывается ядром, вызывая прерывание. От того, сколько ему лет, зависит балансировка вашего ядра между несколькими процессорами. Смотрите эту ветку на StackOverflow об этом. /programming/7467688/netfilter-hooks-on-multi-core-system

Как отметил Нильс, эти прерывания не будут сбалансированы для каждого пакета. Они будут сбалансированы по IRQ (по интерфейсу) или, возможно, будут перенесены на другой процессор, если он будет слишком занят.

JakePaulus
источник
в качестве альтернативы вы также можете ограничить свои прерывания или привязать их к различным ядрам. Я видел, как в некоторых случаях они связывают все сетевые прерывания с несколькими ядрами, чтобы обеспечить минимальное переупорядочение пакетов и миграцию процессов между ядрами.
Чанданк