高性能容器虚拟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

猜你喜欢

转载自blog.csdn.net/grace_yi/article/details/88534473