различия между DPDK и Netfilter - PullRequest
0 голосов
/ 18 ноября 2018

Я хочу обойти сетевой стек Linux, преобразовать необработанные пакеты в мои пользовательские коды в userland и обработать их там.

Я знаю, что вы можете создавать свои собственные драйверы, используя pf-rings или DPDK и другие.Но я не могу понять, почему я должен делать драйверы такого типа, когда я могу использовать Netfilter, перевести мой модуль в состояние NF_IP_PRE_ROUTING и отправить пакеты в userland.

Было бы очень полезно для меня, если бы кто-нибудь мог объяснить мне основные различия между ними.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Существует множество способов получения необработанных пакетов и их доставки в приложение пользовательского пространства. Дьявол как обычно в деталях.

Если все, что нам нужно, это доставлять пакеты в приложение пользовательского пространства - нет разницы, какое решение использовать. Libpcap, или tun / taps, или Netfilter, или pf-ring, или что-то еще. Все будет хорошо.

Но если нам нужно обрабатывать 100 миллионов пакетов в секунду (~ 30 циклов ЦП на пакет на 3 ГГц) - я не думаю, что у нас есть другие варианты, кроме DPDK. Google для "отчета о производительности DPDK" и посмотрите.

DPDK - это инфраструктура, которая хорошо работает на многих платформах (x86, ARM, POWER и т. Д.) И поддерживает множество сетевых карт. Не нужно писать драйвер, поддержка самых популярных сетевых карт уже есть.

Существует также поддержка управления ядрами ЦП, огромными страницами, буферами памяти, шифрованием, фрагментацией IP-адреса и т. Д. И т. Д. Все это разработано для пересылки 100 Мбит / с. Если нам нужно это представление ...

0 голосов
/ 18 ноября 2018

Существует огромная разница между ловушками DPDK и Netfilter.При использовании Netfilter / hooking NF_IP_PRE_ROUTING вы захватываете поток пакетов, а копируют пакеты из пространства ядра в пространство пользователя.Эта копия вызывает большие издержки.

При использовании DPDK вы фактически отображаете буферы пакетов вашей сетевой карты в область памяти пользовательского пространства.Это означает, что вместо того, чтобы ядро ​​получало прерывание от NIC, а затем передавало его через все свои очереди до достижения NF_IP_PRE_ROUTING, что, в свою очередь, будет копировать упаковщик в пользовательское пространство по запросу, DPDK предлагает вам возможность доступа к отображенному пакету.буферизует непосредственно из пространства пользователя, минуя всю мета-обработку ядром, эффективно повышая производительность (за счет сложности и безопасности кода).

...