Я сталкиваюсь со следующей ситуацией. У нас есть два сетевых пространства имен: ns1 и ns2. Они связаны через пару ветеринаров. ns1 содержит ovs, а ns2 содержит правила iptables. Пакеты передаются от порта 1 ovs к ns2 и проходят проверку iptable, а затем возвращаются к ns1. Пакеты находятся в ядре, и обработка выполняется быстро.
Поскольку правила iptables становятся все больше и больше, я думаю, что мы отделим ns2 как еще один процесс os. Основной причиной является использование нескольких ядер на компьютере. Соедините ns1, содержащие ovs, и ns2, содержащие правила iptables, через пару veth. Если я это сделаю, пакеты все еще остаются в ядре? И нет никаких потерь производительности, таких как пересечение границ процессов, границ ядра / пространства пользователя, нескольких копий одних и тех же пакетов?
Я немного ищу. Пространство ядра использует виртуальную память как пространство пользователя. Кажется, что некоторая область пространства ядра используется несколькими процессами ОС и резервируется физической ОЗУ. Вот почему виртуальная сеть Linux работает быстро. Хотя пространства имен связаны через пары veth, аппаратное прерывание не задействовано. Я не уверен, что существуют программные прерывания, когда пакеты проходят через пару веток. Независимо от того, что до тех пор, пока один и тот же пакет остается в пространстве ядра, которое совместно используется несколькими процессами os, производительность должна быть хорошей. Разделение пространства имен iptables на другой процесс поможет в случае многоядерных процессоров.
Правильно ли это понимание?