用戶空間網絡提升 NFV 的性能
本文是一篇翻譯,翻譯自https://software.intel.com/en-us/blogs/2015/06/12/user-space-networking-fuels-nfv-performance,文章有點老了,15年寫的,但是文章總結了一些用戶態的協議棧,很有學習參考的意義。
如今,作為一個網絡空間的軟件開發人員是非常激動人心的,因為工程師的角色隨著這個世界的規則在逐漸改變。
過去這 15 年來,人們對高性能網絡做了很多努力,網絡模型也發生了很多改變,起初,數據包的收發都要推送到內核才能完成,現在,不用內核態的參與也可以完成。這種改變的背後是在力圖解決以下的幾個問題:1)用戶態和內核態上下文切換的開銷;2)軟硬中斷的開銷;3)數據拷貝的開銷等等。
最近,很多人在討論 mTCP——一個實現了用戶態協議棧的開源庫,這種技術在很大程度上就顛覆了傳統的網絡模型,使得網絡收發包的效率大大提升。它充分利用了 CPU 的親和性,共享內存,批處理等技術來實現高效的 I/O 事件。與之類似的技術也相繼被提出。
實驗表明,mTCP 這種用戶態協議棧,相較原生的內核協議棧,在處理多種流行的應用時的性能得到較大提升,如 SSLShader 提升了 33%,lighttpd 提升了 320%。
軟件形態的改變離不開硬件的革新。由以前的單核系統到如今多核系統的性能擴展,直接導致了網絡軟件架構的新方法。例如,內核所做的所有功能和處理,包括網絡驅動程序,現在都可以被直接放到用戶空間中來實現,應用程序可以直接訪問底層的 NUMA 結構,利用 CPU 的親和性,以及多核特性並行處理任務。這種設計避免了上下文之間的切換開銷,可以顯著降低數據傳輸的延遲和 CPU 使用,同時提高吞吐量和帶寬。另外,提供一種運行到完成(run-to-completion)的模型能夠讓不同的核獨立並行地完成不同的任務。
隨著網絡的發展,我們現在看到了大量的開源項目,都在將內核協議棧移到用戶空間來做。它們的做法存在一些區別,像 mTCP,它的協議棧是從零開始開發的,而其他很多項目則是基於 FreeBSD 的來做,這主要是因為 FreeBSD 的協議棧具有 “最健壯的網絡協議棧的聲譽”。此外,很多存儲解決方案也是采用的 FreeBSD 來作為其核心操作系統。當然,Linux 協議棧也是可以采用的。
這些用戶態協議棧怎麽做到繞過內核的,這就離不開 DPDK 的支持。利用 DPDK,用戶態協議棧可以創建一個中斷來將數據包從 NIC 的緩沖區直接映射到用戶空間,然後利用協議棧的特性來管理 TCP/IP 數據包的處理和傳輸。
DPDK 還可以作為一些 vSwitch(虛擬交換機)的加速器,這些 vSwitch 包含 OpenFlow 協議的完整實現,以及與 OpenStack Neutron 的整合。
下面,我們收集了一些發現的開源項目,無論你決定使用一個 vSwitch 還是一個完整的網絡協議棧,網絡開發人員都有很多選擇,可以將應用程序移到用戶空間,並在多核系統上擴展性能。
DPDK-Enabled vSwitch:
OVS
Open vSwitch 是一個多核虛擬交換機平臺,支持標準的管理接口和開放可擴展的可編程接口,支持第三方的控制接入。
https://github.com/openvswitch/ovs
Lagopus
Lagopus 是另一個多核虛擬交換的實現,功能和 OVS 差不多,支持多種網絡協議,如 Ethernet,VLAN,QinQ,MAC-in-MAC,MPLS 和 PBB,以及隧道協議,如 GRE,VxLan 和 GTP。
https://github.com/lagopus/lagopus/blob/master/QUICKSTART.md
Snabb
Snabb 是一個簡單且快速的數據包處理工具箱。
https://github.com/SnabbCo/snabbswitch/blob/master/README.md
xDPd
xDPd 是一個多平臺,多 OpenFlow 版本支持的開源 datapath,主要專註在性能和可擴展性上。
https://github.com/bisdn/xdpd/blob/stable/README
從零開發的用戶空間協議棧套件:
mTCP
mTCP 是一個針對多核系統的高可擴展性的用戶空間 TCP/IP 協議棧。
https://github.com/eunyoung14/mtcp/blob/master/README
Mirage-Tcpip
mirage-tcpip 是一個針對 MirageOS 這種 “庫操作系統” 而開發的一個用戶態網絡協議棧,開發的語言是 OCaml。
https://github.com/mirage/mirage-tcpip
IwIP
IwIP 針對 RAM 平臺的精簡版的 TCP/IP 協議棧實現。
http://git.savannah.gnu.org/cgit/lwip.git/tree/README
移植版的用戶空間協議棧套件:
Arrakis
針對多核系統的用戶空間 OS,移植於 IwIP。
https://github.com/UWNetworksLab/arrakis/blob/master/README_ARRAKIS
libuinet
用戶空間的 TCP/IP 協議棧,移植於 FreeBSD。
https://github.com/pkelsey/libuinet/blob/master/README
NUSE (libos)
一個基於 Linux 的庫操作系統,移植於 Linux。
https://github.com/libos-nuse/net-next-nuse/wiki/Quick-Start
OpenDP
一個針對 DPDK TCP/IP 協議棧的數據面,移植於 FreeBSD。
https://github.com/opendp/dpdk-odp/wiki
OpenOnload
一個高性能的用戶態協議棧,移植於 IwIP。
http://www.openonload.org/download/openonload-201205-README.txt
OSv
一個針對虛擬機的開源操作系統。移植於 FreeBSD。
https://github.com/cloudius-systems/osv/blob/master/README.md
Sandstorm
一個針對個人服務器安全的開源網絡平臺,移植於 FreeBSD。
https://github.com/sandstorm-io/sandstorm/blob/master/README.md
總結:
1、這篇文字的亮點在於總結了當前階段業界出現的一些用戶空間協議棧,對於文章標題提到的 NFV 在文中則只字未提,但其實意思也很明了了。用戶空間的協議棧是隨著硬件技術的發展,以及新鮮應用場景應運而生的,換句話說,對於像 NFV 這種對性能要求比較高的場景,采用用戶態的協議棧是比較合適的。
2、文中是 2015 年寫的,這意味著到現在為止,肯定出現了很多比上面總結還要多的方案,其中比較出名的有 SeaStar 和 騰訊開源的 F-Stack,後面找機會再進行詳述,敬請期待吧。
PS:對雲計算感興趣的小夥伴可以關註我的微信公眾號:aCloudDeveloper,專註雲計算領域,堅持分享幹貨。
用戶空間網絡提升 NFV 的性能