为RDMA提供多租赁支持的方法、设备、物理主机及计算机可读存储介质转让专利

申请号 : CN201580068388.1

文献号 : CN107113298B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : S·切里恩T·因加莱R·S·纳拉哈里·万卡塔

申请人 : NICIRA股份有限公司

摘要 :

公开了一种用于在包括多个物理主机的系统中为RDMA提供多租赁支持的方法。每个物理主机托管一组数据计算节点(DCN)。该方法在第一主机的RDMA协议栈处接收包括来自在第一主机上托管的第一DCN的、对从在第二主机上托管的第二DCN进行RDMA数据传输的请求的分组。该方法将与第一DCN相关联的覆盖网络的一组参数发送到第一主机的RDMA物理网络接口控制器。该组参数由RDMA物理NIC使用来利用RDMA数据传输报头和使用覆盖网络的这组参数的覆盖网络报头封装分组,以使用覆盖网络将封装后的分组传输到第二物理主机。

权利要求 :

1.一种用于在系统中提供对远程直接存储器存取(RDMA)的多租赁支持的方法,所述系统包括多个物理主机,每个物理主机托管一组数据计算节点(DCN),所述方法包括:在第一物理主机的RDMA协议栈处,接收分组,所述分组包括来自在第一物理主机上托管的第一DCN的、对从在第二物理主机上托管的第二DCN进行RDMA数据传输的请求;

将与所述第一DCN相关联的覆盖网络的一组参数发送到所述第一物理主机的物理RDMA网络接口控制器(NIC),其中所述一组参数是用于所述物理RDMA NIC利用(i)RDMA数据传输报头和(ii)使用覆盖网络的所述一组参数的覆盖网络报头来封装所述分组,以使用覆盖网络将封装后的分组传输到第二物理主机;

在所述物理RDMA NIC处接收来自所述第二DCN的RDMA数据;以及绕过所述第一物理主机的操作系统和所述第一物理主机的虚拟化软件,将来自所述物理RDMA NIC的RDMA数据插入到所述第一DCN的存储器缓冲区中。

2.如权利要求1所述的方法,其中所述第一DCN和所述第二DCN与不同的互联网协议(IP)地址相关联。

3.如权利要求2所述的方法,还包括利用用户数据报协议(UDP)报头和包括所述第一DCN的IP地址和所述第二DCN的IP地址的IP报头封装所述分组。

4.如权利要求1所述的方法,还包括:

在接收到对RDMA数据传输的请求之前,为所述第一DCN和所述第二DCN之间的RDMA连接创建唯一连接标识符;以及建立所述第一DCN和所述第二DCN之间的RDMA连接,

其中接收来自所述第二DCN的RDMA数据包括:经由RDMA连接接收RDMA数据。

5.如权利要求1所述的方法,还包括:

由所述第一物理主机的RDMA协议栈创建第一队列对,并且由所述第二物理主机的RDMA协议栈创建第二队列对,每个队列对包括发送队列和接收队列;以及将覆盖网络的所述一组参数与所述第一和第二队列对相关联。

6.如权利要求1所述的方法,其中DCN是虚拟机(VM),其中所述覆盖网络是虚拟可扩展局域网(VXLAN)。

7.如权利要求1所述的方法,其中用于所述RDMA数据传输的协议是融合以太网上的RDMA(RoCE)和互联网广域RDMA协议(iWARP)之一。

8.一种用于在系统中提供对远程直接存储器存取(RDMA)的多租赁支持的方法,所述系统包括多个物理主机,每个物理主机托管一组数据计算节点(DCN),其中第一物理主机包括实现逻辑转发元件(LFE)的物理转发元件(PFE),其中在第一物理主机上托管的第一DCN通过虚拟网络接口控制器(NIC)连接到LFE的端口,所述方法包括:在第一物理主机的RDMA协议栈处,接收分组,所述分组包括来自第一DCN的、对从在第二物理主机上托管的第二DCN进行RDMA数据传输的请求;

将与所述第一DCN相关联的覆盖网络的一组参数发送到所述第一物理主机的物理RDMA NIC,其中所述一组参数是用于所述物理RDMA NIC利用(i)RDMA数据传输报头和(ii)使用覆盖网络的所述一组参数的覆盖网络报头来封装所述分组,以使用覆盖网络将封装后的分组传输到第二物理主机;

确定所述LFE的所述端口与覆盖网络的第一隧道端点相关联;以及从所述第一隧道端点的一组参数和与所述第二DCN相关联的第二隧道端点的一组参数确定覆盖网络的所述一组参数。

9.如权利要求8所述的方法,还包括:

由所述第一物理主机的RDMA协议栈创建第一队列对,并且由所述第二物理主机的RDMA协议栈创建第二队列对,每个队列对包括发送队列和接收队列;以及将覆盖网络的所述一组参数与所述第一和第二队列对相关联。

10.一种用于在系统中提供对远程直接存储器存取(RDMA)的多租赁支持的设备,所述系统包括多个物理主机,每个物理主机托管一组数据计算节点(DCN),所述设备包括用于实现根据权利要求1-9中任一项所述的方法的装置。

11.一种其上存储有指令的计算机可读存储介质,所述指令在被一个或多个处理器执行时使得所述一个或多个处理器执行根据权利要求1-9中任一项所述的方法。

12.一种用于托管一组数据计算节点(DCN)并且为所述DCN提供对远程直接存储器存取(RDMA)的多租赁支持的第一物理主机,所述第一物理主机包括:物理RDMA网络接口控制器(NIC);

至少一个处理单元;以及

机器可读存储介质,存储RDMA协议栈,所述RDMA协议栈要由所述处理单元执行以:接收分组,所述分组包括来自在第一物理主机上托管的第一DCN的、对从在第二物理主机上托管的第二DCN进行RDMA数据传输的请求;以及将与所述第一DCN相关联的覆盖网络的一组参数发送到RDMA物理NIC;所述RDMA物理NIC被配置为:使用覆盖网络的所述一组参数利用(i)RDMA数据传输报头和(ii)使用所述一组参数的覆盖网络报头来封装所述分组;

使用覆盖网络将封装后的分组发送到第二物理主机;

在RDMA NIC处接收来自所述第二DCN的RDMA数据;以及绕过所述第一物理主机的操作系统和所述第一物理主机的虚拟化软件,将来自所述RDMA NIC的RDMA数据插入到所述DCN的存储器缓冲区中。

13.如权利要求12所述的第一物理主机,其中所述第一DCN和所述第二DCN与不同的互联网协议(IP)地址相关联。

14.如权利要求13所述的第一物理主机,其中物理RDMA NIC还被配置为利用用户数据报协议(UDP)报头和包括所述第一DCN的IP地址和所述第二DCN的IP地址的IP报头封装所述分组。

15.如权利要求12所述的第一物理主机,其中所述RDMA协议栈还被配置为:在接收到对RDMA数据传输的请求之前,为所述第一DCN和所述第二DCN之间的RDMA连接创建唯一连接标识符;以及建立所述第一DCN和所述第二DCN之间的RDMA连接,

其中接收来自所述第二DCN的RDMA数据包括:经由RDMA连接接收RDMA数据。

16.如权利要求12所述的第一物理主机,其中所述RDMA协议栈还被配置为:由所述第一物理主机的RDMA协议栈创建第一队列对,并且由所述第二物理主机的RDMA协议栈创建第二队列对,每个队列对包括发送队列和接收队列;以及将覆盖网络的所述一组参数与所述第一和第二队列对相关联。

17.如权利要求12所述的第一物理主机,其中DCN是虚拟机(VM),其中所述覆盖网络是虚拟可扩展局域网(VXLAN)。

18.如权利要求12所述的第一物理主机,其中用于所述RDMA数据传输的协议是融合以太网上的RDMA(RoCE)和互联网广域RDMA协议(iWARP)之一。

19.一种用于托管一组数据计算节点(DCN)并且为所述DCN提供对远程直接存储器存取(RDMA)的多租赁支持的第一物理主机,所述第一物理主机包括:物理RDMA网络接口控制器(NIC);

至少一个处理单元;以及

机器可读存储介质,存储RDMA协议栈,所述RDMA协议栈要由所述处理单元执行以:接收分组,所述分组包括来自在第一物理主机上托管的第一DCN的、对从在第二物理主机上托管的第二DCN进行RDMA数据传输的请求,其中第一DCN通过虚拟NIC连接到逻辑转发元件(LFE)的端口,所述LFE由第一物理主机的物理转发元件(PFE)实现;

确定所述LFE的所述端口与覆盖网络的第一隧道端点相关联;以及将与所述第一DCN相关联的覆盖网络的一组参数发送到所述物理RDMA NIC,从所述第一隧道端点的一组参数和与所述第二DCN相关联的第二隧道端点的一组参数确定覆盖网络的所述一组参数;所述物理RDMA NIC被配置为:使用覆盖网络的所述一组参数利用(i)RDMA数据传输报头和(ii)使用所述一组参数的覆盖网络报头来封装所述分组;以及使用覆盖网络将封装后的分组发送到第二物理主机。

20.如权利要求19所述的第一物理主机,其中所述RDMA协议栈还被配置为:由所述第一物理主机的RDMA协议栈创建第一队列对,并且由所述第二物理主机的RDMA协议栈创建第二队列对,每个队列对包括发送队列和接收队列;以及将覆盖网络的所述一组参数与所述第一和第二队列对相关联。

说明书 :

为RDMA提供多租赁支持的方法、设备、物理主机及计算机可读

存储介质

背景技术

[0001] 远程直接存储器存取(RDMA)直接在两个应用之间提供读和写服务,并使得数据直接传输到应用缓冲区而无需中间数据拷贝。 RDMA使得存储器数据传输能够绕过操作系统和内核。
[0002] 目前存在若干种通过网络传输RDMA分组的协议。RDMA传输协议的示例是融合以太网上的RDMA(RDMA over Converged Ethernet,RoCE)和互联网广域RDMA协议(Internet Wide Area RDMA Protocol,iWARP)。RoCE是开放系统互连(OSI)模型第二层网络技术,其通过绕过CPU或内核实现同一以太网上两个主机之间的直接数据传输。
[0003] 目前,RoCE版本1不支持互联网协议(IP)层路由,并且在多租户域中不可用。RoCE版本2确实支持IP层路由,但是在多租户域中不可用。
[0004] 目前没有机制利用在软件定义数据中心中支持多租赁的覆盖网络来使用RDMA数据传输协议(诸如RoCE或iWARP)。
[0005] 当今,源自VM的覆盖网络L2帧的封装用软件处理。这涉及在覆盖网络软件部分上的重要工作,以维护和查找覆盖网络地址映射表,并且在分组被发出到线路上之前用包含相关覆盖网络、UDP、IP和以太网信息的外部报头封装传送分组。
[0006] 类似地,对于接收到的分组,外部报头解封装的相反处理也是软件负责。用软件进行的每次映射表查找和分组的封装/解封装都会导致显著的CPU成本并影响性能。

发明内容

[0007] 一些实施例提供用于在虚拟L3网络上的多租户云计算环境中经由作为L2技术的RDMA数据传输协议(诸如RoCE)使得能够进行 RDMA传输的方法。这使得能够使用软件定义网络(Software Defined Network,SDN)方法来利用RDMA技术的能力并实现多个物理和虚拟网络之间的无缝连接的目标。
[0008] 覆盖网络是在云计算环境中实现多租赁的网络虚拟化技术。一些实施例利用覆盖网络来提供L3可路由性并使得能够在多租户环境中进行RDMA传输。这些实施例通过用覆盖网络路由报头封装RDMA 数据传输协议(诸如RoCE或iWARP)分组使得能够在覆盖网络上进行RDMA数据传输。
[0009] 覆盖网络软件负责维护覆盖网络映射表,以包括到隧道端点IP 的VM媒体访问控制(MAC)地址和其它地址映射。这些实施例中的一些实施例还用特定于每个RDMA连接的覆盖网络地址映射信息对覆盖网络接口控制器(NIC)进行编程,以便将利用覆盖网络报头对RDMA分组的封装卸载到硬件。
[0010] 前面的发明内容旨在用作对本发明的一些实施例的简要介绍。它并不意味着是对本文档中公开的所有发明性主题的介绍或概述。以下的具体实施方式和在具体实施方式中提及的附图将进一步描述在本发明内容中描述的实施例以及其它实施例。相应地,为了理解本文档描述的所有实施例,需要对发明内容、具体实施方式和附图进行全面地审查。此外,所要求保护的主题不受发明内容、具体实施方式和附图中的说明性细节的限制。

附图说明

[0011] 本发明的新颖特征在所附权利要求中阐述。但是,为了解释的目的,在以下图中阐述了本发明的若干实施例。
[0012] 图1概念性地图示本发明的一些实施例的虚拟基础设施的一部分,该虚拟基础设施在位于两个不同主机上的相同租户的两个虚拟机之间启用RDMA。
[0013] 图2是示出RoCE版本1协议的选定数量的字段的简化图。
[0014] 图3是示出RoCE版本2协议的选定数量的字段的简化图。
[0015] 图4概念性地图示在本发明的一些实施例中由请求VM发起的执行RDMA地址解析的过程。
[0016] 图5概念性地图示在本发明的一些实施例中由RDMA栈从覆盖网络地址映射表获得的覆盖网络信息元组。
[0017] 图6概念性地图示在本发明的一些实施例中由请求VM发起的执行RDMA请求RDMA连接的过程。
[0018] 图7是示出在本发明的一些实施例中用于在覆盖网络报头中封装 RDMA协议分组的选定数量的字段的简化图。
[0019] 图8概念性地图示在本发明的一些实施例中当目的地RDMA NIC接收RDMA连接请求时执行的过程。
[0020] 图9概念性地图示在本发明的一些实施例中执行的将RDMA连接请求的接受或拒绝从目的地VM发送到请求VM的过程。
[0021] 图10概念性地图示在本发明的一些实施例中当在请求VM处接收到来自目的地VM的RDMA连接请求的接受或拒绝时执行的过程。
[0022] 图11概念性地图示在本发明的一些实施例中当由已请求建立 RDMA连接的VM创建队列对时执行的过程。
[0023] 图12概念性地图示在本发明的一些实施例中当目的地VM创建队列对时执行的过程。
[0024] 图13概念性地图示在本发明的一些实施例中为请求使用RDMA 进行数据传输而执行的过程。
[0025] 图14概念性地图示在本发明的一些实施例中执行的使用RDMA 将数据写入到目的地VM的存储器中的过程。
[0026] 图15概念性地图示在本发明的一些实施例中执行的使用RDMA 从目的地VM的存储器读取数据的过程。
[0027] 图16概念性地图示在本发明的一些实施例中执行的在请求VM 处从目的地VM接收所请求的RDMA数据的过程。
[0028] 图17概念性地图示实现本发明的一些实施例的电子系统。

具体实施方式

[0029] 在本发明的以下详细描述中,阐述和描述了本发明的许多细节、示例和实施例。但是,对于本领域技术人员来说,将清楚并显而易见的是,本发明不限于所阐述的实施例,并且本发明可以在没有所讨论的一些具体细节和示例的情况下实践。
[0030] 虚拟化是用软件模拟硬件平台(诸如服务器、存储设备或网络资源)的能力。虚拟机(VM)是机器(诸如计算机)的软件实现。虚拟网络是物理网络的抽象。VM可以使用虚拟网络进行通信。一个这样的虚拟网络是覆盖网络,它是第3层网络上的第2层覆盖方案。覆盖网络是在云计算环境中实现多租赁的网络虚拟化技术。覆盖网络的示例包括虚拟可扩展LAN(VXLAN)、通用网络虚拟化封装 (GENEVE)和使用通用路由封装的网络虚拟化(NVGRE)。例如, VXLAN是第3层(L3)网络上的L2覆盖方案。VXLAN在IP (MAC-in-UDP封装)中封装以太网L2帧,并允许VM作为在单独的物理L3网络中操作的虚拟化L2子网的一部分。类似地,NVGRE 使用通用路由封装(GRE)在L3网络上隧道化L2分组。
[0031] 覆盖网络(诸如VXLAN和GENEVE)是在云计算环境中实现多租赁的优选网络虚拟化技术。覆盖网络是L3网络上的L2覆盖方案。覆盖网络实现涉及利用相关覆盖网络外部用户数据报协议(UDP) 报头封装流量,这使得能够在虚拟网络中进行L2流量的路由。
[0032] 一些实施例通过利用覆盖网络路由报头封装RDMA数据传输协议(诸如RoCE)分组来使得能够在覆盖网络上进行RDMA数据传输。参与覆盖网络的主机包括覆盖配置/控制平面、数据平面和覆盖网络分组处理功能的覆盖网络虚拟化软件。主机充当隧道端点。对于 VXLAN覆盖网络,隧道端点被称为虚拟隧道端点(Virtual Tunnel Endpoint,VTEP)。
[0033] 利用特定于每个RDMA连接的覆盖网络地址映射信息对RDMA NIC进行编程,以便提供L3可路由性和多租赁能力。此外,一些实施例将利用覆盖网络报头对RoCE分组的封装卸载到NIC硬件。这需要对当前RDMA软件实现的当前控制平面和数据平面做出改变。
[0034] 图1概念性地图示本发明的一些实施例的虚拟基础设施的一部分,该虚拟基础设施在位于两个不同主机上的相同租户的两个虚拟机之间启用RDMA。如图所示,在若干个物理主机机器130-132上托管若干个VM 105-110。
[0035] 在一些实施例中,虚拟化基础设施由单个云管理系统管理。术语云服务是指通过网络以分布式方式提供的服务(诸如计算、存储等)。虚拟化基础设施包括托管多个租户的一组主机机器120-132。每个租户具有一个或多个VM。为了简单起见,图1仅示出用于一个租户 (即,租户1)的VM 105-110。
[0036] 每个主机120-132包括主机虚拟化软件115(有时被称为管理程序)。该图中所示的主机虚拟化软件115代表可以在这种虚拟化基础设施中的主机上操作的各种类型的虚拟化软件(例如,虚拟机监视器等)。
[0037] 在虚拟化领域中,有人将软件交换机称为虚拟交换机,这是因为它们是软件元件。但是,在本说明书中,软件转发元件被称为物理转发元件(PFE),以便将它们与逻辑转发元件(LFE)区分开,逻辑转发元件(LFE)是不与物理世界绑定的逻辑构造。换句话说,软件转发元件被称为PFE是因为它们在物理世界中存在并操作,而LFE 是在设计逻辑网络时呈现给用户的转发元件的逻辑表示。在一些实施例中,若干个PFE分布在实现租户的LFE的整个网络中,其中每个 PFE是跨不同主机机器操作并且可以在主机机器或不同主机机器上的VM之间执行L3分组转发的LFE的本地实例化。LFE有时被称为虚拟分布式交换机(VDS)。
[0038] 在每个主机130-132中,LFE 120连接到物理网络接口卡 (PNIC)以发送传出分组和接收传入分组。图1中的PNIC 185-187 是具有RDMA能力的NIC。在一些实施例中,LFE被定义为包括一组端口140,通过这组端口140,LFE通过上行链路170连接到 PNIC以发送和接收分组。
[0039] 上行链路170是在LFE 120和具有RDMA能力的NIC 185(或 187)之间中继分组,以便对传入和传出流量执行各种分组处理功能的模块。具有RDMA能力的NIC 185-187是也被称为融合网络适配器(CNA)的PNIC,其被编程为执行以太网分组传输以及RDMA 分组传输。具有RDMA能力的NIC上的每个端口能够运送以太网流量和RDMA流量。在一些实施例中,具有RDMA能力的NIC向主机虚拟化软件115注册两个逻辑设备,一个逻辑设备处理上行链路流量并且一个逻辑设备处理RDMA流量。每个LFE还被定义为具有通过虚拟NIC(VNIC)连接到租户VM 105-110的若干个虚拟端口 145-148。如下所述,RDMA访客设备(或RDMA准虚拟化设备) 
160-162提供VNIC功能以及与RDMA栈175的接口。
[0040] VM中的VNIC功能负责通过相关联的VNIC仿真器(未示出) 在VM与主机虚拟化软件115的网络虚拟化层之间交换分组。每个 VNIC仿真器与VM中的VNIC驱动器交互,以向VM发送数据和从VM接收数据。在一些实施例中,虚拟NIC是由虚拟NIC仿真器实现的物理NIC的软件抽象。例如,在一些实施例中,用于请求和获得连接ID的代码驻留在VNIC仿真器的组件中。换句话说,在一些实施例中,VNIC状态由每个VNIC仿真器实现和维护。虚拟设备 (诸如VNIC)是可方便地像VM的一部分那样进行讨论,但实际上由虚拟化软件使用仿真器实现的软件抽象。但是,每个VM的状态包括其虚拟设备的状态,该状态由底层虚拟化软件进行控制和维护。
[0041] 租户的VM 105-110形成逻辑网络(也被称为专用网络或虚拟网络),其由虚线152概念性地示出。逻辑网络是物理网络的抽象,并且可以为诸如将网络层数据分组封装和解封装成帧、帧同步、媒体访问控制等的服务提供虚拟层2(或数据链路层)。逻辑网络可以跨越一个或多个物理网络并且可以独立于底层物理拓扑和物理网络的组织来组织。每个逻辑网络由租户配置。
[0042] 参与覆盖网络的主机包括覆盖配置/控制平面、数据平面和覆盖网络分组处理功能的覆盖网络虚拟化软件。主机包括(例如,作为 LFE软件的一部分)充当隧道端点的覆盖网络虚拟化软件150。在 VXLAN覆盖网络的示例中,覆盖网络虚拟化软件被称为VXLAN虚拟隧道端点(VTEP)软件,并且隧道端点被称为VTEP。存在与覆盖网络的每个实例相关联的唯一标识符。覆盖网络软件150负责维护映射表以包括例如到隧道端点地址的VM MAC和其它地址映射。托管在独立主机130-132上的租户的VM 105-110之间的覆盖网络流量经由通过通信网络127的隧道125传送。通信网络127可以包括互联网、局域网(LAN)、广域网(WAN)、不同的硬件装备,诸如电缆、路由器、交换机等。
[0043] 图1中的VM 105和110属于同一租户,但分别由两个不同的主机130和132托管。在图1的示例中,两个VM在两个不同的子网上,并且具有两个不同的IP地址。VM 105和110能够使用RDMA 传输数据。每个租户包括虚拟RDMA设备(RDMA访客设备)160- 162。每个主机虚拟化软件115包括RDMA访客设备后端190、 RDMA栈或(RDMA协议栈)175以及RDMA NIC驱动器180。在一些实施例中,RDMA栈是用于在主机中提供RDMA能力的 OpenFabrics Enterprise TM
Distribution(OFED )开源软件。
[0044] RDMA访客设备160-162是准虚拟化设备。准虚拟化是指其中由VM使用的访客操作系统(OS)被修改为用与主机的虚拟化软件直接通信的超级调用(hypercall)替换非可虚拟化指令的技术。虚拟化软件还提供超级调用接口,以便与VM中的准虚拟化设备通信。在一些实施例中,RDMA访客设备160-162利用库调用(例如,“verbs(动词)”库调用)来建立RDMA连接。这些库调用提供所需行为的语义描述(例如,用于提供建立RDMA连接所需的信息)。这些调用用于通过创建和销毁对象(诸如发送和接收工作队列对、完成队列和存储器区域)来管理控制路径对象。这些应用编程接口 (API)调用也用于通过请求工作处理(诸如发布发送和接收以及请求完成事件)来管理数据路径。
[0045] RDMA访客设备后端190将来自访客中的RDMA访客设备(即, VM 105-100)的库调用转换为RDMA栈175调用。访客物理地址空间(或访客虚拟地址空间)被映射(或转换)到主机的物理地址空间 (或机器存储器地址),并传递到具有RDMA能力的NIC 180。具有RDMA能力的NIC维护地址转换表,并直接从/向访客物理存储器执行零拷贝DMA。
[0046] 主机中的RDMA访客设备160-162提供两个功能。RDMA访客设备160-162提供到RDMA栈175的接口和为VM提供VNIC功能的另一个接口。在一些实施例中,RDMA访客设备160-162向主机虚拟化软件115注册两个逻辑设备,一个逻辑设备提供VNIC功能以及一个逻辑设备与RDMA栈接口。
[0047] RDMA访客设备160-162对RDMA访客设备后端190进行库调用以在两个VM之间建立RDMA连接。VM 105中正在请求建立连接的RDMA访客设备160-162与诸如LFE 120上的端口145的端口相关联。如果端口与覆盖网络相关联(例如,端口与VXLAN网络上的VTEP相关联),则与覆盖网络相关的信息(诸如,源VTEP IP、源VTEP MAC、源VTEP VLAN、源VTEP最大总单元(MTU)、内部目的地IP、内部目的地MAC、目的地VTEP IP、目的地VTEP MAC等)通过RDMA栈175和RDMA NIC驱动器180被推送到作为硬件NIC的RDMA NIC 185。然后,RDMA NIC执行RoCE协议封装以及覆盖网络封装,并通过覆盖网络隧道125将结果产生的分组发送到连接到目的地主机132的RDMA NIC 187。
[0048] 目的地RDMA NIC 187通过去除外部覆盖网络报头来解封装分组,并将分组传递到目的地主机132的RDMA栈用于处理。如下面进一步描述的,一旦建立连接,通过绕过源主机和目的地主机的OS 和内核,通过对应的RDMA NIC直接在源VM和目的地VM之间执行对RDMA数据传输的任何请求。
[0049] RDMA连接创建逻辑RDMA连接,其由虚线195概念性地示出。在请求VM 105和目的地VM 110之间创建RDMA连接以在被识别用于RDMA连接的两个VM的应用缓冲区197和199之间直接传输数据。传输数据的物理路径是通过覆盖网络。一旦所请求的数据到达与请求VM的主机130相关联的RDMA NIC 185,RDMA NIC就直接将数据传输到由请求VM 105识别出的应用缓冲区199,从而绕过主机和访客操作系统和内核。
[0050] 虽然通过参考RoCE的示例描述了RDMA数据传输协议,但是本领域普通技术人员将意识到,相同的讨论同样适用于其它RDMA 数据传输协议,诸如iWARP,其通过在数据放置协议(DDP)之上分层RDMA有效载荷来提供RDMA,其中数据放置协议又由流控制传输协议(SCTP)报头和传输控制协议(TCP)报头封装。
[0051] I.使用覆盖网络启用RDMA数据传输
[0052] 在本部分中描述了RoCE作为RDMA网络协议的示例。RoCE 是允许在以太网网络上进行RDMA访问的网络协议。与传统网络相反,RoCE直接向应用提供消息传输服务,这需要应用使用OS的服务来传输消息分组。
[0053] RoCE版本1是用于在同一以太网广播域上的主机之间的 RDMA访问的链路层(即,L2)协议。图2是示出RoCE版本1 (V1)协议的选定数量的字段的简化图。描述RoCE版本1的其它字段的更多详细信息在2010年4月6日的InfiniBandTM行业协会 (InfiniBand Trade Association)的“Supplement to InfiniBandTM Architecture Specification,Volume 1,Release 1.2.1 Annex A16: RDMA over Converged Ethernet(RoCE)”中描述,该规范通过引用被结合于此。
[0054] 如图2所示,RoCE v1分组结构200包括帧校验序列(FCS) 260、不变循环冗余码TM(CRC)250、RDMA分组有效载荷205、 InfiniBand 体系架构(IBA)传输报头210、全局路由报头(GRH) 215、虚拟局域网(VLAN)字段225以及以太网报头230。FCS 260 是用于检测以太网帧的任何途中(in-transit)损坏数据的CRC。不变CRC 250是CRC错误检测码,其覆盖通过网络上的所有交换机和路由器从端到端不变的分组的所有字段。
[0055] RDMA分组有效载荷205是实际的RDMA分组(或消息)。 IBA传输报头210包括诸如用于IBA传输的基本传输报头和扩展传输报头的字段。
[0056] GRH 215包括用于在子网之间路由分组的字段。VLAN字段225 是用于取决于所使用的VLAN的类型来指示帧的端口的VLAN成员资格或帧的端口和协议组合的IEEE 802.1Q标签字段。以太网报头 230包括以太网帧字段,该以太网帧字段包括源MAC地址和目的地 MAC地址。如可以看到的,RoCE v1中的以太网报头230仅包含 L2地址,并且不允许遍历L3路由器。
[0057] 通常,RoCE需要无损网络。在RoCE v1的情况下,这是经由数据中心桥接(DCB)实现的,数据中心桥接是对以太网局域网的一组增强,以在数据中心环境中使用网络。通过添加外部报头,必须跨L3域保持网络的无损性质。在一些实施例中,路由器处的L3无损特征(例如,IP报头中的差分服务代码点(DSCP))用于外部报头。例如,一些实施例使用确保转发(assured forwarding,AF)每跳行为(per-hop behavior,PHB)组来提供交付的保证。这些实施例中的一些实施例利用IP报头中的AF等级3(诸如AF31)来提供分组的无损交付。RoCE v2使用相同的原理。
[0058] 图3是示出RoCE版本2(v2)协议的选定数量的字段的简化图。描述RoCE版本1的其它字段的更多详细信息在2014年9月2日的 InfiniBandTM行业协会(InfiniBandTM Trade Association)的“Supplement to InfiniBandTM Architecture Specification,Volume 1, Release 1.2.1Annex A17:roCEv2”中描述,该规范通过引用被结合于此。
[0059] 如图3所示,RoCE v2分组结构300包括FCS 260、不变CRC 250、RDMA分组有效载荷205、IBA传输报头210、UDP报头305、 IP报头310、VLAN字段225和以太网报头230。FCS 260、不变 CRC 250、RDMA分组有效载荷205、IBA传输报头210、VLAN字段225和以太网报头230与以上参考图2描述的字段类似。
[0060] RoCE v1的GRH字段215被RoCE v2中的UDP报头305和IP 报头310替换。IP报头310允许遍历IP L3路由器。UDP报头305 用作用于IP上的RDMA分组的无状态封装层。如可以看到的,在诸如利用覆盖网络为托管用于多个租户的VM的主机机器提供多租赁支持的软件定义数据中心(SDDC)之类的环境中,图2和图3的帧格式不支持多租赁。
[0061] 请求RDMA连接的应用创建包括发送队列和接收队列的工作队列对(QP)。目的地应用也创建匹配的QP。每个QP表示连接用于 RDMA数据传输的两个应用的通道的端点。应用通过发布工作请求 (WR)(诸如向工作队列发布发送请求或工作完成请求)来请求 RDMA服务。
[0062] 为了建立连接,两个应用初始地利用特殊的QP(被称为QP1)。一旦建立连接,每个应用使用在连接的生命周期期间创建和维护的专用QP。
[0063] A.利用覆盖网络地址映射信息对RDMA NIC进行编程
[0064] 一些实施例提供控制路径改变,其包括利用特定于每个RDMA 连接的覆盖网络地址映射信息对RDMA NIC进行编程。覆盖网络地址映射信息从在覆盖网络虚拟化软件中维护的覆盖网络地址表获得。这使得NIC硬件能够通过参考硬件表来生成外部封装报头。在一些实施例中,RDMA NIC向覆盖网络软件注册其覆盖网络能力以接收覆盖网络地址通知和映射更新。
[0065] 在一些实施例中,RDMA栈在RDMA连接建立阶段期间将覆盖网络映射信息编程到RDMA NIC中。RDMA NIC本地设备驱动器具有相关的基础设施/API,以向覆盖网络软件或RDMA栈注册其覆盖网络能力。此外,为RDMA  NIC本地设备驱动器提供了回调函数 (callback)方面的必要基础设施,以接收覆盖网络配置和更新信息。回调函数是作为参数传递给另一个函数的函数。在一些实施例中,提供回调函数以将覆盖网络信息与RDMA NIC设备相关联/绑定。
[0066] 在一些实施例中,RDMA连接建立阶段利用RDMA连接管理器 (RDMA-CM),并且涉及三个广泛的步骤:RDMA地址解析、 RDMA连接以及RDMA QP创建和配置。以下部分描述如何通过在以上每个连接建立步骤中做出新的程序化改变,利用覆盖网络信息对 RDMA NIC进行编程,并且在本发明的一些实施例中实现对多租赁的支持。
[0067] 以下示例使用一个VM作为请求VM(或客户端),并且另一个 VM作为目的地VM(或服务器)。相同的讨论适用于其中客户端、服务器或两者都是主机(而不是VM)的情况。在这些情况下,目的地IP地址(而不是指VM IP地址)是指在内核VNIC(被称为 vmknic)上配置的、由主机使用以连接到LFE端口以与主机内核外部的实体通信的IP地址。因此,本发明同样适用于涉及内核应用和/ 或VM的RDMA传输。在任一种情况下,RDMA是利用执行将数据从一个存储器区域拷贝到另一个存储器区域的任务的主机CPU执行的。
[0068] 1.RDMA地址解析
[0069] 图4概念性地图示在本发明的一些实施例中由请求VM发起的执行RDMA地址解析的过程400。虚线490以上所示的操作由请求 VM(例如,由图1所示的RDMA访客设备160)执行,而线490下面所示的操作由源主机130的RDMA栈175执行(即,请求VM 105的主机)。
[0070] 如图所示,当RDMA客户端(诸如VM 105)使用RDMA-CM 发起RDMA连接时,客户端创建(在405处)唯一连接管理器标识符(CM_ID)。接下来,该过程通过与覆盖网络相关联的虚拟网络接口向RDMA栈(例如,向RDMA访客设备后端190)发送(在 410处)RDMA地址解析请求。然后,该过程确定(在415处)虚拟网络接口是否与覆盖网络相关联(例如,连接到VM的RDMA访客设备160的LFE端口145是否与诸如VXLAN VTEP的覆盖网络端隧道相关联)。
[0071] 目前,如在现有技术虚拟化环境中所做的那样,当RDMA客户端通过VNIC发起连接时,RDMA栈代表其执行地址解析,以获得对应的路由信息。然后,RDMA栈经由程序化接口(例如, bindSourcelnfo驱动器回调函数)将该虚拟网络接口及其属性 {CM_ID、源IP、源MAC、源VLAN、源MTU}与RoCE设备相关联/绑定。这种绑定由CM_ID唯一识别,并且在RDMA连接过程期间存在。RDMA栈调用驱动器回调函数以将该信息编程到RDMA NIC中。如可以看到的,这种机制不支持其中每个租户可以定义其自己的逻辑网络的覆盖网络(诸如VXLAN)上的多租赁。
[0072] 当过程400确定虚拟网络接口不与覆盖网络相关联时,该过程通过将虚拟网络接口及其属性{CM_ID、源IP、源MAC、源VLAN、源MTU}与RDMA NIC绑定而不提供多租赁支持来执行(在420处) 地址解析(如在现有技术中所完成的)。CMD-ID是唯一连接管理器标识,源IP、源MAC、源VLAN以及源MTU是与请求RDMA连接的VM相关联的VTEP的IP地址、MAC地址、相关联VLAN以及最大总单元(MTU)。通信协议层的MTU是该层可以向前传送的最大协议数据单元(PDU)的大小(以字节为单位)。
[0073] 当虚拟网络接口与覆盖网络相关联时(例如,当连接到VM的 RDMA访客设备160的LFE端口145与诸如VXLAN VTEP的覆盖网络端隧道相关联时),过程400提供用于为RDMA数据传输提供多租赁的新颖机制。具体而言,如果该过程确定(在415处)虚拟网络接口与覆盖网络相关联,则RDMA栈将跳过其部分上的任何地址解析。替代地,RDMA栈依赖覆盖网络虚拟化软件作为获得地址映射信息的源。RDMA栈从由覆盖网络虚拟化软件维护的覆盖网络表检索(在425处)相关联的覆盖网络地址映射信息。
[0074] 图5概念性地图示在本发明的一些实施例中由RDMA栈获得的覆盖网络信息元组。如图所示,对于RDMA连接的给定源VM IP地址和目的地VM IP地址,执行以下地址解析。对于给定目的地IP地址,地址解析中有两个步骤:确定要使用的本地RDMA访客设备以及确定目的地端隧道信息。基于LFE上行链路和配对的RDMA访客设备确定本地RDMA访客设备。目的地端隧道信息通过使用地址解析协议(ARP)确定内部目的地MAC地址(即,目的地VM的 Mac地址)来确定,并且外部目的地端隧道信息(例如,VXLAN目的地VTEP IP和MAC地址)通过经由覆盖网络虚拟化软件使用覆盖网络桥接表来确定。源端隧道的覆盖网络信息(例如,VXLAN源 VTEP MAC地址、VXLAN源VTEP IP地址、源VLAN)被本地存储在由覆盖网络软件维护的覆盖地址映射表中。所需的源端隧道的信息从这些表中检索。
[0075] 在一些实施例中,用于地址解析的元组包括:目的地端隧道 MAC地址505(例如,VXLAN目的地VTEP MAC地址)、源端隧道MAC地址510(例如,VXLAN源VTEP MAC地址)、以太网信息515(例如,以太网类型或以太网分组报头所需的任何其它信息)、源端隧道IP地址520(例如,VXLAN目的地VTEP IP地址)、目的地端隧道IP地址525(例如,VXLAN目的地VTEP IP 地址)、源端隧道VLAN ID 530(例如,源VXLAN网络标识符 (VNI))、源MTU 535(源VTEP MTU)、UDP信息540(例如, UDP源端口、VXLAN端口等)。
[0076] 元组505-540连同创建用于建立RDMA连接的CM-ID 590被发送到启用RDMA的NIC。启用RDMA的NIC使用该信息来通过使用覆盖网络传输分组所需的报头封装RDMA分组。图5所示的字段是封装RDMA分组以使用覆盖网络传输分组可能需要的字段的示例。取决于特定的覆盖网络和特定的网络配置,不同的实施例从主机中的覆盖网络地址映射表检索不同的信息,并将它们推送到启用RDMA 的NIC。
[0077] 回到参考图4,过程400然后将元组500与CM_ID 590相关联 (在430处),使得它对于当前的RDMA连接是唯一的。然后,该过程在RDMA栈表中保存(在435处)覆盖网络地址映射信息和 CM-ID,以便在连接存在期间使用。如下所述,在一些实施例中,覆盖网络地址映射信息和CM-ID在由RDMA栈使用的初始连接数据报的地址句柄结构中使用。地址句柄是描述从本地端口到远程端口的路径的对象。地址句柄描述在QP中使用的RDMA连接的另一端。
[0078] 在OFEDTM编程模型中,通过提供地址句柄建立QP连接。例如,对于“可靠连接QP”,在连接建立期间,利用指定目的地全局标识符(GID)、目的地本地标识符(LID)和目的地MAC地址的地址句柄修改QP。这是在面向连接的可靠连接期间的一次性操作。在“不可靠数据报(UD)QP”的情况下,在UD队列对上发送的每个工作请求应该具有指定目的地GID、LID、目的地MAC的地址句柄。
[0079] 一些实施例改变地址句柄以反映目的地VTEP信息。其它实施例将RDMA CM-ID与地址句柄进行映射。CM-ID具有可传递给 RDMA NIC驱动器的整个元组(源VTEP和目的地VTEP)。在一些实施例中,RDMA NIC驱动器将该CM-ID绑定信息与地址句柄进行组合来封装用于给定后发送操作的分组。在接收路径中,在一些实施例中,RDMA NIC除了解封装内部报头之外还解封装外部报头,并将RDMA有效载荷发布到对应的QP。但是,RDMA NIC需要在发布到应用缓冲区之前验证外部报头和内部报头。
[0080] 2.RDMA连接
[0081] 图6概念性地图示在本发明的一些实施例中由请求VM(或客户端)发起的请求RDMA连接的过程600。虚线690以上所示的操作由请求VM(例如,由图1所示的RDMA访客设备160)执行,线 695下面所示的操作由RDMA NIC(例如,RDMA NIC 185)执行,并且线690和695之间所示的操作由源主机130的RDMA栈175 (即,请求VM 105的主机)执行。如图所示,该过程使用先前创建的CM-ID发送(在605处)连接到目的地VM的RDMA连接请求。
[0082] 对于经由RDMA-CM的RDMA连接请求,使用被称为通用服务接口(GSI)QP或QP1的特殊QP类型将初始连接数据报(被称为管理数据报或MAD)发送到RDMA连接的目的地端。在一些实施例中,新的字段被添加到由RDMA虚拟化栈使用的地址句柄结构中。这些新的字段保持如以上通过参考图4所述计算的覆盖网络地址映射元组。RDMA虚拟化栈将MAD缓冲区连同修改后的地址句柄结构一起向下发送(在610处)到RDMA NIC。
[0083] 然后,RDMA NIC使用(在615处)覆盖网络地址映射信息利用覆盖网络外部报头封装RDMA数据报。具体而言,在一些实施例中,RDMA NIC从地址句柄结构中检索CM_ID、源地址和覆盖网络映射信息。RDMA NIC基于修改后的地址句柄结构计算外部 VXLAN报头,并利用它封装内部分组(连接MAD)。然后, RDMA NIC将封装后的分组在虚拟网络线路上发出到(在620处) 目的地VM(或服务器)。
[0084] 图7是示出在本发明的一些实施例中用于在覆盖网络报头中封装 RDMA协议分组的选定数量的字段的简化图。如图所示,封装后的分组结构700包括RDMA分组725。RDMA分组725例如是图2所示的RoCE v1分组200、图3所示的RoCE v2分组300、iWARP分组、或将在两个VM之间进行交换的任何其它RDMA协议分组。
[0085] RDMA分组725被包裹在包括覆盖网络标识的覆盖网络报头735 (例如,包括VXLAN ID的VXLAN报头)中。该内部帧被进一步包裹在UDP报头740中(被称为外部UDP)。结果被进一步包裹在外部IP报头790中,其中外部IP报头790包括目的地端隧道的IP 地址745(例如,VXLAN目的地VTEP IP地址)和源端隧道的IP 地址750(例如,VXLAN源VTEP IP地址)。结果被进一步包裹在外部以太网报头795(其包括外部虚拟局域网(VLAN)标签信息 (例如,VXLAN标签信息)和以太网类型755、源端隧道MAC地址760(例如,VXLAN源VTEP MAC地址)和目的地端隧道MAC 地址765)(例如,VXLAN目的地VTEP MAC地址)中。最后,覆盖网络封装包括可选的外部FCS 770。通过进行外部包裹,覆盖网络为跨不同网络的VM创建逻辑网络。覆盖网络(例如,VXLAN) 在第3层网络之上创建第2层网络。字段735-765和可选的外部FCS 770在本文中被称为外部报头,并且封装后的分组700被称为外部分组。
[0086] 图7是示出用于覆盖网络封装的选定数量的字段的简化图。对于覆盖网络的示例,描述用于VXLAN封装的其它字段的进一步详细信息在由M.Mahalingam等人所写的、2011年8月26日的网络工作组(Network Working Group)的“VXLAN:A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks”中描述,该文章通过引用被结合于此。虽然为了简单起见,本文档参考该选定字段,但是本领域普通技术人员将意识到,封装用于覆盖网络 (诸如VXLAN、GENEVE等)的分组需要利用覆盖网络的整个外部报头封装分组。
[0087] 在图7中,使用外部包裹通过L3网络交付L2有效载荷。例如,外部源IP源地址是源VTEP的IP地址,并且外部目的地IP地址是目的地VTEP的IP地址。外部源MAC地址是源VTEP的MAC地址,并且外部目的地MAC地址是在从源VTEP到目的地VTEP的路径上的下一个网络实体(诸如网关的路由器)的MAC地址。
[0088] 在一些实施例中,用于VXLAN的VTEP包括以下组件:作为 LFE的一部分并用于VXLAN数据路径处理(包括转发表的维护) 的VM内核组件;运送VXLAN流量的VM内核NIC虚拟适配器;以及指示VXLAN流量如何通过物理NIC被送入和送出主机VTEP 的VXLAN端口组。
[0089] 外部IP报头790允许遍历IP L3路由器。UDP报头740用作用于IP上的RDMA分组的无状态封装层,取决于所使用的VLAN的类型,VLAN字段755是用于指示帧的端口的VLAN成员资格或帧的端口和协议组合的IEEE 802.1Q标签字段。
[0090] 图8概念性地图示在本发明的一些实施例中当目的地RDMA NIC(例如,图1所示的RDMA NIC 187)接收RDMA连接请求时执行的过程800。虚线890以上所示的操作由目的地VM(例如,由图1所示的RDMA访客设备162)执行,线895下面所示的操作由 RDMA NIC(例如,RDMA NIC 187)执行,并且线890和895之间所示的操作由目的地主机132的RDMA栈175执行。
[0091] 如图所示,该过程通过覆盖网络从请求VM接收(在805处) 封装在覆盖网络报头中的RDMA连接请求。例如,RDMA连接的接收端的RDMA NIC在QP1上接收覆盖网络封装的MAD分组。然后,该过程去除(在810处)与覆盖网络有关的分组的外部报头。来自外部报头的覆盖网络信息被消费和验证(例如,对照VXLAN网络中的源VXLAN/VTEP信息进行)。该过程确定(在815处)覆盖网络信息是否有效。例如,传入的VXLAN信息是否与用于接收VM的 VXLAN匹配。如果不匹配,则丢弃分组(在820处)。
[0092] 否则,该过程(使用接收RDMA NIC)剥离外部覆盖网络报头,并将MAD连同外部覆盖网络报头信息(由RDMA NIC从分组中提取)向上发送(在825处)到用于连接请求接受/拒绝的RDMA栈。然后,该过程通过RDMA栈从MAD缓冲区的地址句柄结构中读取字段,并了解覆盖网络映射信息。然后,该过程存储(在825处)所请求的连接的覆盖映射地址。该过程在目的地VM处接收(在830 处)用于接受或拒绝的连接请求。
[0093] 图9概念性地图示在本发明的一些实施例中执行的将RDMA连接请求的接受或拒绝从目的地VM发送到请求VM的过程900。虚线 990以上所示的操作由目的地VM执行,线995下面所示的操作由目的地RDMA NIC执行,并且线990和995之间所示的操作由目的地主机的RDMA栈执行。
[0094] 如图所示,连接请求由目的地VM处理(在905处)。接下来,过程900将对RDMA连接请求的响应发送(到910处)到RoCE虚拟化软件。
[0095] RoCE虚拟化软件已基于以上参考图8描述的操作825了解覆盖网络路由信息。通过RDMA栈,该过程在学习过程期间从保存在 RDMA栈表中的信息获得(在915处)与CM-ID相关联的覆盖网络地址映射信息。在经由QP1上的MAD分组发送连接接受响应时,目的地主机上的RoCE虚拟化软件利用覆盖网络映射表填充地址句柄结构,并将MAD分组(在920处)发送到NIC。RoCE硬件从 MAD缓冲区的地址句柄结构中查找覆盖网络信息、构建外部覆盖网络报头、并利用覆盖网络外部报头封装MAD响应以及在虚拟网络上发送(在925处)分组。
[0096] 图10概念性地图示在本发明的一些实施例中当在请求VM处接收到来自目的地VM的RDMA连接请求的接受或拒绝时执行的过程 1000。虚线1090以上所示的操作由请求RDMA连接的VM执行,线1095下面所示的操作由与请求VM的主机相关联的RDMA NIC 执行,并且线1090和1095之间所示的操作由请求VM的主机的 RDMA栈执行。
[0097] 如图所示,该过程在RDMA NIC处通过覆盖网络从目的地VM 接收(在1005处)对RDMA地址解析请求的响应。RDMA NIC去除(在1010处)与覆盖网络相关的分组的外部报头。来自外部报头的覆盖网络信息被消费和验证(例如,对照VXLAN网络中的源 VXLAN/VTEP信息进行)。该过程确定(在1015处)覆盖网络信息是否有效。如果无效,则丢弃分组(在1020处)。
[0098] 否则,该过程(使用RDMA NIC)剥离外部覆盖网络报头,并向请求VM发送(在1025处)RDMA连接请求响应。然后,该过程由请求VM接收并处理(在1030处)对RDMA连接请求的响应。
[0099] 3.RDMA队列对创建
[0100] 在RDMA连接完成之前,RDMA客户端创建用于连接的QP。作为RDMA连接的一部分,客户端(例如,请求VM)将客户端连接参数传递到服务器(例如,目的地VM)。连接参数之一是与创建的QP相关联的QP号。服务器接收该连接信息。在服务器发送连接接受之前,服务器已经创建了QP。作为连接接受的一部分,服务器将QP号发送给客户端。
[0101] 初始连接MAD通过QP1进行交换。一旦建立RDMA连接, RDMA客户端和RDMA服务器就使用为连接创建的QP运送用于该连接的RDMA(例如RoCE)流量/数据。在一些实施例中,一旦进来对数据队列对创建的请求,RDMA栈就修改队列对属性。作为修改队列对属性的一部分,覆盖网络地址映射信息被添加到队列对的属性中。
[0102] 作为修改队列对的一部分,队列对的属性在RoCE硬件中进行编程。覆盖网络映射信息在硬件中与该队列对相关联。换句话说,一旦为连接创建了QP,则QP就通过连接的地址句柄进行修改。
[0103] 图11概念性地图示在本发明的一些实施例中当由请求建立 RDMA连接的VM创建队列对时执行的过程1100。虚线1190以上所示的操作由请求VM执行,线1195下面所示的操作由与请求VM 的主机相关联的RDMA NIC执行,并且线1190和1195之间所示的操作由请求VM的主机的RDMA栈执行。
[0104] 如图所示,该过程向RDMA栈发送(在1105处)QP创建请求以创建用于连接的QP。通过RDMA栈,该过程创建(在1110处) 包括与连接相关联的覆盖网络映射信息的QP。然后,该过程将QP 发送(在1115处)到RDMA NIC。然后,该过程通过包括在QP中的地址映射信息来存储(在1120处)。
[0105] 图12概念性地图示在本发明的一些实施例中当目的地VM创建队列对时执行的过程1200。虚线1290以上所示的操作由目的地VM 执行,线1295下面所示的操作由与目的地VM的主机相关联的 RDMA NIC执行,并且线1290和1295之间所示的操作由目的地 VM的主机的RDMA栈执行。
[0106] 如图所示,该过程向RDMA栈发送(在1205处)QP创建请求以创建用于连接的QP。在一些实施例中,在接收到对RDMA连接的请求之前,请求VM(或服务器)创建用于RDMA连接的QP。然后,服务器监听RDMA连接请求。一旦接收到对连接的请求,该过程将QP分配(在1210处)给所请求的连接。该过程然后将与连接相关联的覆盖网络映射信息包括(在1215处)到QP中。然后,该过程将QP发送(在1220处)到RDMA NIC。该过程还会复刻 (fork)和创建(在1225处)另一个QP并监听下一个RDMA连接请求。该过程还通过RDMA NIC来存储(在1220处)包括在QP中的地址映射信息。
[0107] B.建立的连接上的RDMA数据传输
[0108] 一旦QP的属性在RDMA NIC硬件中利用覆盖网络信息进行编程,在所创建的QP上向下发送的、被称为工作请求(WR)的任何数据消息在它们被发出到虚拟网络线路上之前,由RDMA NIC硬件利用相关的覆盖网络外部报头进行封装。
[0109] 图13概念性地图示在本发明的一些实施例中为请求使用RDMA 进行数据传输而执行的过程1300。虚线1390以上所示的操作由请求 VM执行,线1395下面所示的操作由与请求VM的主机相关联的 RDMA NIC执行,并且线1390和1395之间的操作由请求VM的主机的RDMA栈执行。
[0110] 如图所示,该过程将来自请求VM的RDMA请求发送(在1305 处)到RDMA NIC。RDMA请求指定目的地VM中所请求的缓冲区以及为连接创建的QP。在RDMA写请求的情况下,要写入到目的地VM存储器中的数据也包括在RDMA请求中。该过程然后使用 (在1315处)与QP相关联的覆盖网络地址映射信息来利用覆盖网络外部报头封装RDMA数据报。该过程然后通过网络将封装的RDMA数据报发送(在1320处)到目的地VM。
[0111] 图14概念性地图示在本发明的一些实施例中执行的使用RDMA 将数据写入到目的地VM的存储器中的过程1400。虚线1490以上所示的操作由目的地VM执行,线1495下面所示的操作由与目的地 VM的主机相关联的RDMA NIC执行,并且在线1490和1495之间所示的操作由目的地VM的主机的RDMA栈执行。
[0112] 如图所示,该过程在目的地RDMA NIC处通过覆盖网络从请求 VM接收(在1405处)RDMA请求。RDMA数据请求指定目的地 VM中所请求的缓冲区。该过程去除(在1410处)与覆盖网络相关的分组的外部报头。来自外部报头的覆盖网络信息被消费和验证(例如,对照VXLAN网络中的源VXLAN/VTEP信息进行)。该过程确定(在1415处)覆盖网络信息是否有效。如果无效,则丢弃分组 (在1420处)。
[0113] 否则,通过接收RDMA NIC,该过程使用(在1425处)RDMA 请求中的存储器区域信息将在RDMA分组中接收到的数据从RDMA NIC直接写入到目的地VM的存储器缓冲区中,从而绕过目的地主机操作系统和内核(即,零拷贝传输零拷贝传输)。零拷贝是指其中中央处理单元(CPU)不执行将数据从一个存储器区域复制到另一个存储器区域的任务的操作。
[0114] 图15概念性地图示在本发明的一些实施例中执行的使用RDMA 从目的地VM的存储器读取数据的过程1500。虚线1590以上所示的操作由目的地VM执行,线1595下面所示的操作由与目的地VM的主机相关联的RDMA NIC执行,并且线1590和1595之间所示的操作由目的地VM的主机的RDMA栈执行。
[0115] 如图所示,该过程在目的地RDMA NIC处通过覆盖网络接收 (在1505处)来自请求VM的RDMA请求。RDMA数据请求指定目的地VM中所请求的缓冲区。该过程去除(在1510处)与覆盖网络相关的分组的外部报头。来自外部报头的覆盖网络信息被消费和验证(例如,对照VXLAN网络中的源VXLAN/VTEP信息进行)。该过程确定(在1515处)覆盖网络信息是否有效。如果无效,则丢弃分组(在1520处)。
[0116] 否则,通过接收RDMA NIC,该过程使用(在1525处)RDMA 请求中的存储器区域信息从目的地VM的存储器缓冲区1580直接提取数据,从而绕过目的地主机操作系统和内核(即,执行零拷贝传输)。
[0117] 然后,该过程使用与连接队列对相关联的地址映射信息来利用覆盖网络外部报头封装(在1530处)包含所请求的数据的RDMA数据报。然后,该过程通过覆盖网络将封装的RDMA数据报发送(在 1535处)到请求VM。
[0118] 图16概念性地图示在本发明的一些实施例中执行的在请求VM 处从目的地VM接收所请求的RDMA数据的过程1600。虚线1690 以上所示的操作由请求VM执行,线1695下面所示的操作由与请求 VM的主机相关联的RDMA NIC执行,并且线1690和1695之间所述的操作由请求VM的主机的RDMA栈执行。
[0119] 如图所示,该过程通过覆盖网络从目的地VM接收(在1605处) 包括所请求的数据的一个或多个数据报。然后,该过程去除(在 1610处)与覆盖网络相关的分组的外部报头。然后,该过程确定 (在1615处)覆盖网络是否有效。如果无效,则该过程丢弃(在 1620处)数据报。
[0120] 否则,通过RDMA NIC,该过程使用(在1625处)RDMA数据分组中的存储器区域信息将数据直接移动到请求VM的存储器缓冲区1580中。
[0121] 如从图4、图6和图8-13中可以看到的,用于地址解析、连接创建和QP创建的命令通过RDMA栈来处理。如从图14-16中可以看到的,实际的RDMA数据传输直接向/从VM的存储器缓冲区和 RDMA NIC完成,从而绕过主机和访客操作系统的操作系统内核。
[0122] II.电子系统
[0123] 许多上述特征和应用被实现为软件过程,其被指定为记录在计算机可读存储介质(也被称为计算机可读介质)上的指令集。当这些指令被一个或多个处理单元(例如,一个或多个处理器、处理器核心、或其它处理单元)执行时,它们使得该(一个或多个)处理单元执行在指令中指示的动作。计算机可读介质的示例包括,但不限于,CD- ROM、闪存驱动器、RAM芯片、硬盘驱动器、EPROM等。计算机可读介质不包括无线或通过有线连接传递的载波和电子信号。
[0124] 在本说明书中,术语“软件”是指包括驻留在只读存储器中的固件或者存储在磁存储设备中的应用,其可以被读入到存储器中以供处理器处理。此外,在一些实施例中,若干软件发明可以被实现为更大程序的子部分,同时保持明显的软件发明。在一些实施例中,若干软件发明也可以被实现为单独的程序。最后,一起实现本文所描述的软件发明的单独程序的任意组合是在本发明的范围之内。在一些实施例中,当软件程序被安装,以在一个或多个电子系统上操作时,软件程序定义运行和执行该软件程序的操作的一个或多个特定的机器实现。
[0125] 图17概念性地示出了实现本发明的一些实施例的电子系统1700。电子系统1700可以用于执行任何上述的控制、虚拟化或操作系统应用。电子系统1700可以是计算机(例如,台式计算机、个人计算机、平板计算机、服务器计算机、大型机、刀片计算机等)、电话、PDA 或任何其它种类的电子设备。这种电子系统包括用于各种其它类型的计算机可读介质的各种类型的计算机可读介质和接口。电子系统 1700包括总线1705、(一个或多个)处理单元1710、系统存储器 1725、只读存储器(ROM)1730、永久存储设备1735、输入设备 1740、以及输出设备1745。
[0126] 总线1705统一地表示可通信地连接电子系统1700的众多内部设备的所有系统、外设和芯片组总线。例如,总线1705将(一个或多个)处理单元1710与只读存储器1730、系统存储器1725、永久存储设备1735可通信地连接。
[0127] 从这些各种存储器单元中,(一个或多个)处理单元1710检索要执行的指令和要处理的数据,以便执行本发明的过程。(一个或多个)处理单元在不同实施例中可以是单个处理器或多核心处理器。
[0128] 只读存储器1730存储由(一个或多个)处理单元1710和电子系统的其它模块所需的静态数据和指令。另一方面,永久存储设备 1735是读和写存储器设备。这个设备是即使当电子系统1700关闭时也存储指令和数据的非易失性存储单元。本发明的一些实施例使用大容量存储设备(诸如磁或光盘及其对应的盘驱动器)作为永久存储设备1735。
[0129] 其它实施例使用可移除存储设备(诸如软盘、闪存驱动器等)作为永久存储设备。与永久存储设备1735一样,系统存储器1725是读和写存储器设备。但是,与存储设备1735不同,系统存储器是易失性读和写存储器,诸如随机存取存储器。系统存储器存储处理器在运行时需要的一些指令和数据。在一些实施例中,本发明的过程被存储在系统存储器1725、永久存储设备1735和/或只读存储器1730中。从这些各种存储器单元中,(一个或多个)处理单元1710检索要执行的指令和要处理的数据,以便执行一些实施例的过程。
[0130] 总线1705还连接到输入和输出设备1740和1745。输入设备使用户能够传递信息和选择到电子系统的命令。输入设备1740包括字母数字键盘和定点设备(也称为“光标控制设备”)。输出设备 1745显示由电子系统生成的图像。输出设备包括打印机和显示设备,诸如阴极射线管(CRT)或液晶显示器(LCD)。一些实施例包括诸如用作输入和输出设备两者的触摸屏的设备。
[0131] 最后,如在图17中所示,总线1705还通过网络适配器(未示出) 将电子系统1700耦合到网络1725。以这种方式,计算机可以是计算机的网络(诸如局域网(“LAN”)、广域网(“WAN”)、或内联网、或诸如互联网之类的网络的网络)的一部分。电子系统1700 的任何或所有组件可以与本发明结合使用。
[0132] 一些实施例包括电子组件,诸如微处理器、在机器可读或计算机可读介质(可替代地称为计算机可读存储介质、机器可读介质或机器可读存储介质)中存储计算机程序指令的存储设备和存储器。这种计算机可读介质的一些示例包括RAM、ROM、只读压缩盘(CD- ROM)、可记录压缩盘(CD-R)、可重写压缩盘(CD-RW)、只读数字多功能盘(例如,DVD-ROM,双层DVD-ROM)、各种可记录/可重写DVD(例如,DVD-RAM、DVD-RW、DVD+RW等)、闪存存储器(例如,SD卡、小型SD卡、微型SD卡等)、磁和/或固态硬盘驱动器、只读和可记录盘、超密度光盘、任何其它光或磁介质、以及软盘。计算机可读介质可以存储可由至少一个处理单元执行的并且包括用于执行各种操作的指令集的计算机程序。计算机程序或计算机代码的示例包括诸如由编译器产生的机器代码,以及包括由计算机、电子组件、或利用解释器的微处理器执行的更高级代码的文件。
[0133] 虽然以上讨论主要涉及执行软件的微处理器或多核处理器,但是一些实施例通过一个或多个集成电路(诸如专用集成电路(ASIC) 或现场可编程门阵列(FPGA))来执行。在一些实施例中,这种集成电路执行在该电路自身上存储的指令。
[0134] 如在本说明书中所使用的,术语“计算机”、“服务器”、“处理器”、以及“存储器”都是指电子或其它技术设备。这些术语不包括人或人群。为了本说明书的目的,术语显示或正在显示意味着在电子设备上显示。如本说明书中所使用的,术语“计算机可读介质”、“一个或多个计算机可读介质”和“机器可读介质”被完全限制为以由计算机可读的形式存储信息的、有形的、物理的对象。这些术语不包括任何无线信号、有线下载信号、以及任何其它短暂或暂时性信号。
[0135] 虽然本发明已经参考许多特定细节进行了描述,但是本领域普通技术人员将认识到,在不脱离本发明的精神的情况下,本发明可以以其它特定形式体现。此外,多个图(包括图4、6和8-15)概念性地示出了过程。这些过程的特定操作可能没有以与所示出和描述的确切顺序执行。特定操作可能没有在一系列连续的操作中执行,并且不同的特定操作可能在不同的实施例中执行。此外,过程可以利用几个子过程来实现,或者作为较大的宏过程的一部分来实现。
[0136] 贯穿本说明书提到包括虚拟机(VM)的计算和网络环境。但是,虚拟机只是数据计算节点(DCN)或数据计算端节点(也被称为可寻址节点)的一个示例。DCN可以包括非虚拟化物理主机、虚拟机、在主机操作系统之上运行而不需要管理程序或单独的操作系统的容器、以及管理程序内核网络接口模块。
[0137] 在一些实施例中,VM使用由虚拟化软件(例如,管理程序、虚拟机监视器等)虚拟化的主机的资源与在主机上其自己的客户操作系统一起操作。租户(即VM的所有者)可以选择在客户操作系统之上要操作哪些应用。另一方面,一些容器是在主机操作系统之上运行而不需要管理程序或单独的客户操作系统的构造。在一些实施例中,主机操作系统使用名称空间将容器彼此隔离,并且因此提供在不同容器内操作的不同应用组的操作系统级隔离。这种隔离类似于在虚拟化系统硬件的管理程序虚拟化环境中提供的VM隔离,并且因此可以被视为隔离在不同容器中操作的不同应用组的一种虚拟化形式。这种容器比VM更轻巧。
[0138] 在一些实施例中,管理程序内核网络接口模块是包括具有管理程序内核网络接口和接收/发送线程的网络栈的非-VM DCN。管理程序内核网络接口模块的一个示例是作为TMVMware公司的ESXi 管理程序的一部分的vmknic模块。
[0139] 本领域普通技术人员将认识到,虽然本说明书提到VM,但是给出的示例可以是任何类型的DCN,包括物理主机、VM、非-VM容器和管理程序内核网络接口模块。事实上,在一些实施例中,示例网络可以包括不同类型的DCN的组合。
[0140] 因此,鉴于上述,本领域普通技术人员将理解,本发明不受上述说明性细节的限制,而是由所附权利要求来限定。