我正在尋找Linux中的快速狀態防火牆,它可能會處理大量數據包並將其中一些發送到外部程序。如何使用DPDK運行Netfilter(iptables,nftables)
是否有可能使netfilter(iptables,nftables)與Intel DPDK一起工作以提高性能?
我正在尋找Linux中的快速狀態防火牆,它可能會處理大量數據包並將其中一些發送到外部程序。如何使用DPDK運行Netfilter(iptables,nftables)
是否有可能使netfilter(iptables,nftables)與Intel DPDK一起工作以提高性能?
DPDK有一個「內核網絡接口」,它有點像tap/tun設備,但是是零拷貝。使用這些,您可以在用戶空間中完成您的RX/TX,然後將數據包傳遞到Linux網絡堆棧。我不知道這是否會給你帶來很多性能,除了可能會消除一些IRQ開銷。
其他一些選擇,如果你沒有和netfilter結婚,可以在DPDK之上使用一個用戶空間BSD網絡棧(例如libuinet)或者一個rump kernel。
爲了繼續使用iptables,iproute2等,您需要從6WIND部署加速軟件堆棧。DPDK不提供網絡堆棧。
假設您正在使用Linux內核iptables,路由條目,IPsec條目等,使用iptables,setkey,iproute2等,而無需修改;那麼6WIND的軟件堆棧會將數據包處理卸載到其加速堆棧中。
所以你可以讓你的Linux管理工具(網頁界面,Openstack等),而6WIND軟件棧負責提供性能。它在DPDK和其他CPU上也很出色,比如Tilera,Cavium Octeon,Broadcom XLP,...
查看他們的網站了解更多信息。
有沒有類似的開源實現? – Konstantin 2015-03-10 10:26:12
這是一個廣告,而不是一個完整的答案。 – 2015-03-24 17:04:49
@保羅,完全同意你的看法。我沒有看到這個問題太多的關注,並決定接受唯一的答案來結束它。 – Konstantin 2015-03-24 18:54:46
我曾試過DPDK KNI在Linux netfilter中使用iptables。 它工作,但整體性能比純內核iptalbes少一點。
根據我簡單的NAT實驗,iptables提供了290Mbps的超過1G鏈接的64字節數據包。而KNI的iptables顯示240Mbps。
儘管DPDK KNI以PMD模式運行並消除了中斷,但它並沒有增加帶寬,因爲Linux內核也採用了NAPI(新API),它改變了運行模式從中斷到輪詢和反之。
當我運行我的簡單DPDK應用程序進行NAT時,它顯示761Mbps,理論上幾乎是64字節數據包的最大帶寬。
我認爲Linux內核中的softirq會花費很多時間來處理數據包。
Paul,用戶空間堆棧的好建議!萬分感謝! – Konstantin 2015-03-24 18:55:16