Linux 如何使用DPDK运行Netfilter(iptables、nftables)

Linux 如何使用DPDK运行Netfilter(iptables、nftables),linux,linux-kernel,iptables,netfilter,dpdk,Linux,Linux Kernel,Iptables,Netfilter,Dpdk,我正在寻找Linux中的快速有状态防火墙,它可以处理大量数据包,并将其中一些数据包发送到外部程序 是否可以使netfilter(iptables,nftables)与Intel DPDK配合使用以提高性能?您需要从6WIND部署一个加速软件堆栈,以便继续使用iptables,iproute2等。DPDK不提供网络堆栈 假设您正在使用Linux内核iptables、路由条目、IPsec条目等,使用iptables、setkey、iproute2等,无需修改;然后,6WIND的软件栈将数据包处理卸载

我正在寻找Linux中的快速有状态防火墙,它可以处理大量数据包,并将其中一些数据包发送到外部程序


是否可以使netfilter(iptables,nftables)与Intel DPDK配合使用以提高性能?

您需要从6WIND部署一个加速软件堆栈,以便继续使用iptables,iproute2等。DPDK不提供网络堆栈

假设您正在使用Linux内核iptables、路由条目、IPsec条目等,使用iptables、setkey、iproute2等,无需修改;然后,6WIND的软件栈将数据包处理卸载到加速栈中

因此,您可以保留Linux管理工具(web界面、Openstack等),而6WIND软件堆栈负责提供性能。它适用于DPDK和其他CPU,如Tilera、Cavium Octeon、Broadcom XLP等


查看他们的网站了解更多信息。

为了继续使用iptables、iproute2等,您需要从6WIND部署一个加速软件堆栈。DPDK不提供网络堆栈

假设您正在使用Linux内核iptables、路由条目、IPsec条目等,使用iptables、setkey、iproute2等,无需修改;然后,6WIND的软件栈将数据包处理卸载到加速栈中

因此,您可以保留Linux管理工具(web界面、Openstack等),而6WIND软件堆栈负责提供性能。它适用于DPDK和其他CPU,如Tilera、Cavium Octeon、Broadcom XLP等

查看他们的网站了解更多信息。

DPDK有一个“内核网络接口”,它的工作原理有点像tap/tun设备,但是零拷贝。使用这些,您可以在用户空间中执行RX/TX,然后将数据包传递到linux网络堆栈中。我不知道除了可能消除一些IRQ开销之外,这是否会为您带来很多性能

如果您没有与netfilter结婚,其他一些选项可能是使用一个用户空间BSD网络堆栈(例如)或DPDK上的一个。DPDK有一个“内核网络接口”,其工作原理有点像tap/tun设备,但是零拷贝。使用这些,您可以在用户空间中执行RX/TX,然后将数据包传递到linux网络堆栈中。我不知道除了可能消除一些IRQ开销之外,这是否会为您带来很多性能


如果您没有与netfilter结婚,其他一些选择可能是使用用户空间BSD网络堆栈(例如)或DPDK之上的。我曾尝试过DPDK KNI在Linux netfilter中使用iptables。 这是可行的,但总体性能比纯内核iptalbs稍差一些

根据我的简单NAT实验,iptables通过1G链路为64字节的数据包提供290Mbps。而带有KNI的iptables显示为240Mbps

虽然DPDK KNI在PMD模式下运行并消除中断,但它并没有增加带宽,因为Linux内核也采用了NAPI(新API),它将运行时模式从中断改为轮询,反之亦然

当我为NAT运行简单的DPDK应用程序时,它显示761Mbps,这几乎是64字节数据包理论上的最大带宽


我认为Linux内核中的softirq需要花费大量的时间来处理数据包

我曾尝试过DPDK KNI在Linux netfilter中使用iptables。 这是可行的,但总体性能比纯内核iptalbs稍差一些

根据我的简单NAT实验,iptables通过1G链路为64字节的数据包提供290Mbps。而带有KNI的iptables显示为240Mbps

虽然DPDK KNI在PMD模式下运行并消除中断,但它并没有增加带宽,因为Linux内核也采用了NAPI(新API),它将运行时模式从中断改为轮询,反之亦然

当我为NAT运行简单的DPDK应用程序时,它显示761Mbps,这几乎是64字节数据包理论上的最大带宽


我认为Linux内核中的softirq需要花费大量的时间来处理数据包

有没有类似的开源实现?这更多的是一个广告,而不是一个完整的答案。@Paul,完全同意你的观点。我没有注意到这个问题,决定接受唯一的答案来结束这个问题。有没有类似的开源实现?这更像是一个广告,而不是一个完整的答案。@Paul,完全同意你的看法。我没有注意到这个问题,决定接受唯一的答案来结束它。保罗,关于用户空间堆栈的好建议!多谢各位!Paul,关于用户空间堆栈的好建议!多谢各位!