Остаются ли пакеты Ethernet в ядре Linux при прохождении двух процессов в двух разных пространствах сетевых имен через пару veth? - PullRequest
1 голос
/ 24 апреля 2019

Я сталкиваюсь со следующей ситуацией. У нас есть два сетевых пространства имен: ns1 и ns2. Они связаны через пару ветеринаров. ns1 содержит ovs, а ns2 содержит правила iptables. Пакеты передаются от порта 1 ovs к ns2 и проходят проверку iptable, а затем возвращаются к ns1. Пакеты находятся в ядре, и обработка выполняется быстро.

Поскольку правила iptables становятся все больше и больше, я думаю, что мы отделим ns2 как еще один процесс os. Основной причиной является использование нескольких ядер на компьютере. Соедините ns1, содержащие ovs, и ns2, содержащие правила iptables, через пару veth. Если я это сделаю, пакеты все еще остаются в ядре? И нет никаких потерь производительности, таких как пересечение границ процессов, границ ядра / пространства пользователя, нескольких копий одних и тех же пакетов?

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

Правильно ли это понимание?

...