【问题标题】:How to run Netfilter (iptables, nftables) with DPDK如何使用 DPDK 运行 Netfilter(iptables、nftables)
【发布时间】:2015-10-07 17:21:42
【问题描述】:

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

是否可以让 netfilter(iptables、nftables)与英特尔 DPDK 一起使用以提高性能?

【问题讨论】:

    标签: linux linux-kernel iptables netfilter dpdk


    【解决方案1】:

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

    如果您没有与 netfilter 结婚,其他一些选择可能是使用用户空间 BSD 网络堆栈之一(例如 libuinet)或在 DPDK 之上使用 rump kernel

    【讨论】:

    • Paul,关于用户空间堆栈的好建议!非常感谢!
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 有没有类似的开源实现?
    • 这更像是一个广告,而不是一个完整的答案。
    • @Paul,完全同意你的看法。我没有看到对这个问题的太多关注,并决定通过接受唯一的答案来结束它。
    【解决方案3】:

    我曾尝试使用 DPDK KNI 在 Linux netfilter 中使用 iptables。 它起作用了,但整体性能比纯内核 iptalbes 差一点。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      相关资源
      最近更新 更多