高性能容器虛擬RDMA網絡:FreeFlow

大型雲應用開發者一直在追求高性能、低運維成本和高資源利用率,導致容器化和遠程直接內存訪問(RDMA)網絡技術被越來越多的採用。

容器 [7,11,6] 提供的輕量級隔離和可移植性,降低了部署和管理雲應用的複雜性 (從而降低了成本)。因此,現在容器成爲管理和部署大型雲應用的實際方式。

因爲與基於標準 TCP/IP 的網絡相比,RDMA 網絡能夠提供更高的吞吐量、更低的延遲和更少的 CPU 佔用,所以許多數據密集型應用(例如,深度學習和數據分析框架)都會採用 RDMA [24,5,18,17]。

但不幸的是,這兩種技術趨勢在雲環境中是相互矛盾的。容器化的核心價值是爲應用提供高效靈活的管理。爲此容器雲需要容器在網絡中具有以下三個屬性:

隔離:每個容器都應該有其專用的網絡命名空間(包括端口空間、路由表、接口等),以消除與同一主機上其他容器的衝突。

可移植性:容器應該使用虛擬網絡與其他容器通信,並且與它的虛擬 IP 保持關聯,而不管它被調度到哪個主機上或遷移到哪個主機上。

可控性:編排器可以容易地執行控制平面策略 (例如,准入控制、路由) 和數據平面策略 (例如,QoS、計費)。此屬性在 (多租戶) 雲環境中尤其需要。

對於在雲環境中,自由放置、遷移容器、以及控制每個容器可使用的資源,這些屬性都是必需的。爲此,在基於 TCP/IP 的操作中,網絡可以通過軟件(虛擬)交換機來實現完全虛擬化 [15]。

但是,很難對基於 RDMA 的網絡進行完全虛擬化。 RDMA 通過將網絡處理卸載到硬件 NIC 中,繞過內核軟件棧,實現了高網絡性能。 在共享的雲環境中難以修改硬件中的控制平面狀態(例如,路由),同時由於流量直接通過 PCIe 總線在 RAM 和 NIC 之間傳輸,也難以控制數據路徑。

因此,採用這兩種技術的幾個數據密集型應用(例如,TensorFlow [24],CNTK [5],Spark [18],Hadoop [17])僅在專用裸機羣集中運行時才使用 RDMA; 當在共享的雲環境中運行時,不得不完全摒棄 RDMA 提供的性能優勢。 當然,使用專用集羣來運行應用對於提供商或客戶來說都是不划算的。

本文的目的很簡單:我們希望基於雲環境中的容器化應用能夠像在專用裸機集羣中那樣高效地使用 RDMA,同時也能實現容器雲中的隔離、可移植性和可控性的要求。

目前還沒有成熟的容器 RDMA 虛擬化解決方案。表 1 總結了可能通過擴展來支持容器的一些重要選項,儘管它們未能達到關鍵要求,也可能需要以很大的性能成本爲代價進行實現。

表 1: 可用於容器的 RDMA 網絡解決方案。

例如,基於硬件的 I/O 虛擬化技術,如 SR-IOV[21],具有根本的移植性限制 [39,28],因爲它們需要重新配置硬件網卡和交換機來支持容器的遷移。控制路徑虛擬化解決方案,例如 HyV[39],只操作控制平面命令來實現隔離和可移植性,它們不具有數據流的可見性或可控制性。因此,它們不能靈活地支持雲提供商所需的數據平面策略。軟件仿真 RDMA,如 SoftRoCE[36],通過在 UDP 網絡棧上運行 RDMA 並使用現有的虛擬 IP 網絡解決方案,可以輕鬆實現隔離、可移植性和可控性,但其性能將受到 UDP 的限制。

本文提出了一種基於軟件的容器雲虛擬 RDMA 網絡框架 FreeFlow,該框架實現了隔離、可移植性和可控性,並提供了接近裸機 RDMA 的性能。FreeFlow 的核心是運行在每個服務器上的軟件虛擬交換機,來實現在商業 RDMA 網卡上虛擬化 RDMA。FreeFlow 不需要專門的硬件或基於硬件的 I/O 虛擬化。軟件虛擬交換機具有對容器間通信的控制路徑 (如地址、路由) 和數據路徑 (如數據流量) 的完全訪問權。這種設計理念類似於容器雲中用於 TCP / IP 網絡的現有軟件虛擬交換機,例如 Open vSwitch(OvS)[15],儘管由於 RDMA 的特性,FreeFlow 的實際設計與 OvS 截然不同。

FreeFlow 的設計解決了兩個關鍵挑戰。首先,我們希望 FreeFlow 對應用程序完全透明。這很有挑戰性,因爲 RDMA 需要網卡來操作內存緩衝區和文件描述符,而容器內的應用程序由於網絡虛擬化而不能直接與網卡交互。我們解決這一問題的關鍵點是,容器本質上是進程,它們可以使用 FreeFlow 輕鬆共享內存和文件描述符等資源。如果 FreeFlow 和容器共享相同的內存(§4.3)和文件描述符(§4.4),則底層物理 RDMA NIC 上的任何操作都將自動在容器內生效。另一個問題是,鑑於應用程序不會協作地創建可共享的資源,因此共享對應用程序透明的資源並不簡單。 我們設計了將資源從不可共享轉換爲可共享的方法,對應用程序代碼無需修改或只需很少的修改。

其次,FreeFlow 必須提供與裸機 RDMA 相當的吞吐量和延遲。我們將吞吐量和延遲中的性能瓶頸分別定義爲內存複製和進程間通信。我們利用一個零拷貝設計吞吐量 (§4.3), 一個共享內存進程間通道與 CPU 旋轉延遲 (§5.2)。同時還優化了 FreeFlow 來限制 CPU 開銷。

我們使用標準的微基準測試工具和真實的數據密集型應用程序、Spark 和 TensorFlow 來評估 FreeFlow 的性能,不需要對它們進行任何修改或只需很小的修改。FreeFlow 的性能可與裸機 RDMA 相媲美,無需太多的 CPU 開銷。同時,與使用傳統 TCP/IP 虛擬網絡相比,FreeFlow 顯著提高了實際應用程序的性能,吞吐量提高了 14.6 倍,延遲降低了 98%。FreeFlow 吸引了多個 RDMA 解決方案提供商的興趣,並已開放源代碼

源代碼地址:https://github.com/Microsoft/Freeflow。

 

參考文獻:

https://www.infoq.cn/article/2lJYUW*4QVGCe94dQB64?utm_source=tuicool&utm_medium=referral

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章