一种基于持久性内存的远程数据传输方法转让专利

申请号 : CN202010177563.3

文献号 : CN111404931B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 舒继武陆游游李俊儒汪庆

申请人 : 清华大学

摘要 :

本发明涉及持久性内存的远程数据传输技术领域,具体涉及一种基于持久性内存的远程数据传输方法,包括RDMA连接的客户端和配置有持久性内存的服务端,客户端向服务端发送远程数据传输请求,当接收到返回结果,提供返回消息池地址和回调函数的方式对返回结果进行操作;客户端通过负载均衡策略连接到服务端,客户端提供远程过程调用操作远端持久性内存和远程直接读写内存的数据传输方式,该远程直接读写内存支持远程持久化写内存;服务端接收远程数据传输请求并发送返回结果;服务端管理持久性内存与消息池,并支持不同服务端之间调用嵌套远程过程调用。该方法具备高效的多客户端并发远程数据操作性能、服务端可扩展能力和持久性内存友好性。

权利要求 :

1.一种基于持久性内存的远程数据传输方法,其特征在于,包括:客户端向服务端发送远程数据传输请求,当接收到所述服务端根据所述远程数据传输请求发出的返回结果,提供返回消息池地址和回调函数的方式对所述返回结果进行操作;

其中,所述客户端和所述服务端的连接方式为RDMA连接,所述客户端通过负载均衡策略连接到所述服务端,所述客户端提供远程过程调用操作远端持久性内存的数据传输方式和远程直接读写内存的数据传输方式,所述远程直接读写内存支持远程持久化写内存;

所述服务端接收所述客户端发送的所述远程数据传输请求并处理所述远程数据传输请求得到返回结果,将所述返回结果发送至所述客户端;其中,所述服务端配置有持久性内存且与所述客户端RDMA连接,所述服务端管理所述持久性内存与消息池,并支持不同服务端之间调用嵌套远程过程调用;

其中,所述远程过程调用操作为所述客户端调用远程的函数执行远程数据传输,所述调用远程的函数为所述客户端指定调用信息的处理方式;所述服务端管理所述持久性内存包括所述服务端进行内存注册和注册自定义调用函数。

2.根据权利要求1所述的一种基于持久性内存的远程数据传输方法,其特征在于,所述RDMA连接的建立过程中,所述客户端通过中心化的管理节点获取唯一的客户端ID,所述服务端根据所述客户端ID分配负载均衡的连接线程;

所述远程过程调用与所述远程持久化写内存的操作采用RDMA的WRITE_WITH_IMM原语进行数据通信,所述远程直接读写通过RDMA的WRITE原语与RDMA的READ原语通信。

3.根据权利要求1所述的一种基于持久性内存的远程数据传输方法,其特征在于,所述负载均衡策略连接包括若干个所述客户端均匀地与所述服务端的多个线程连接,不同的服务端之间线程均匀连接。

4.根据权利要求2所述的一种基于持久性内存的远程数据传输方法,其特征在于,所述远程过程调用的接口包括同步、异步和嵌套调用接口,所述接口支持变长和不定个数参数;

所述调用信息包括调用函数的服务端唯一编号,调用的函数名称,可变长可多参数的参数列表和返回值处理方式;

所述远程过程调用操作远端持久性内存,包括:所述客户端将指定的所述调用信息填入所述客户端的客户端消息池,并通过RDMA连接直接写入到所述服务端的服务端消息池,以供所述服务端根据所述调用信息执行调用函数,并将执行后的返回结果通过RDMA连接直接写入到所述客户端消息池,所述客户端处理所述返回结果。

5.根据权利要求2所述的一种基于持久性内存的远程数据传输方法,其特征在于,所述远程直接读写的接口包括直接读写接口和持久化写接口,所述远程直接读写内存包括所述客户端通过RDMA的WRITE原语与RDMA的READ原语读写所述服务端的持久性内存;

所述远程直接读写内存的持久化写内存,包括:通过RDMA的WRITE原语写数据,通过远程过程调用将持久化操作发送给所述服务端;

或;

通过远程过程调用的方式将数据与持久化操作同时发送给所述服务端,以便所述服务端将所述数据从服务端消息池拷贝到对应写区域,完成持久化操作;其中,所述持久化操作为调用CPU的持久化指令将数据从CPU缓存中刷写至所述持久性内存中。

6.根据权利要求1所述的一种基于持久性内存的远程数据传输方法,其特征在于,所述提供返回消息池地址和回调函数的方式对所述返回结果进行操作,包括:根据所述返回结果的消息池地址直接操作消息池,拷贝消息池返回信息到指定地址,或利用回调函数直接在消息池内存中完成对于返回结果的处理;其中,所述回调函数为在进行调用远程过程调用或远程直接读写操作时,指定当所述客户端获取所述服务端的返回结果时执行的操作,同时指定执行函数需要的上下文信息。

7.根据权利要求1所述的一种基于持久性内存的远程数据传输方法,其特征在于,所述处理所述远程数据传输请求,包括:

当所述远程数据传输请求为远程过程调用请求,所述服务端反序列化所述客户端远程过程调用的请求信息,执行调用函数完成操作;

当所述远程数据传输请求为嵌套远程过程调用请求,所述服务端处理嵌套远程过程调用,向其他服务端发出远程过程调用的请求;

当所述远程数据传输请求为远程直接读写请求,所述服务端的网卡处理读写请求;

当所述远程数据传输请求为远程持久化写请求,所述服务端的网卡处理写请求,所述服务端完成持久化过程。

8.根据权利要求1所述的一种基于持久性内存的远程数据传输方法,其特征在于,所述内存注册为将所述服务端的内存注册到网卡,允许所述网卡通过RDMA读写所述持久性内存的区域,以便减少持久性内存的内存拷贝次数;所述注册自定义调用函数为维护调用名称与调用函数的映射。

9.根据权利要求8所述的一种基于持久性内存的远程数据传输方法,其特征在于,所述以便减少持久性内存的内存拷贝次数,包括:通过所述网卡直接访问内存以便减少直接读写的内存拷贝次数,执行直接操作内存池的消息池的请求信息以便减少远程过程调用的内存拷贝次数和远程调用结果直接写入消息池以便减少远程过程调用的内存拷贝次数。

10.根据权利要求1所述的一种基于持久性内存的远程数据传输方法,其特征在于,所述服务端管理消息池包括所述服务端管理可循环使用的消息池空间;所述消息池包括发送消息池和接收消息池,每个消息可占用可变大小的消息池空间,变长消息通过RDMA的WRITE_WITH_IMM原语通信,写的数据为消息信息,立即数信息为消息池偏移,所述立即数信息通过偏移量支持RDMA传输所述变长消息。

说明书 :

一种基于持久性内存的远程数据传输方法

技术领域

[0001] 本发明涉及持久性内存的远程数据传输技术领域,具体涉及一种基于持久性内存的远程数据传输方法。

背景技术

[0002] 持久性内存技术(Persistent Memory,PM)是一种新型、不断发展的存储技术,具有低延迟、高吞吐、成本低的特点。持久性内存的吞吐和延迟都优于固态硬盘存储,并且持
久性内存可以直接当作内存访问;相对于动态随机存取存储器,持久性内存存储是非易失
的。
[0003] 远程内存直接访问技术(Remote Direct Memory Access,RDMA)是一种新型的网络技术,它可以绕过系统内核,避免了复杂传统协议栈的开销,只使用远程网卡而不涉及远
程CPU来执行远程内存访问,所以它具有低延迟和高吞吐的特点,为存储节点之间的通信提
供了高效的方案。
[0004] 远程数据传输是一种重要的网络存储操作,分布式网络存储的数据存储在不同的节点上,节点之间通过远程数据传输完成数据操作。在持久性内存未出现之前,存储节点数
据存放在磁盘中,远程数据传输操作需要通过内存与磁盘的数据传输,低吞吐高延迟的特
点无法发挥RDMA网络的高效性能。那么,如何利用高性能的新型存储硬件和高效的网络通
信技术,构建能够充分发挥两者低延迟、高吞吐特点的高效远程数据传输方法,就是本领域
技术人员的亟待解决的问题
[0005] 现有的一些在持久性内存上设计的远程数据传输方法,将持久性内存作为内存,利用RDMA的网络完成远程数据传输,单纯利用持久性内存和RDMA网络新硬件低延迟、高吞
吐的特性构建远程数据传输方法。然而,单纯用RDMA完成远程数据传输存在问题,频繁数据
拷贝无法发挥持久性内存低延迟高吞吐的特点,持久性内存的持久化操作需要远端CPU参
与,同时新硬件的使用会使软件层的开销变得更加明显。所以,直接地将原有针对内存磁盘
的远程数据传输方法移植到持久性内存上来,无法发挥持久性内存低延迟、高吞吐、可持久
化的特点,需要根据新硬件的特点重新设计软件。

发明内容

[0006] 本发明所要解决的技术问题在于针对上述现有技术中的不足,提供一种基于持久性内存的远程数据传输方法,具备高效的多客户端并发远程数据操作性能、服务端可扩展
能力和持久性内存友好性。
[0007] 为达此目的,本发明实施例提出了一种基于持久性内存的远程数据传输方法,包括:
[0008] 所述客户端向所述服务端发送远程数据传输请求,当接收到所述服务端根据所述远程数据传输请求发出的返回结果,提供返回消息池地址和回调函数的方式对所述返回结
果进行操作;其中,所述客户端和所述服务端的连接方式为RDMA连接,所述客户端通过负载
均衡策略连接到所述服务端,所述客户端提供远程过程调用操作远端持久性内存的数据传
输方式和远程直接读写内存的数据传输方式,所述远程直接读写内存支持远程持久化写内
存;
[0009] 所述服务端接收所述客户端发送的所述远程数据传输请求并处理所述远程数据传输请求得到返回结果,将所述返回结果发送至所述客户端;其中,所述服务端配置有持久
性内存且与所述客户端RDMA连接,所述服务端管理所述持久性内存与消息池,并支持不同
服务端之间调用嵌套远程过程调用。
[0010] 本发明实施例的一种基于持久性内存的远程数据传输方法,结合RDMA技术的优势和限制,设计更适合于持久性内存的远程数据传输方法,能够同时提供具备高效的多客户
端并发远程数据操作性能、服务端可扩展能力和持久性内存友好性的完善全面的远程数据
传输方式。
[0011] 另外,根据本发明上述实施例的一种持久性内存键值存储系统还可以具有以下附加的技术特征:
[0012] 进一步地,所述RDMA连接的建立过程中,所述客户端通过中心化的管理节点获取唯一的客户端ID,所述服务端根据所述客户端ID分配负载均衡的连接线程;
[0013] 所述远程过程调用与所述远程持久化写内存的操作采用RDMA的WRITE_WITH_IMM原语进行数据通信,所述远程直接读写通过RDMA的WRITE原语与RDMA的READ原语通信。
[0014] 进一步地,所述负载均衡策略连接包括若干个所述客户端均匀地与所述服务端的多个线程连接,不同的服务端之间线程均匀连接。
[0015] 进一步地,所述远程过程调用的接口包括同步、异步和嵌套调用接口,所述接口支持变长和不定个数参数;所述远程过程调用操作为所述客户端调用远程的函数执行远程数
据传输,所述调用远程的函数为所述客户端指定调用信息的处理方式;其中,所述调用信息
包括调用函数的服务端唯一编号,调用的函数名称,可变长可多参数的参数列表和返回值
处理方式;
[0016] 所述远程过程调用操作远端持久性内存,包括:所述客户端将指定的所述调用信息填入所述客户端的客户端消息池,并通过RDMA连接直接写入到所述服务端的服务端消息
池,以供所述服务端根据所述调用信息执行调用函数,并将执行后的返回结果通过RDMA连
接直接写入到所述客户端消息池,所述客户端处理所述返回结果。
[0017] 进一步地,所述远程直接读写的接口包括直接读写接口和持久化写接口,所述远程直接读写内存包括所述客户端通过RDMA的WRITE原语与RDMA的READ原语读写所述服务端
的持久性内存;
[0018] 所述远程直接读写内存的持久化写内存,包括:
[0019] 通过RDMA的WRITE原语写数据,通过远程过程调用将持久化操作发送给所述服务端;或;
[0020] 通过远程过程调用的方式将数据与持久化操作同时发送给所述服务端,以便所述服务端将所述数据从服务端消息池拷贝到对应写区域,完成持久化操作;其中,所述持久化
操作为调用CPU的持久化指令将数据从CPU缓存中刷写至所述持久性内存中。
[0021] 进一步地,所述提供返回消息池地址和回调函数的方式对所述返回结果进行操作,包括:根据所述返回结果的消息池地址直接操作消息池,拷贝消息池返回信息到指定地
址,或利用回调函数直接在消息池内存中完成对于返回结果的处理;其中,所述回调函数为
在进行调用远程过程调用或远程直接读写操作时,指定当所述客户端获取所述服务端的返
回结果时执行的操作,同时指定执行函数需要的上下文信息。
[0022] 进一步地,所述处理所述远程数据传输请求,包括:
[0023] 当所述远程数据传输请求为远程过程调用请求,所述服务端反序列化所述客户端远程过程调用的请求信息,执行调用函数完成操作;
[0024] 当所述远程数据传输请求为嵌套远程过程调用请求,所述服务端处理嵌套远程过程调用,向其他服务端发出远程过程调用的请求;
[0025] 当所述远程数据传输请求为远程直接读写请求,所述服务端的网卡处理读写请求;
[0026] 当所述远程数据传输请求为远程持久化写请求,所述服务端的网卡处理写请求,所述服务端完成持久化过程。
[0027] 进一步地,所述服务端管理所述持久性内存包括所述服务端进行内存注册和注册自定义调用函数,所述内存注册为将所述服务端的内存注册到网卡,允许所述网卡通过
RDMA读写所述持久性内存的区域,以便减少持久性内存的内存拷贝次数;所述注册自定义
调用函数为维护调用名称与调用函数的映射。
[0028] 进一步地,所述以便减少持久性内存的内存拷贝次数,包括:通过所述网卡直接访问内存以便减少直接读写的内存拷贝次数,执行直接操作内存池的消息池的请求信息以便
减少远程过程调用的内存拷贝次数和远程调用结果直接写入消息池以便减少远程过程调
用的内存拷贝次数。
[0029] 进一步地,所述服务端管理消息池包括所述服务端管理可循环使用的消息池空间;所述消息池包括发送消息池和接收消息池,每个消息可占用可变大小的消息池空间,变
长消息通过RDMA的WRITE_WITH_IMM原语通信,写的数据为消息信息,立即数信息为消息池
偏移,所述立即数信息通过偏移量支持RDMA传输所述变长消息。
[0030] 本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

[0031] 本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
[0032] 图1是本发明实施例的基于持久性内存的远程数据传输方法的原理图;
[0033] 图2是本发明实施例的客户端和服务端之间网络负载均衡连接的示意图;
[0034] 图3是本发明实施例的服务端处理远程数据传输请求的示意图;
[0035] 图4是本发明实施例的客户端处理返回结果的示意图;
[0036] 图5是本发明实施例的消息池管理设计的示意图。

具体实施方式

[0037] 下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附
图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
[0038] 下面参照附图描述本发明实施例提出的一种基于持久性内存的远程数据传输方法。
[0039] 请参考附图1,其是本发明实施例的基于持久性内存的远程数据传输方法的原理图。
[0040] 如附图1所示,该基于持久性内存的远程数据传输方法,包括:
[0041] 所述客户端向所述服务端发送远程数据传输请求,当接收到所述服务端根据所述远程数据传输请求发出的返回结果,提供返回消息池地址和回调函数的方式对所述返回结
果进行操作;其中,所述客户端和所述服务端的连接方式为RDMA连接,所述客户端通过负载
均衡策略连接到所述服务端,所述客户端提供远程过程调用操作远端持久性内存的数据传
输方式和远程直接读写内存的数据传输方式,所述远程直接读写内存支持远程持久化写内
存;
[0042] 所述服务端接收所述客户端发送的所述远程数据传输请求并处理所述远程数据传输请求得到返回结果,将所述返回结果发送至所述客户端;其中,所述服务端配置有持久
性内存且与所述客户端RDMA连接,所述服务端管理所述持久性内存与消息池,并支持不同
服务端之间调用嵌套远程过程调用。
[0043] 具体地,该基于持久性内存的远程数据传输方法,是一种持久性内存友好的远程数据传输方法,其包括客户端和配置有持久性内存的服务端:
[0044] 所述客户端通过负载均衡策略连接到服务端,客户端提供两种数据传输方式,分别为:A、远程过程调用操作远端持久性内存,B、远程直接读写内存;
[0045] 远程过程调用的接口包括同步、异步、嵌套调用接口,支持变长、不定个数参数,远程直接内存读写接口包括直接读写内存、持久化写内存;
[0046] 所述客户端获取返回结果,提供返回消息池地址、回调函数的方式对返回结果进行操作;
[0047] 所述服务端管理持久性内存与消息池,所述服务端处理客户端的请求,并支持服务端之间调用嵌套远程过程调用;所述服务端管理连接的消息池,执行远程数据操作;
[0048] 所述远程过程调用方式与数据持久化(即所述远程持久化写内存的操作)采用RDMA的WRITE_WITH_IMM原语进行数据通信,远程直接读写通过RDMA的WRITE原语与RDMA的
READ原语通信。
[0049] 可以理解的是,持久性内存允许客户端通过RDMA直接读写,同时持久性内存还可以提供数据持久化,远程数据传输方法是指客户端通过网络传输数据,完成对于服务端的
数据操作,其中操作包括,读取远端数据、写入远端数据以及更复杂的组合操作。如附图1所
示,该基于持久性内存的远程数据传输方法包括两个组件组成:客户端和配置有持久性内
存的服务端。客户端和服务端均处于用户态。客户端可以提供给应用远程过程调用操作远
程服务端的持久性内存、直接内存读写接口直接读写远程服务端的持久性内存以及持久性
写操作完成写远程服务端持久性内存。客户端通过负载均衡策略连接到服务端,服务端管
理多个客户端共享的远程持久性存储,服务端为其连接的客户端提供处理请求的服务,并
将处理的返回结果通过RDMA网络返回给客户端。
[0050] 本发明实施例的一种基于持久性内存的远程数据传输方法,结合RDMA技术的优势和限制,设计更适合于持久性内存的远程数据传输方法,能够同时提供具备高效的多客户
端并发远程数据操作性能、服务端可扩展能力、持久性内存友好性的完善全面的远程数据
传输方式。
[0051] 在本发明的一个实施例中,所述RDMA连接的建立过程中,所述客户端通过中心化的管理节点获取唯一的客户端ID,所述服务端根据所述客户端ID分配负载均衡的连接线
程;
[0052] 所述远程过程调用与所述远程持久化写内存的操作采用RDMA的WRITE_WITH_IMM原语进行数据通信,所述远程直接读写通过RDMA的WRITE原语与RDMA的READ原语通信。
[0053] 具体地,如附图2所示,其是本发明实施例的客户端和服务端之间网络负载均衡连接的示意图。服务端在开始运行时根据提前设定的配置信息获取其他服务端的配置情况,
为服务端与服务端的连接、服务端与客户端的连接注册消息池、建立RDMA的QP(Queue 
Pairs,队列对)准备连接,将RDMA的QP连接信息写入中心化的节点中,写入结束后,不断尝
试读取其他服务端的RDMA的QP信息,读取信息后完成服务端与服务端的连接。客户端在注
册时,向中心化的节点获取唯一的客户端ID,并根据客户端ID信息读取服务端提前写入的
对应连接的RDMA的QP信息,服务端同时根据分配的客户端ID读取相对应的客户端的RDMA的
QP信息,读取信息后完成服务端与客户端的连接。
[0054] 在本发明的一个实施例中,所述负载均衡策略连接包括若干个所述客户端均匀地与所述服务端的多个线程连接,不同的服务端之间线程均匀连接。
[0055] 可以理解的是,为了发挥多核处理器的性能,服务端可以为多线程的,所述RDMA的QP连接越少占用的服务端资源越少,如附图2所示,所述连接方式为:选择所有客户端组成
集合,对于每个服务端,集合对服务端的所有线程做一个划分,即每新增一个客户端,对服
务端线程做Round Robin(轮询调度)依次添加,这样每个客户端和每个服务端只建立一个
连接;不同的服务端可以任意指定线程个数,线程数目相同的服务端之间,每个线程一一对
应互相连接,对于线程个数不同的服务端之间,服务端连接按照负载均衡的策略,超出一一
对应的线程通过Round Robin依次建立连接。
[0056] 在本发明的一个实施例中,所述远程过程调用的接口包括同步、异步和嵌套调用接口,所述接口支持变长和不定个数参数;所述远程过程调用操作为所述客户端调用远程
的函数执行远程数据传输,所述调用远程的函数为所述客户端指定调用信息的处理方式;
其中,所述调用信息包括调用函数的服务端唯一编号,调用的函数名称,可变长可多参数的
参数列表和返回值处理方式;
[0057] 所述远程过程调用操作远端持久性内存,包括:所述客户端将指定的所述调用信息填入所述客户端的客户端消息池,并通过RDMA连接直接写入到所述服务端的服务端消息
池,以供所述服务端根据所述调用信息执行调用函数,并将执行后的返回结果通过RDMA连
接直接写入到所述客户端消息池,所述客户端处理所述返回结果。
[0058] 具体地,所述数据传输方式包括远程过程调用,所述客户端可以调用远程的函数执行数据操作,所述远程过程调用流程为指定调用函数的服务端唯一编号,指定调用的函
数名称,指定可变长、可多参数的参数列表,指定返回值的处理方式。客户端将调用信息填
入消息池,通过RDMA发送给服务端消息池,服务端处理之后,通过RDMA返回给客户端消息
池,发送消息均使用RDMA的WRITE_WITH_IMM原语。
[0059] 在本发明的一个实施例中,所述远程直接读写的接口包括直接读写接口和持久化写接口,所述远程直接读写内存包括所述客户端通过RDMA的WRITE原语与RDMA的READ原语
读写所述服务端的持久性内存;
[0060] 所述远程直接读写内存的持久化写内存,包括:
[0061] 通过RDMA的WRITE原语写数据,通过远程过程调用将持久化操作发送给所述服务端;或;
[0062] 通过远程过程调用的方式将数据与持久化操作同时发送给所述服务端,以便所述服务端将所述数据从服务端消息池拷贝到对应写区域,完成持久化操作;其中,所述持久化
操作为调用CPU的持久化指令将数据从CPU缓存中刷写至所述持久性内存中。
[0063] 具体地,所述数据传输方式还包括远程直接内存读写,所述客户端直接通过RDMA的WRITE原语与RDMA的READ原语读写服务端的持久性内存;所述远程持久化写内存通过两
种方式完成:A、通过RDMA的WRITE原语写数据,通过远程过程调用将持久化操作发送给服务
端;B、通过远程过程调用的方法将数据与持久化操作同时发给服务端,服务端将数据从消
息池拷贝到对应写区域,之后完成持久化操作。所述持久化操作为调用CPU的持久化指令将
数据从CPU缓存中刷写至持久性内存中。
[0064] 具体地,异步远程过程调用在发送远程过程调用请求的时候会获得一个唯一的RPCID(Remote Procedure Call ID,远程过程调用ID)。在发送远程过程调用请求之后函数
返回,客户端可以继续执行其他内容,当客户端需要这个远程过程调用的内容时,客户端可
以调用等待接口来获取异步远程过程调用的结果,如果没结束再挂起线程直到得到远程过
程调用的返回结果,异步的接口就可以满足客户端同时向多个服务端发送远程过程调用请
求。
[0065] 具体地,一个服务端处理一个操作需要多个服务端的配合,需要用嵌套远程过程调用,对于多个服务端的操作,就可以整合到一次远程过程调用中。在客户端的视角中,调
用嵌套远程过程调用和调用普通远程过程调用的接口完全一样,对客户端来说是透明的。
[0066] 作为具体示例,以远程持久化写操作为例,如附图3所示,其是本发明实施例的服务端处理远程数据传输请求的示意图。远程持久化写操作可以通过两种方式完成,具体为:
[0067] A方式为客户端将写内容通过RDMA的WRITE原语直接写到对应持久性内存,当前写内容没有被CPU持久化指令从CPU缓存中刷写至持久性内存中,服务端CPU对数据写入无感
知,客户端同时通过RDMA的WRITE_WITH_IMM原语发送远程过程调用消息,通知服务端,服务
端CPU主动调用CPU持久化指令将对应数据从CPU缓存中刷写至持久性内存中,分两个阶段
完成远程持久化写操作;
[0068] B方式为客户端将写内容填充在远程过程调用中,通过RDMA的WRITE_WITH_IMM原语将写数据内容作为远程过程调用的参数作为一次远程过程调用发送到服务端消息池,服
务端将消息池中的写数据拷贝到对应的写入持久性内存位置,同时完成持久化操作。
[0069] 在本发明的一个实施例中,所述提供返回消息池地址和回调函数的方式对所述返回结果进行操作,包括:根据所述返回结果的消息池地址直接操作消息池,拷贝消息池返回
信息到指定地址,或利用回调函数直接在消息池内存中完成对于返回结果的处理;其中,所
述回调函数为在进行调用远程过程调用或远程直接读写操作时,指定当所述客户端获取所
述服务端的返回结果时执行的操作,同时指定执行函数需要的上下文信息。
[0070] 具体地,所述客户端处理返回结果包括:返回消息池地址用户直接操作消息池、拷贝消息池返回信息、利用回调函数直接在消息池内存中完成对于返回结果的处理;所述回
调函数为在调用远程过程调用或远程直接内存读写操作时,指定当客户端获取服务端返回
消息时执行的操作,同时指定执行函数需要的上下文信息,在返回消息后执行该函数。用户
直接操作消息池、回调函数的方式能够减少数据在内存之间的拷贝。
[0071] 具体地,如附图4所示,其是本发明实施例的客户端处理返回结果的示意图。客户端提供三种处理返回结果的方式,具体为:
[0072] A:将返回值拷贝到消息池之外指定的位置,此位置可以为在调用之前用户指定的内存空间,也可以是在调用之后客户端根据返回值大小申请的内存空间;
[0073] B:客户端将消息池地址直接返回给用户,用户直接按照相关头部信息直接操作消息池完成对返回值的后续操作,在使用结束后主动归还当前消息池给客户端;
[0074] C:用户在调用时指定执行函数需要的上下文信息和执行函数信息,客户端在收到返回值之后将返回值与调用前指定的上下文信息作为函数参数传给回调函数。
[0075] 在本发明的一个实施例中,所述处理所述远程数据传输请求,包括:
[0076] 当所述远程数据传输请求为远程过程调用请求,所述服务端反序列化所述客户端远程过程调用的请求信息,执行调用函数完成操作;
[0077] 当所述远程数据传输请求为嵌套远程过程调用请求,所述服务端处理嵌套远程过程调用,向其他服务端发出远程过程调用的请求;
[0078] 当所述远程数据传输请求为远程直接读写请求,所述服务端的网卡处理读写请求;
[0079] 当所述远程数据传输请求为远程持久化写请求,所述服务端的网卡处理写请求,所述服务端完成持久化过程。
[0080] 在本发明的一个实施例中,所述服务端管理所述持久性内存包括所述服务端进行内存注册和注册自定义调用函数,所述内存注册为将所述服务端的内存注册到网卡,允许
所述网卡通过RDMA读写所述持久性内存的区域,以便减少持久性内存的内存拷贝次数;所
述注册自定义调用函数为维护调用名称与调用函数的映射。
[0081] 具体地,所述服务端管理持久性内存为内存注册可以将所述服务端任意内存注册到网卡,允许网卡通过DMA读写持久性内存区域,优化数据操作过程减少持久性内存的拷
贝;用户可以通过注册自定义调用函数,所述注册自定义调用函数为维护调用名称与调用
函数的映射,映射允许在运行过程中动态修改。
[0082] 具体地,如附图3所示,服务端处理远程数据传输请求,即服务端执行客户端请求分为两个部分:网卡执行和CPU执行。服务端网卡执行部分为:网卡处理远端RDMA的READ原
语读取持久性内存,网卡处理远端的RDMA的WRITE原语写入持久性内存,网卡执行RDMA的
WRITE_WITH_IMM原语写数据到服务端消息池并将该原语所携带的立即数通知给服务端
CPU。服务端CPU执行部分为:服务端通过RDMA的轮询操作不断查看是否有新的网络消息,所
述网络消息为远端RDMA的WRITE_WITH_IMM原语,当服务端收到一个新的消息,服务端反序
列化客户端远程过程调用的请求信息,A、如果收到非嵌套的远程过程调用,执行调用函数
完成操作,执行之后正常返回;B、如果收到了嵌套远程过程调用,在执行调用函数是完成向
其他服务端的远程数据传输请求,在等待其他服务端远程数据传输请求的时,服务端挂起
当前调用函数,继续轮询新的RDMA消息,若为远程过程调用请求则正常执行该请求,若为挂
起调用函数的返回消息则完成消息后续操作,当所有嵌套部分远程数据传输完成,完成当
前调用函数。
[0083] 在本发明的一个实施例中,所述以便减少持久性内存的内存拷贝次数,包括:通过所述网卡直接访问内存以便减少直接读写的内存拷贝次数,执行直接操作内存池的消息池
的请求信息以便减少远程过程调用的内存拷贝次数和远程调用结果直接写入消息池以便
减少远程过程调用的内存拷贝次数。
[0084] 具体地,如附图3所示,服务端与客户端通过RDMA通信直接读写远端内存;服务端的远程过程调用函数的参数为实际参数的地址,在执行远程过程调用函数时直接传入消息
池对应参数地址;服务端远程过程调用函数在执行过程中,在消息池中预留出返回值所用
的内存空间,执行时将返回值直接写入消息池中,远程过程调用函数执行结束后,服务端将
对应消息池内容通过RDMA的WRITE_WITH_IMM写入客户端消息池。
[0085] 在本发明的一个实施例中,所述服务端管理消息池包括所述服务端管理可循环使用的消息池空间;所述消息池包括发送消息池和接收消息池,每个消息可占用可变大小的
消息池空间,变长消息通过RDMA的WRITE_WITH_IMM原语通信,写的数据为消息信息,立即数
信息为消息池偏移,所述立即数信息通过偏移量支持RDMA传输所述变长消息。
[0086] 具体地,使用RDMA的WRITE原语时,远程被写端的CPU无法感知正在执行WRITE操作,使用RDMA的WRITE_WITH_IMM原语时,当数据被写入远程被写端,远程被写端网卡会通知
远程被写端CPU立即值,将该立即值作为RDMA传输远程过程调用消息的通知机制,该立即值
为消息池中的地址偏移量,CPU可快速定位到该消息在内存空间中的位置。根据RDMA提供的
批处理接口,分别对添加接受消息池、处理发送成功信号、查询网卡新消息做了批处理。如
附图5所示,其是本发明实施例的消息池管理设计的示意图。如该附图5的(a)部分所示,服
务端与服务端、服务端与客户端的连接是双向,每个连接拥有两个消息池,发送消息池与接
受消息池,只对当前连接专门享有。同一连接的接受消息池和发送消息池靠近摆放,能够根
据接受消息池快速定位对应的发送消息池。
[0087] 具体地,单个消息池采用环形队列的方式,如附图5的(b)部分所示,消息池在发送方和接收方都有一个相同的环形队列,其中head表示未被使用消息池的头部,tail表示未
被使用消息池的尾部,新的消息产生地址即为head的位置,申请新消息空间时head向前移
动,当消息池被释放时,tail向前移动,tail和head之间的大小为当前剩余消息池的大小。
[0088] 本发明实施例的一种基于持久性内存的远程数据传输方法,是一种持久性内存友好的远程数据传输方法,结合RDMA技术的优势和限制,设计更适合于持久性内存的远程数
据传输方法,能够同时提供具备高效的多客户端并发远程数据操作性能、服务端可扩展能
力、持久性内存友好性的完善全面的远程数据传输方式。
[0089] 本领域的普通技术人员可以理解,上述各实施例在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
[0090] 需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式
也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包
括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0091] 除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本申请的范围。同时,应当明白,为了便于描述,附图中所示出的各个部
分的尺寸并不是按照实际的比例关系绘制的。对于相关领域普通技术人员已知的技术、方
法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明
书的一部分。在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而
不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。应注意到:相似的标号
和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附
图中不需要对其进行进一步讨论。
[0092] 尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换
和变型,本发明的范围由所附权利要求及其等同物限定。