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

How to run Netfilter (iptables, nftables) with DPDK

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

是否可以使 netfilter(iptables、nftables)与 Intel DPDK 一起工作以提高性能?

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

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

因此,您可以保留 Linux 管理工具(Web 界面、Openstack 等),而 6WIND 软件堆栈负责提供性能。它在 DPDK 和其他 CPU 上工作得很好,比如 Tilera、Cavium Octeon、Broadcom XLP,...

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

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

一些其他选项,如果你没有与 netfilter 结合,可以使用一个用户空间 BSD 网络堆栈(例如 libuinet) or a rump kernel 在 DPDK 之上。

我曾尝试使用 DPDK KNI 在 Linux netfilter 中使用 iptables。 它有效,但整体性能比纯内核 iptalbes 稍差。

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

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

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

我认为 Linux 内核中的 softirq 消耗了大部分时间来处理数据包。