计算机系统应用  2020, Vol. 29 Issue (10): 1-8   PDF    
RDMA虚拟化相关技术研究
代超1, 刘强1, 蒋金虎2, 张为华2     
1. 复旦大学 软件学院, 上海 201203;
2. 复旦大学 上海市数据科学重点实验室, 上海 201203
摘要:RDMA网络具有高带宽, 低延时, 低CPU负载的特点, 广泛应用于数据密集型任务中, 例如深度学习, 高性能计算, 数据分析等. RDMA的实现需要软硬件支持, 在云环境下, RDMA虚拟化方案有助于多用户共享RDMA网络传输的高性能, 同时实现对RDMA网络的统一管理和控制. 本文调研了近年来的RDMA虚拟化解决方案, 覆盖了虚拟机和容器环境; 然后将这些解决方案进行分类和比较; 最后, 对RDMA虚拟化中存在的问题和未来的发展做出了总结和展望.
关键词: RDMA    虚拟化    云计算    
Survey on RDMA Virtualization Technology
DAI Chao1, LIU Qiang1, JIANG Jin-Hu2, ZHANG Wei-Hua2     
1. Software School, Fudan University, Shanghai 201203, China;
2. Shanghai Key Laboratory of Data Science, Fudan University, Shanghai 201203, China
Foundation item: National Natural Science Foundation of China (61672160)
Abstract: RDMA networks have the characteristics of high bandwidth, low latency, and low CPU load, and are used in a wide range of data-intensive tasks, such as deep learning, high-performance computing, and data analysis. The imple-mentation of RDMA requires software and hardware support. In a cloud environment, the RDMA virtualization solutions help multiple users to share the high performance of RDMA network, while achieving unified management of RDMA networks. In this study, solutions of RDMA virtualization in recent years are collected, which cover virtual ma-chines and container environments. Then, these solutions are classified and compared. Finally, the existing problems and future development in RDMA virtualization are analyzed.
Key words: RDMA     virtualization     cloud computing    

1 引言

随着互联网技术的快速发展, 应用的用户规模越来越大, 需要的服务器资源越来越多. 传统服务器部署和维护成本高, 资源利用率低, 难以跟上互联网应用的发展需求. 为了实现对服务器资源的高效利用, 满足大规模用户的需求, 亚马逊最早于2006年推出了弹性云计算服务. 云计算将服务器硬件资源, 例如CPU, 内存, 网络等进行虚拟化, 以按需使用的方式提供给多用户使用. 目前, 云计算已经引起了学界和业界的高度重视, 例如, 谷歌、微软、阿里巴巴和腾讯等企业也竞相发布了各种云计算平台.

虚拟化技术广泛应用于云计算, 模拟器, 安全, 分析等领域[1-6]. 虚拟机相关的虚拟化技术包括CPU虚拟化, 内存虚拟化, I/O虚拟化等. 虚拟化技术可以分为硬件辅助的虚拟化和软件辅助的虚拟化等. 容器也是目前流行的虚拟化方案. 区别于虚拟机, 容器通过Linux的命名空间和控制组机制, 让应用程序在独立的运行时环境执行, 具有轻量级隔离和可移植的特点. 目前, 流行的容器引擎有Docker[7], RKT[8]等.

RDMA (Remote Direct Memory Access)是一种高速网络传输技术, 传输数据时可以绕过操作系统直接对远端内存进行读写. 相较于传统的TCP/IP网络, RDMA具有低延迟, 高吞吐, 低CPU负载的特点, 更适合数据中心的网络传输需求. 目前, RDMA广泛应用于云计算系统和大数据平台的网络密集型任务, 例如TensorFlow[9]、Spark[10]、Hadoop[11]等.

RDMA技术提供了高性能的网络传输, 虚拟机和容器技术提供了云计算用户隔离, 共享物理资源以及灵活管理的特点. RDMA虚拟化技术的目标就是将云环境的特点与RDMA网络的高性能特点相结合, 以满足云计算用户对可靠的高性能RDMA网络传输服务的需求. 本文调研了近年来RDMA虚拟化的主要解决方案, 覆盖了虚拟机和容器的云计算环境, 对相关技术进行了系统全面的分析和讨论. 在此基础上, 对现有RDMA虚拟化技术进行了总结, 对存在的问题进行了探讨和展望.

2 RDMA介绍

RDMA是一种远程直接访问内存的网络技术. RDMA的出现是为了解决数据中心网络传输的延迟问题. 在使用RDMA连接时, 主机可以直接绕过双方的操作系统, 对远端主机的内存进行读写, 从而避免经过内核时数据拷贝的开销, 同时不占用CPU资源. 因此, 相较于传统的TCP/IP网络, RDMA具有低延迟, 高吞吐, 低CPU负载的特点, 更适合数据中心的网络传输需求.

目前, RDMA广泛应用于人工智能、高性能计算、大数据分析和分布式存储等领域. TensorFlow、PaddlePaddle[12]等流行深度学习框架均支持RDMA; 根据2019年11月份的HPC top500统计[13], 排名前10的超算系统有6个使用了200Gb/s InfiniBand[14](一种RDMA网络), 500强名单中使用该网络的超算系统达到了140个; 大数据分析框架Spark、Hadoop等均有用到RDMA的成熟方案; 在分布式存储系统领域, 键值对系统、文件系统、分布式事务等也都利用了RDMA网络特性[15], 例如键值对系统Pilaf[16]、文件系统Octopus[17]以及分布式事务系统DrTM[18]、FaRM[19]等.

图1所示, 应用通过调用统一的Verbs [20]接口来进行RDMA网络传输. 完整的RDMA传输过程具有控制路径和数据路径. 首先, 在控制路径上建立连接, 两端的RDMA应用在各自的网卡上创建QP (Queue Pairs)和CQ (Complete Queue), 并完成内存注册. QP和CQ均映射到应用的地址空间, 其中, QP由接收队列和发送队列组成, 应用通过它们控制RDMA传输, 而CQ负责提供任务完成的通知. 然后, 两端应用的QP通过交换信息来完成配对. 当连接建立后, 在数据路径上, 应用可以绕过内核, 直接通过QP请求网卡将内存数据以DMA (Direct Memory Access)方式读取到网卡缓冲并发送给远端, 或者将网卡缓冲中接收的远端数据以DMA方式写入本地内存.

图 1 RDMA通信

RDMA有Write/Read和Send/Recv 两种通信方式. Write/Read是单边操作, 读(写)方不需要事先通知对方, 在建立连接后直接读(写)远端服务中RDMA应用内存地址中的数据. 例如, 在建立RDMA连接后, 应用调用Write命令, 根据远端提供的虚拟机地址, 直接通过RDMA网卡进行数据传输. Send/Recv是双边操作, 发送方调用Send命令时, 接收方需要提前调用Recv命令. 发送方和接收方都需要进行两步操作: 用QP来进行发送和接收数据, 用CQ来通知发送或接收任务的完成. 对于CQ中产生的新消息, RDMA应用可以采用轮询的方式, 定时检查CQ, 也可以采用基于事件的通知方式.

RDMA的技术实现需要硬件和软件的支持. 目前, 主要有3种RDMA技术, 分别是InfiniBand、RoCE[21] (RDMA over Converged Ethernet)、iWARP[22] (internet Wide Area RDMA Protocol). 其中, InfiniBand是一种专为RDMA设计的网络, 而RoCE 和 iWARP都是基于以太网的RDMA技术, 支持相应的Verbs接口. RoCE具有和InfiniBand相同的上层协议栈, 在数据链路层完全兼容以太网, 而iWARP则保留了TCP/IP的完整协议栈.

3 网络I/O虚拟化

在虚拟化技术中, 除了CPU虚拟化, 内存虚拟化等, I/O虚拟化也是必不可少的组成部分. I/O的虚拟化方法主要有: 设备模拟, 全虚拟化, 半虚拟化和设备直连[23].

(1) 设备模拟: 用纯软件来模拟I/O设备, 实现硬件设备所具备的接口. 软件模拟可以应用于缺乏物理设备的场景下, 性能较差.

(2) 全虚拟化: 客户机中的I/O请求会直接陷入虚拟机监视器, 并由其将请求映射到物理设备, 由设备驱动完成I/O请求. 全虚拟化需要虚拟机监视器具有比主机操作系统更高的优先级, 可以进行与操作系统无关的存储管理和虚拟化环境的切换.

(3) 半虚拟化: 使用前后端分离的驱动来处理I/O请求, 前端驱动程序位于客户机操作系统, 转发客户机应用的I/O请求, 后端驱动程序安装在虚拟机监视器中, 接收前端转发的请求并映射到对应的物理设备, 由设备驱动处理请求. 半虚拟化在实现上比全虚拟化简单, 在性能上比设备模拟好, 但需要修改客户机操作系统.

(4) 旁路直连: 由于客户机和设备之间存在监视器, 上述三种方法都会给I/O性能带来额外的开销. 旁路直连方法绕过了虚拟机监视器, 由客户机直接使用物理设备, 因此, 能提高I/O性能并能开放硬件设备的所有功能. 最初, 旁路直连只允许简单的设备直连, 即物理设备被一台客户机独占. 之后, 通过SR-IOV (Single-Root Input/Output Virtualization)[24]等方式, 设备可以提供多个接口供多台客户机直接使用.

网卡是常见的I/O设备, 网络传输是典型的I/O密集型任务. 网络I/O虚拟化需要考虑虚拟化方案的性能. 常用的网络I/O虚拟化方案有硬件辅助的虚拟化方案, 如SR-IOV, 和软件辅助的虚拟化方案, 如半虚拟化等.

4 RDMA虚拟化

RDMA作为一种高性能的网络传输技术, 在数据中心和云计算系统中应用十分广泛. 为了维持云环境中的隔离性, 可移植性等, 不能像原生环境一样使用RDMA, 需要进行RDMA虚拟化, 这就不可避免地在RDMA的使用引入额外的开销. 如何在虚拟化RDMA的同时, 尽可能地维持原生的性能, 这是一大挑战. RDMA网络传输过程与TCP/IP网络不同, 传统的网络I/O虚拟化方案并不一定适用于RDMA网络虚拟化. 此外, RDMA网络的应用需求广泛, 应用场景众多, 各种场景下RDMA硬件软件栈也不尽相同, 这也给RDMA的虚拟化带来了一定的挑战.

随着云计算的发展, RDMA的虚拟化技术也在不断发展, 覆盖更多的应用场景. 针对不同的应用场景, RDMA的虚拟化方法也不同. 从虚拟化方法的实现上来讲, 总体可以分为硬件辅助的虚拟化方法, 如设备直连和SR-IOV[25,26]; 软件辅助的虚拟化方法, 有半虚拟化方案vRDMA[27]和vSocket[28,29]等, 混合虚拟化方案HyV[30,31]和virtio-RDMA等[32,33], 针对容器的虚拟化方案FreeFlow等[34-36]; 纯软件模拟的方法, 如SoftRoCE[37]和SoftiWARP[38]等.

4.1 硬件辅助虚拟化

硬件辅助的虚拟化方法让RDMA应用直接使用物理网卡设备, 而不用经过虚拟机监视器或其他虚拟机层. 主要有设备直连和SR-IOV两种方案:

(1)设备直连: 由虚拟机监视器将整个RDMA 网卡设备透传给一个虚拟机. 如图2左侧所示, 该方案只能让RDMA网卡设备被一个虚拟机(灰色部分)独占, 此时虚拟机的RDMA性能和原生RDMA一致. 但是, RDMA网卡设备没法与其他虚拟机或虚拟机监视器共享, 虚拟机迁移, 快照等管理功能受到限制.

图 2 设备直连和SR-IOV

(2) SR-IOV: 在支持SR-IOV的RDMA网卡上, 通过RDMA物理网卡PF (Physical Function)拥有的多个VF (Virtual Function), 将一个RDMA物理网卡注册为多个独立的虚拟设备. 如图2右侧所示, 每个VF都有自己的配置空间, 可以分配给一个客户机, 同时虚拟机监视器仍可访问物理设备并管理注册的虚拟设备. 因此, SR-IOV能让多个客户机以及虚拟机监视器共享物理RDMA网卡. SR-IOV的性能非常接近于原生RDMA性能, 但是, 实现上需要硬件的支持, 而且虚拟机的迁移和子网管理等功能受到限制.

Jithin等人分析了SR-IOV技术对于InfiniBand网络的影响, 重点评估了MPI (Message Passing Interface), PGAS (Partitioned Global Address Space)的性能表现, 其结果发现: 在点对点通信中, 对于大多数长度的消息SR-IOV的性能都能与原生网络相当, 但在集合通信中, SR-IOV性能比原生网络要差[25]. 同样针对InfiniBand网络, Musleh等人通过对网卡中断参数进行调优, 提高了SR-IOV系统的响应能力, 减少了15–30%的虚拟化开销[26].

4.2 软件辅助虚拟化

硬件辅助的虚拟化方案, 不仅需要硬件支持, 也不利于云计算环境下虚拟机的统一管理. 软件辅助的虚拟化方法更加灵活, 鉴于不同的应用场景, 可以进一步细分为虚拟机环境下的半虚拟化方法vRDMA、混合虚拟化方法HyV以及容器环境下的FreeFlow框架等.

4.2.1 虚拟机环境

从针对应用来看, 虚拟机环境下的RDMA虚拟化方案主要有面向RDMA应用的vRDMA[27], HyV[30,31]和virtio-RDMA等[32,33], 以及面向Socket应用的vSocket[28,29]等. 从虚拟化方式来看, vRDMA和vSocket等和传统半虚拟化方式相似, HyV和virtio-RDMA则采用了混合虚拟化方式, 两者主要区别在于在RDMA数据路径上, 混合虚拟化方式实现了零拷贝, 绕过了监视器或主机内核.

VMware提出了适应于vSphere[39]的RDMA半虚拟化框架vRDMA, 由分离的前后端驱动组成. 前端驱动位于客户机, 向客户机应用提供虚拟的Verbs接口, 并转发应用的RDMA请求给虚拟机监视器, 后端位于虚拟机监视器, 负责转发来自虚拟机的RDMA请求给RDMA驱动, 由RDMA驱动执行请求. 在跨主机的数据传输时, 数据会经过后端驱动到客户机应用. 因此, vRDMA的数据传输过程并不能完全绕过监视器, 虽然向客户机隐藏了RDMA设备细节, 便于虚拟机迁移和管理, 但也带来了一定的延迟. 此外, 当使用基于事件的完成通知时, 主机和客户机都进行轮询操作, 增加了CPU负载.

HyV的整体框架如图3所示, 将虚拟机中 RDMA的控制路径和数据路径进行了分离. 针对控制路径, HyV采用了半虚拟化技术, 其前端驱动负责截获应用的RDMA请求并转发给监视器的后端驱动, 后端驱动则会继续转发RDMA请求给主机的RDMA网卡驱动. 此外, 后端驱动还会将主机的RDMA资源(例如QP, CQ等)映射到虚拟机中RDMA应用的地址空间中. 同样的, RDMA应用的内存缓冲区也可以通过前后端驱动映射到主机的内存空间. 与传统半虚拟化不同的是, 在完成内存映射后, 数据传输可以直接在虚拟机中RDMA应用的数据路径上进行, 从而绕过监视器, 减少数据传输的延迟.

图 3 HyV框架

在具体实现上, HyV基于KVM[40]虚拟机. 在控制路径上, RDMA利用了半虚拟化I/O框架virtio[41], 虚拟机使用定制的内核驱动转发控制命令, 主机端使用vhost[42]后端驱动. 在数据路径上, 当RDMA应用采用基于事件的通知机制时, 采用加锁共享环形队列的方式, 以减少通知的延迟. 由于HyV在具体实现上均需要定制的虚拟机和主机内核驱动, 因此对RDMA驱动依赖较强, 容器受限于具体的内核版本和网卡硬件.

vRDMA 只适应于vSphere, 而HyV则受限于具体版本的Linux系统. 为了支持HPC环境轻量级系统OSv的RDMA虚拟化, Fan等人提出了与HyV相似的轻量级框架virtio-RDMA. 客户机应用的RDMA请求直接从用户空间转发到主机, 避免客户机中用户态到内核态的上下文切换, 同时减少了对RDMA内核驱动模块的依赖. 此外, 主机后端驱动还可以使用vhost-user[43]. 该驱动位于用户空间, 减少了用户和内核之间的切换次数. 对于同一主机的客户机通信, 该框架采用共享内存的方式进行. 类似virtio-RDMA的还有Mouzakitis等人提出的轻量级的RDMA虚拟化框架[33], 同样利用用户级别的API, 避免对内核驱动的依赖. 不同的是, 在控制路径上, 主机和客户机之间采用共享内存方式来交互.

除了针对RDMA应用的虚拟化方案, 王冬洋等人提出了针对socket应用的RDMA虚拟化框架vSocket, 利用RDMA网络的高性能加速虚拟机之间的socket通信. vSocket同样由前后端驱动组成, 前端驱动中的用户库负责拦截Socket应用的API请求. vSokcet针对socket通信中连接建立和数据传输做不同处理, 为了保障安全性, 连接建立过程通过重用原有的内核协议栈进行. 与HyV不同的是, 当连接建立后, vSocket通过前后端驱动的半虚拟化框架进行数据传输, 因为云环境中的网络往往需要主机对来自客户机的数据包进行封装或者对送往客户机的数据包进行解封, 而RDMA网卡又不支持该功能, 例如VXLAN等. 此外, vSokcet后端驱动直接面向主机Verbs接口, 即数据再通过主机Verbs库进行传输, 因此, vSocket具有一定的通用性, 不像HyV依赖特定内核版本, 维护困难等.

4.2.2 容器环境

随着容器技术的发展和流行, 许多RDMA应用部署在轻量级的容器中. 针对虚拟机环境的RDMA虚拟化方案, 如vRDMA和HyV等, 并不适应于容器环境. 针对容器环境的RDMA虚拟化框架有FreeFlow等[34-36].

FreeFlow[34]在设计上和HyV十分类似, 对RDMA的控制路径和数据路径分开处理. FreeFlow在RDMA应用容器和底层RDMA驱动之间设计了一个路由层, 该层由容器实现, 负责接收来自RDMA应用容器的控制命令, 并进行RDMA网络传输, 实现对RDMA传输的管理和控制. 路由容器和RDMA应用容器之间通过共享内存实现RDMA传输数据的零拷贝.

图4所示, FreeFlow的架构由3部分组成(图中灰色部分), 分别是位于RDMA应用容器的网络库, 路由容器, 和网络编排器组成. 网络库负责为容器中的RDMA应用提供虚拟的与原生一致的Verbs接口. 在控制路径上, 应用容器中的FreeFlow网络库通过套接字或共享内存的进程间通信方式转发命令和参数给路由容器. 每个主机上都有一个路由容器, 和RDMA应用容器位于同一虚拟网络, 路由容器可以直接访问RDMA网卡设备, 并执行接收到的RDMA应用请求. 路由容器通过共享内存的方式获取RDMA应用数据并将网卡接收数据返回给RDMA应用, 在数据路径上做到了零拷贝. 网络编排器负责容器IP的统一管理以及对RDMA网络传输的数据策略, 例如QoS (Quality of Service)或计费服务等.

图 4 FreeFlow框架

FreeFlow适应于容器云计算环境, 强调了对RDMA网络传输数据路径的控制, 提供了数据的QoS和流量计费等策略. 但是, FreeFlow在虚拟化过程中, 在RDMA的控制路径上带来了额外的开销, 采用自旋轮询共享内存的方式需要占用CPU资源, 而采用Socket通信会造成更高的延迟; 在数据路径上, 应用容器和路由容器通过共享内存实现零拷贝, 也带来了一定的安全问题.

除了FreeFlow, Mellanox针对Linux 命名空间和控制组机制, 让多个容器可以共享同一个RDMA物理网卡[35,36]. 该方案将物理RDMA网卡通过MACVLAN技术扩展为多个虚拟接口, 每个容器可以使用一个或多个虚拟接口. 同时, 对于QP, CQ等网卡资源采用更细粒度的控制组机制, 容器可以直接使用硬件资源进行数据传输. 该方案虽然保障了隔离性, 但是使用VLAN网络时, 在容器迁移过程中需要更新路由信息, 因此可移植性比较差. 另外, 由于容器直接使用RDMA网卡进行数据传输, 其控制性比FreeFlow要差.

4.3 纯软件模拟

RDMA网络的普及程度比不上普通以太网. 在缺乏RDMA硬件的环境中, 可以通过软件模拟的方法来实现RDMA通信. 在该方法中, RDMA设备的功能完全通过软件的方式得以实现, 并向用户提供与原生一致的Verbs编程接口. 因此, 无需依赖RDMA网卡、交换机等硬件设备.

RDMA软件模拟方案主要有SoftRocE[37]和SoftiWARP[38]. SoftRocE是一个软件辅助实现的RoCE-Linux驱动程序, 用于在普通以太网上模拟RoCE网络. 而SoftiWARP是用于在以太网络上模拟iWARP网络的驱动程序. 在具体实现上, SoftRocE和SoftiWARP都可以分为用户层和内核层两个部分. 用户层用以支持上层RDMA应用, 用户级库提供了与Verbs一致的接口. 内核层包含了可加载的内核模块, 用以支持内核层次的应用. SoftRoCE的内核模块利用UDP栈进行数据传输, 而SoftiWARP则在TCP内核套接字之上运行.

SoftRoCE和SoftiWARP可以让缺乏RDMA硬件条件的大数据中心或云计算平台构建起可用的RDMA网络. 但是, 由于软件模拟的方法基于TCP/UDP进行网络通信, 它们的性能上受到限制, 在吞吐量和延迟上和传统的以太网TCP/UDP通信较为接近, 和原生RDMA网络通信的性能差距较大. 此外, SoftRoCE或SoftiWARP由于包含内核模块, 也受限于特定版本的Linux系统. 因此, SoftRoCE和SoftiWARP主要用于测试、应用开发以及缺乏RDMA硬件却需要部署RDMA应用的环境.

4.4 评价

目前, RDMA的虚拟化方案主要可以分为硬件辅助和软件辅助的方案. 虚拟机环境下, 软件辅助的虚拟化方案可以细分为半虚拟化(例如vRDMA和vSocket)和混合虚拟化(例如HyV和virtio-rdma等), 两者主要区别在于RDMA数据路径是否绕过主机监视器或内核. 容器环境下, 主要有FreeFlow等虚拟化框架. 此外, 在缺少RDMA硬件条件的场景下, 可以用SoftiWARP或SoftRoCE来模拟RDMA网络.

RDMA虚拟化的目标是既保证网络的高性能, 同时也不损失云环境的特点. 因此, 对于上述方案的虚拟化效果, 我们从RDMA网络性能与云环境特点这两个方面进行讨论. 针对RDMA网络性能, 主要考虑延迟, 吞吐量和CPU负载这3个指标. 针对云环境, 则从隔离性, 可移植性, 控制性3个维度来讨论. 其中:

(1) 隔离性: 每个虚拟机或容器实例都有其专属的RDMA网络资源, 不与其他实例冲突.

(2) 可移植性: 虚拟机或容器实例迁移管理的便捷程度. 例如, 虚拟机的快照和迁移, 容器的迁移等.

(3) 控制性: RDMA虚拟化方案对于RDMA网络传输的控制, 例如流量限制, 流量计费和QoS等.

针对RDMA网络性能, 硬件辅助的虚拟化方案由于没有软件虚拟层的额外开销, 所以延迟和吞吐量可以与原生RDMA相当. 但是SR-IOV需要更多的CPU负载来处理网卡中断以保证网络性能. 软件辅助虚拟化一般将控制路径和数据路径分别处理. 在数据路径上, 像HyV, virtio-RDMA和FreeFlow等框架通过内存映射或共享内存实现了零拷贝, 因此, 延迟和吞吐量较好, 像传统半虚拟化方案的vRDMA和vSocket等, 其数据需要经过监视器或主机内核, 因而延迟较高. 在控制路径上, 通过共享内存的方式交互延迟更低, 但依赖CPU轮询, 通过套接字等转发的方式则可以减少CPU负载, 但延迟更高.

针对云环境特点, 硬件辅助的虚拟化方案往往难以达到所有的维度, 例如, 容器与SR-IOV网卡VF设备的IP绑定而不能灵活迁移. 软件辅助的虚拟化方案中, 混合虚拟化HyV等没有对数据路径进行统一控制, 因而难以实现云环境下的网络限速, QoS等数据策略, FreeFlow则通过对数据路径的控制改进了这些不足. 纯软件模拟的方式, 由于没有硬件限制, 容易具备云环境下的各个特点.

由于RDMA技术的多样性以及RDMA虚拟化应用场景和实现平台的差异性, 本文选择定性分析, 分别从上述七个维度对不同虚拟化方案进行评估, 其中每个维度定性地分为差, 较差, 较好, 好四个级别, 以尽可能体现出不同方案在各个维度上的差异. 各RDAM虚拟化方案的评估结果如表1所示.

表 1 RDMA虚拟化方案评估表

5 展望

目前, 针对不同的云计算环境, 有不同的RDMA虚拟化解决方案. 例如, 针对虚拟机环境的vRDMA和HyV、针对容器环境的FreeFlow、针对普通以太网环境的SoftiWARP和SoftRoCE以及基于硬件的SR-IOV虚拟化等. 我们对以后的RDMA虚拟化技术研究做出了以下展望:

(1) 通用性: 通用性包含针对不同RDMA网络的通用性以及针对不同云计算环境的通用性. 目前, 最新的RDMA网络虚拟化方案都考虑到了对不同RDMA网络的通用性, 例如HyV和FreeFlow都支持3种不同的RDMA网络. 但是, 对于不同云计算环境, 例如不同虚拟方式(容器或虚拟机), 不同的操作系统等, 还没有通用的RDMA解决方案. 通用的RDMA虚拟化方案, 有利于统一部署, 对RDMA应用统一管理, 能适用于复杂的云计算环境.

(2) 安全性: RDMA原生的通信模式和流程是安全的, 但是不同的虚拟化方案可能会引入不同程度的通信安全问题. 通过软件辅助的RDMA虚拟化网络, 如FreeFlow, HyV等, 在转发控制命令的过程中可能被恶意劫持; 通过硬件辅助的方案和纯软件模拟方案在通信方式上与原生RDMA没有区别. 因此, 可以尝试通过额外的安全流程来弥补虚拟化中的安全漏洞, 保证RDMA通信安全.

(3) 编排管理: 无论是使用RDMA应用的虚拟机, 还是容器, 在云计算环境中都需要管理或编排. 编排管理的目的: 通过管理调度来高效利用集群的RDMA网卡资源, 提高整个集群的运行效率, 实现负载均衡等. RDMA网卡作为重要的网络资源, 在如Kubernetes之类的容器编排工具里面如何调度管理, 这是一个值得不断研究优化的方向. 而在虚拟机环境中, 直接使用SR-IOV技术会导致主机无法对虚拟机使用的RDMA资源进行统一管理, 即便在使用类似HyV的软件辅助的虚拟化方法时, 虚拟机无法完全感知主机RDMA资源, 因此也需要思考如何对主机的RDMA资源进行高效动态的分配.

(4) 嵌套虚拟环境: 在实际应用中, 许多RDMA应用容器并非部署于裸机, 而是分布于虚拟机中. 此外, 还有虚拟机的嵌套. 在这些复杂的嵌套虚拟环境下, 如何使RDMA虚拟化, 让最内层的虚拟环境同样能够利用到RDMA网络的高性能, 也是需要考虑的问题.

(5) 智能网卡: 智能网卡或FPGA应用越来越广泛, 已有一些研究将其应用到RDMA网络虚拟化[33], 协助CPU处理网络负载. 与传统网卡相比, 智能网卡可以处理更加复杂的网络负载并支持可替换的数据平面. 在RDMA虚拟化方案中, 也可以思考如何与智能网卡的可编程功能高效结合, 以提高云环境下的RDMA网络性能.

参考文献
[1]
Wang ZG, Liu R, Chen YF, et al. COREMU: A scalable and portable parallel full-system emulator. Proceedings of the 16th ACM Symposium on Principles and Practice of Parallel Programming. San Antonio, TX, USA. 2011. 213–222.
[2]
Song CH, Wang WW, Yew PC, et al. Unleashing the power of learning: An enhanced learning-based approach for dynamic binary translation. Proceedings of the 2019 USENIX Annual Technical Conference. Renton, WA, USA. 2019. 77–89.
[3]
Fang ZM, Min QH, Zhou KY, et al. Transformer: A functional-driven cycle-accurate multicore simulator. Proceedings of DAC Design Automation Conference 2012. San Francisco, CA, USA. 2012. 106–114.
[4]
Zhang WH, Ji XF, Lu YP, et al. Prophet: A parallel instruc-tion-oriented many-core simulator. IEEE Transactions on Parallel and Distributed Systems, 2017, 28(10): 2939-2952. DOI:10.1109/TPDS.2017.2700307
[5]
Wang HJ, Min QH, Li Y, et al. RPSim: A rapid prototyping full-system simulator for SoC software development. 2014 9th IEEE International Conference on Networking, Architecture, and Storage. Tianjin, China. 2014. 259–267.
[6]
Zhang WH, Wang HJ, Lu YP, et al. A loosely-coupled full-system multicore simulation framework. IEEE Transactions on Parallel and Distributed Systems, 2016, 27(6): 1566-1578. DOI:10.1109/TPDS.2015.2455499
[7]
Docker. https://www.docker.com/, 2020. [2020-04-18].
[8]
rKt, a security-minded, standards-based container engine. https://coreos.com/rkt/, 2020. [2020-04-18].
[9]
Abadi M, Barham P, Chen JM, et al. TensorFlow: A system for large-scale machine learning. Proceedings of the 12th USENIX Symposium on Operating Systems Design and Im-plementation. Berkeley, CA, USA. 2016. 265–283.
[10]
RDMA-based apache spark. http://hibd.cse.ohio-state.edu/, 2020. [2020-04-18].
[11]
RDMA-based apache hadoop. http://hibd.cse.ohio-state.edu/, 2020. [2020-04-18].
[12]
PaddlePaddle. https://github.com/PaddlePaddle/Paddle. [2020-03-09].
[13]
[14]
Introduction to InfiniBandTM. https://www.mellanox.com/pdf/whitepapers/IB_Intro_WP_190.pdf, 2010. [2020-04-18].
[15]
陈游旻, 陆游游, 罗圣美, 等. 基于RDMA的分布式存储系统研究综述. 计算机研究与发展, 2019, 56(2): 227-239. DOI:10.7544/issn1000-1239.2019.20170849
[16]
Mitchell C, Geng YF, Li JY. Using one-sided RDMA reads to build a fast, CPU-Efficient key-value store. Proceedings of the 2013 USENIX Annual Technical Conference. San Jose, CA, USA. 2013. 103–114.
[17]
Lu YY, Shu JW, Chen YM, et al. Octopus: An RDMA-enabled distributed persistent memory file system. Proceedings of the 2017 USENIX Conference on Annual Technical Conference. Santa Clara, CA, USA. 2017. 773–785.
[18]
Wei XD, Shi JX, Chen YZ, et al. Fast in-memory transaction processing using RDMA and HTM. Proceedings of the 25th Symposium on Operating Systems Principles. Monterey, Canada. 2015. 87–104.
[19]
Dragojević D, Narayanan M, Hodson O, et al. FaRM: Fast remote memory. Proceedings of the 11th USENIX Sympo-sium on Networked Systems Design and Implementation. Berkeley, CA, USA. 2014. 401–414.
[20]
Verbs library: Libibverbs. https://www.openfabrics.org/downloads/libibverbs/, 2011. [2020-04-18].
[21]
RoCE Introduction. http://www.roceinitiative.org/roce-intro-duction/, 2020. [2020-04-18].
[22]
[23]
Zhang BB, Wang XL, Lai RF, et al. A survey on I/O virtual-ization and optimization. Proceedings of the Fifth Annual ChinaGrid Conference. Guangzhou, China. 2010. 117–123.
[24]
Single root I/O virtualization. http://pcisig.com/specifications/iov/single_root/, 2020. [2020-04-18].
[25]
Jose J, Li MZ, Lu XY, et al. SR-IOV support for virtualiza-tion on infiniband clusters: Early experience. Proceedings of the 13th IEEE/ACM International Symposium on Cluster, Cloud, and Grid Computing. Delft, the Netherlands. 2013. 385–392.
[26]
Musleh M, Pai V, Walters JP, et al. Bridging the virtualization performance gap for HPC using SR-IOV for InfiniBand. Proceedings of the 2014 IEEE International Conference on Cloud Computing. Anchorage, AK, USA. 2014. 627–635.
[27]
Toward a paravirtual vRDMA devicefor VMware ESXi guests. http://download3.vmware.com/software/vmw-tools/papers/VMTJ_issue_2.pdf, 2020. [2020-04-18].
[28]
Wang DY, Fu BZ, Lu G, et al. vSocket: Virtual socket interface for RDMA in public clouds. Proceedings of the 15th ACM SIGPLAN/SIGOPS International Conference on Virtual Execution Environments. Providence, RI, USA. 2019. 179–192.
[29]
王冬洋. 公有云中高性能网络系统研究[博士学位论文]. 合肥: 中国科学技术大学, 2019.
[30]
Pfefferle J, Stuedi P, Trivedi A, et al. A hybrid I/O virtualiza-tion framework for RDMA-capable network interfaces. Proceedings of the 11th ACM SIGPLAN/SIGOPS Interna-tional Conference on Virtual Execution Environments. Is-tanbul, Turkey. 2015. 17–30.
[31]
Pfefferle J. vVerbs: A paravirtual subsystem for RDMA-capable network interfaces[Master’s thesis]. Zurich, Switzer- land:ETH Zurich, 2014.
[32]
Towards a LightweightRDMA Para-Virtualization for HPC. https://mediatum.ub.tum.de/doc/1344417/1344417.pdf, 2020. [2020-04-18]
[33]
Mouzakitis A, Pinto C, Nikolaev N, et al. Lightweight and generic RDMA engine para-virtualization for the KVM hy-pervisor. Proceedings of 2017 International Conference on High Performance Computing & Simulation. Genoa, Italy. 2017. 737–744.
[34]
Kim D, Yu TL, Liu HH, et al. FreeFlow: Software-based virtual RDMA networking for containerized clouds. Pro-ceedings of the 16th USENIX Conference on Networked Systems Design and Implementation. Boston, MA, USA. 2019. 113–126.
[35]
Containing RDMA and high performance computing. http://caxapa.ru/thumbs/808632/containing_rdma_final.pdf, 2020. [2020-04-18].
[36]
[37]
SoftRoCE: Software RDMA over Converged Ethernet. https://github.com/SoftRoCE, 2017. [2020-04-18].
[38]
[39]
VMware vSphere. https://www.vmware.com/products/vsphere.html, 2020. [2020-04-18].
[40]
[41]
[42]
[43]
Vhost-user. https://wiki.qemu.org/Features/VirtioVhostUser. (2018-02-06)[2020-04-18].