DPDK和Netfilter之间的区别

时间:2018-11-18 11:03:41

标签: linux linux-kernel netfilter dpdk

我想绕过Linux网络堆栈,并将原始数据包转换为userland中的自定义代码,并在那里处理它们。

我知道您可以使用pf-rings或DPDK等来制作自定义驱动程序。但是我无法理解为什么我应该使用Netfilter并将模块挂接到NF_IP_PRE_ROUTING状态并将数据包发送到userland的同时制作这些驱动程序。

如果任何人都可以向我解释他们之间的主要区别,那将对我有很大的帮助。

2 个答案:

答案 0 :(得分:2)

DPDK和Netfilter挂钩之间有巨大的区别。使用Netfilter /挂接NF_IP_PRE_ROUTING时,您劫持了数据包流,并复制数据包形成了内核空间到用户空间。此副本会导致大量开销。

使用DPDK时,实际上是在将网卡的数据包缓冲区映射到用户空间存储区。这意味着内核无需从NIC获取中断,而是将其通过所有队列,直到到达NF_IP_PRE_ROUTING,这反过来将根据请求将打包程序复制到用户区,DPDK为您提供了以下可能性:从用户空间直接直接访问映射的数据包缓冲区,绕过内核的所有元处理,有效地提高了性能(以代码复杂性和安全性为代价)。

答案 1 :(得分:1)

有多种技术可以捕获原始数据包并将其传送到用户空间应用程序。像往常一样,魔鬼在细节中。

如果我们需要的只是将数据包传递到用户空间应用程序-使用哪种解决方案没有区别。 Libpcap或tun / tap或Netfilter或pf环或其他任何东西。一切都会好起来的。

但是,如果我们需要每秒处理1亿个数据包(在3GHz上每个数据包需要30个CPU周期),那么我认为除了DPDK之外,我们目前没有其他选择。谷歌提供“ DPDK性能报告”,看看吧。

DPDK是一个框架,可以在许多平台(x86,ARM,POWER等)上很好地工作,并支持许多NIC。无需编写驱动程序,已经有了对最受欢迎的NIC的支持。

还支持管理CPU内核,大页面,内存缓冲区,加密,IP碎片等。所有这些都设计为能够转发100 Mpps。如果我们需要那种性能...