CN112822299A - 基于rdma的数据传输方法、装置及电子设备 - Google Patents

基于rdma的数据传输方法、装置及电子设备 Download PDF

Info

Publication number
CN112822299A
CN112822299A CN202110415701.1A CN202110415701A CN112822299A CN 112822299 A CN112822299 A CN 112822299A CN 202110415701 A CN202110415701 A CN 202110415701A CN 112822299 A CN112822299 A CN 112822299A
Authority
CN
China
Prior art keywords
sending
request
receiving
rdma
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202110415701.1A
Other languages
English (en)
Other versions
CN112822299B (zh
Inventor
刘国辉
李铭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Easy Star Technology Development Co ltd
Original Assignee
Beijing Easy Star Technology Development Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Easy Star Technology Development Co ltd filed Critical Beijing Easy Star Technology Development Co ltd
Priority to CN202110415701.1A priority Critical patent/CN112822299B/zh
Publication of CN112822299A publication Critical patent/CN112822299A/zh
Application granted granted Critical
Publication of CN112822299B publication Critical patent/CN112822299B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • H04L67/63Routing a service request depending on the request content or context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Communication Control (AREA)

Abstract

本发明公开了一种基于RDMA的数据传输方法、装置及电子设备,其中方法包括:发送端从发送请求池中获取发送请求,将发送请求发送至接收端和等待响应队列,接收端RDMA接收队列接收发送端DMA地址,将传输数据复制到接收端DMA地址中并移动到数据接收进程中,接收端基于唯一标识获取发送请求,并将发送请求初始化为响应请求,将唯一标识存入响应请求发送到发送端,发送端RDMA接收队列接收唯一标识,根据唯一标识从等待响应队列中找到对应的发送请求,并将发送请求释放回到发送请求池中;本发明避免了数据传输过程中再进行额外的内存分配带来的开销,提高了效率,降低了延迟。

Description

基于RDMA的数据传输方法、装置及电子设备
技术领域
本发明涉及数据传输领域,具体涉及一种基于RDMA的数据传输方法、装置及电子设备。
背景技术
数据传输时,在传统的TCP/IP模式下,需要CPU主动将数据拷贝到TCP的缓冲区中,然后TCP再将缓冲区中的数据发送给网卡,网卡才能将这些数据传输出去,数据延迟较长。RDMA(Remote Direct Memory Access)技术全称远程直接内存访问,就是为解决网络传输中服务器端数据处理的延迟而产生的,其与TCP/IP的模式本质上的不同在于RDMA在CPU上是零拷贝的,支持RDMA的网卡会通过DMA将需要传输的内存数据拷贝到网卡上发送出去,这个过程不需要CPU的参与。
与TCP/IP模式不同的是,RDMA有一套自己的应用程序编程接口(API),这就导致传统的socket编程无法适用于RDMA编程,在数据传输过程中,需要调用系统API再进行额外的数据结构内存分配释放操作,延迟较高,效率较低,并且花费CPU初始化新分配的请求,整个流程消耗时间较长。
发明内容
本发明的主要目的在于提供一种基于RDMA 的数据传输方法及装置,以解决现有的数据传输过程中,需要调用系统API进行额外的数据结构内存分配释放操作导致的延迟较高、效率较低、整个流程消耗时间较长的问题。
为了实现上述目的,本发明的第一方面提供了一种基于RDMA的数据传输方法,包括:
发送端通过发送端的数据发送进程从发送请求池中获取发送请求,将所述发送请求发送至接收端和等待响应队列,其中,所述发送请求包含发送请求的唯一标识以及将传输数据进行DMA映射后得到的发送端DMA地址;
接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的发送端DMA地址,将所述发送端DMA地址中的传输数据复制到接收端DMA地址中,并将所述接收端DMA地址中的传输数据移动到数据接收进程中,将所述接收请求释放回到接收请求池中;
接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端;
发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中。
可选地,所述将所述发送请求发送至接收端和等待响应队列包括:
将所述发送请求的RDMA工作请求发送到RDMA发送队列;
所述RDMA发送队列通过RDMA传输协议将所述发送请求的RDMA工作请求对应的数据发送到接收端,其中,所述发送请求的RDMA工作请求对应的数据包括发送请求的唯一标识以及将传输数据进行DMA映射后得到的发送端DMA地址;
将所述发送请求发送至等待响应队列。
可选地,所述接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的发送端DMA地址,将所述发送端DMA地址中的传输数据复制到接收端DMA地址中,并将所述接收端DMA地址中的传输数据移动到数据接收进程中,将所述接收请求释放回到接收请求池中,包括:
接收端的RDMA接收队列通过预先从接收端接收请求池中获取的接收请求,接收所述发送端发送请求中RDMA工作请求对应的数据;
接收端从页面池中获取页面,并对所述页面进行DMA映射,得到接收端DMA地址,其中,所述页面的数量满足存储所述传输数据的要求;
对所述发送端DMA地址进行RDMA读操作,得到传输数据,并将所述传输数据复制到所述接收端DMA地址的页面中;
复制完成后,将所述接收请求发送到已完成队列中。
进一步地,在将所述接收请求发送到已完成队列中之后,所述方法还包括:
接收端的数据接收进程将所述已完成队列的接收请求中包含所述传输数据的页面移动到数据接收进程中;
移动完成后,将所述接收请求释放回到接收请求池中;
接收端的RDMA接收队列从所述接收请求池中获取接收请求,以接收所述发送端下一发送请求中RDMA工作请求对应的数据。
可选地,所述接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端,包括:
接收端获取发送端发送请求的唯一标识后,基于所述唯一标识从接收端的发送请求池中获取发送请求;
将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求的数据缓冲区;
将所述响应请求的RDMA工作请求发送到RDMA发送队列;
所述RDMA发送队列通过RDMA传输协议将所述响应请求的RDMA工作请求对应的数据发送到发送端,其中,所述响应请求的RDMA工作请求对应的数据包括发送端发送请求的唯一标识。
可选地,所述发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中,包括:
发送端的RDMA接收队列通过预先从发送端接收请求池中获取的接收请求,接收响应请求的RDMA工作请求对应的发送端发送请求的唯一标识;
根据所述发送端发送请求的唯一标识,从所述等待响应队列中找到所述唯一标识对应的发送请求;
将所述接收请求通过发送端接收请求池重新放入发送端RDMA接收队列中,以便发送端RDMA接收队列接收发送端下一发送请求的唯一标识;
将所述发送请求释放回到发送请求池中;
发送端通过发送端的数据发送进程从发送请求池中获取发送请求,其中,所述发送请求包含下一传输数据以及发送请求的唯一标识。
可选地,如果数据传输方式为异步传输,则在将所述发送请求发送至接收端和等待响应队列之后,所述方法还包括:
通过RDMA传输协议将所述发送请求的RDMA 工作请求发送到RDMA发送队列后,返回到发送端的数据发送进程,完成所述异步传输的发送过程;
如果数据传输方式为同步传输,则在将所述发送请求释放回到发送请求池中之后,所述方法还包括:
通过发送端的等待响应队列通知发送端的数据发送进程,完成所述同步传输的发送过程。
本发明的第二方面提供了一种基于RDMA的数据传输装置,包括:
第一发送单元,用于发送端通过发送端的数据发送进程从发送请求池中获取发送请求,将所述发送请求发送至接收端和等待响应队列,其中,所述发送请求包含发送请求的唯一标识以及将传输数据进行DMA映射后得到的发送端DMA地址;
第一接收单元,用于接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的发送端DMA地址,将所述发送端DMA地址中的传输数据复制到接收端DMA地址中,并将所述接收端DMA地址中的传输数据移动到数据接收进程中,将所述接收请求释放回到接收请求池中;
第二发送单元,用于接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端;
第二接收单元,用于发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中。
本发明的第三方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行第一方面任意一项提供的基于RDMA的数据传输方法。
本发明的第四方面提供了一种电子设备,所述电子设备包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器执行第一方面任意一项提供的基于RDMA的数据传输方法。
在本发明实施例中,使用发送请求和接收请求这两种请求以及页面,来管理所有在数据传输过程中需要使用到的内存和数据结构,所有必须的数据结构和内存都包含在请求中,不需要额外进行数据结构内存的分配,避免了数据传输过程中软件再进行额外的内存分配释放操作带来的开销,提高了数据传输过程的效率,降低了数据传输过程的延迟;并且,使用请求池来管理请求,即在发送端和接收端分别使用发送请求池来管理发送请求,使用接收请求池来管理接收请求,以及使用页面池管理空闲页面,不需要调用系统API去分配请求和空闲页面使用的内存,也不需要花费CPU去初始化这个新分配的请求,减少整个流程花费的时间,也降低了整体数据传输过程的延迟。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的数据传输方法发送端的数据传输过程图;
图2为本发明实施例提供的数据传输方法接收端的数据传输过程图;
图3为本发明实施例提供的基于RDMA的数据传输方法流程示意图;
图4为本发明实施例提供的基于RDMA的数据传输装置框图;
图5为本发明实施例提供的电子设备框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
与TCP/IP模式不同的是,RDMA有一套自己的应用程序编程接口(API),这就导致传统的socket编程无法适用于RDMA编程,在数据传输过程中,需要调用系统API再进行额外的数据结构内存分配释放操作,延迟较高,效率较低,并且花费CPU初始化新分配的请求,整个流程消耗时间较长。
为了解决上述问题,本发明实施例提供了一种基于RDMA的数据传输方法方法,该方法发送端的数据传输过程如图1所示,接收端的数据传输过程如图2所示,在图1和图2中,sending data process表示发送数据进程,send request pool表示发送请求池,DMAmapping表示DMA映射,RDMA send queue表示RDMA发送队列,wait response queue表示等待响应队列,RDMA receive queue表示RDMA接收队列,receive request pool表示接收请求池,get pages from page pool表示从页面池中获取页面,do RDMA_READ表示做RDMA读操作,completed queue表示已完成队列,receiving data process表示接收数据进程。
具体的,本发明实施例的发送端和接收端包括下述数据结构:
(1)send request:发送请求,用于描述一次发送数据,其包括一次发送需要用到的所有数据结构,通过RDMA来发送数据的进程必须要获取一个send request来发送数据,其主要包括如下几个数据结构:
send request id:发送请求的唯一标识,每个send request有自己独一无二的id标识;
RDMA work request:RDMA 工作请求,RDMA发送数据API(应用程序编程接口)需要使用的数据结构,通过将初始化好的RDMA work request放入到RDMA send queue中,来达到传输数据的目的;
header:标头,用于定义所传输数据的数据类型;
DMA address:用于将发送端的DMA地址传输到接收端。
(2)response request:响应请求,包含的数据结构的形式与send request相同,只是data buffer中保存的是发送完成的send request id,用于通知发送端目标sendrequest已经完成,当发送端接收到response request后,会根据response request中的send request id,从wait response queue中找到对应的send request,并将此sendrequest释放到send request pool中,作为空闲的send request,等待下一数据发送时使用。
(3)send request pool:发送请求池,用于存储空闲send request的池,所有空闲的send request都处于池之中,而sending data process(数据发送进程)必须通过sendrequest pool来获取一个send request进行数据的发送。
(4)receive request:接收请求,用于描述一次接收数据,其包括一次接收需要用到的所有数据结构,其主要包括如下几个数据结构:
RDMA work request:RDMA工作请求,RDMA接收数据API需要使用的数据结构,通过将初始化好的RDMA work request放入RDMA receive queue中,来达到接收数据的目的;
header:标头,用于识别所接收数据的数据类型;
DMA address:接收到的发送端DMA地址。
(5)receive request pool:接收请求池,形式与send request pool相同,其为空闲receive request的池,当需要接收数据时,从receive request pool中获取空闲receive request并将其放入到RDMA receive queue中。当RDMA使用此receive request接收数据时,会自动将接收到的数据类型和数据分别放入到receive request的header和data buffer中。
另外,在RDMA发送端与接收端建立连接进行初始化时,将所有处于receiverequest pool中的receive request取出来,放入到RDMA receive queue中,保证RDMAreceive queue里面有receive request,确保可以接收数据,以避免当RDMA receivequeue中没有receive request时,导致丢失数据。在接收当前数据完成后,将receiverequest释放回到receive request pool里,这时receive request pool里面至少有一个空闲的receive request,当接收下一数据时,RDMA receive queue优先使用receiverequest pool里空闲的receive request接收下一数据。
(6)wait response queue:等待响应队列,已经发送出去的send request的链表,维护已经发送出去并且还未被远端处理的send request。
(7)completed queue:已完成队列,已经接收到传输数据的receive request的链表,所有已经完成接收的receive request都会按顺序在此链表中。
在图1和图2中,每个数字表示数据传输的步骤,其中:
1.通过发送端的sending data process从发送端的send request pool中获取一个send request。
2.将传输数据进行DMA mapping,得到发送端DMA地址。
3.将发送端DMA地址放入到send request,并将send request的RDMA workrequest放入到RDMA send queue。
4.将send request放入到wait response queue等待响应信号。
5.如果数据传输方式为异步传输,此时,数据发送后不需要等待接收端接收就可以继续发送下一数据,因此在上述第3步将RDMA work request放入到RDMA send queue之后,返回到sending data process,完成异步传输的发送过程。
6.通过RDMA传输协议将RDMA work request中的发送端DMA地址发送到接收端的RDMA receive queue;
通过RDMA receive queue中预先存储的receive request接收该发送端DMA地址,其中,预先存储的receive request是按照下述方法得到的:
在数据传输前,发送端和接收端建立连接时,将接收端receive request pool中的所有receive request放入到RDMA receive queue中。
7.接收完成后,触发一个receive request完成,收到发送端DMA地址,从pagepool中获取满足存储发送端DMA地址需求的page数量。
8.对获取到的page做DMA mapping,得到接收端DMA地址。
9.做RDMA_READ操作,将发送端DMA地址中的传输数据复制到接收端DMA地址中。
10. RDMA_READ操作完成后,将所述receive request放入到completed queue中。
11. receiving data process通过检查completed queue来判断是否有接收完成的数据,如果有,则将page移动到receiving data process中。
12.将receiving data process处理过的receive request释放回到receiverequest pool中,成为空闲的receive request。
13. 通过RDMA receive queue从receive request pool中获取空闲的receiverequest,放入到RDMA receive queue中,等待接收下一发送端DMA地址。
14.从接收端的send request pool中获取一个send request,将该send request初始化为response request,将发送端的send request id存入response request的databuffer中,并将response request的RDMA work request放入到RDMA send queue。
15.通过RDMA传输协议将接收端RDMA send queue中存储的发送端send requestid发送到发送端的RDMA receive queue。
16.发送端的RDMA receive queue接收完成后,触发一个receive request完成,根据response request的data buffer中存储的发送端send request id,从waitresponse queue中找到对应的send request。
17.将发送端的receive request通过receive request pool重新放入RDMAreceive queue中,等待接收下一send request id。
18.将发送端send request释放回到发送端的send request pool中,成为空闲send request,等待发送下一发送端DMA地址时使用。
19.如果数据传输方式为同步传输,此时,数据发送后需要等待接收端接收才可以发送下一数据,因此,在上述第18步之后,通知发送端的sending data process,完成同步传输的发送过程。
本发明实施例提供了一种基于RDMA的数据传输方法,如图3所示,包括如下的步骤S101至步骤S104:
步骤S101:发送端通过发送端的数据发送进程从发送请求池中获取发送请求,将所述发送请求发送至接收端和等待响应队列,其中,所述发送请求包含发送请求的唯一标识以及将传输数据进行DMA映射后得到的发送端DMA地址;使用发送请求来维护在发送流程中涉及的所有数据结构和内存,并且使用发送请求池管理发送请求,发送请求可以从发送请求池中获取,在发送流程中不需要额外进行数据结构内存的分配,所有必须的数据结构和内存都包含在发送请求中,避免了发送流程中进行数据结构内存分配带来的开销,降低整个发送流程的延迟。
具体的,步骤S101中,所述将所述发送请求发送至接收端和等待响应队列包括:
将所述发送请求的RDMA工作请求发送到RDMA发送队列;
所述RDMA发送队列通过RDMA传输协议将所述发送请求的RDMA工作请求对应的数据发送到接收端,其中,所述发送请求的RDMA工作请求对应的数据包括发送请求的唯一标识以及将传输数据进行DMA映射后得到的发送端DMA地址;通过将RDMA工作请求发送到RDMA发送队列,然后再将RDMA工作请求对应的数据发送到接收端,而不是直接将发送请求的唯一标识和发送端DMA地址发送到RDMA发送队列,由于RDMA工作请求占用内存小于发送请求的唯一标识和发送端DMA地址,因此,减少了发送流程中进行数据结构内存分配带来的开销,降低了整个发送流程的延迟。
将所述发送请求发送至等待响应队列。在接收端将发送请求唯一标识发送到发送端时,通过对比发送端接收的发送请求唯一标识和存储在等待响应队列的发送请求,可以确保接收端已正常接收传输数据。
具体的,如果数据传输方式为异步传输,则在将所述发送请求发送至接收端和等待响应队列之后,所述方法还包括:
通过RDMA传输协议将所述发送请求的RDMA 工作请求发送到RDMA发送队列后,返回到发送端的数据发送进程,完成所述异步传输的发送过程。在异步传输方式下,数据发送后不需要等待接收端接收就可以继续发送下一数据,节省了传输多个数据的时间。
本发明实施例使用发送请求来维护在发送流程中涉及的所有数据结构和内存,所以在发送流程中不需要额外进行数据结构内存的分配,所有必须的数据结构和内存都包含在发送请求中,避免了发送流程中进行数据结构内存分配带来的开销,降低整个发送流程的延迟。并且,针对发送请求引入发送请求池,发送端在建立连接后,直接初始化好足够多的发送请求并将它们放入发送请求池中,这样在发送数据过程中,可以直接从发送请求池中获取空闲的、已经初始化好的发送请求,将该发送请求用来发送数据,不需要再调用系统API去分配请求使用的内存,也不用花费CPU去初始化这个新分配的请求,减少整个数据传输流程花费的时间,降低了整体的延迟。
步骤S102:接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的发送端DMA地址,将所述发送端DMA地址中的传输数据复制到接收端DMA地址中,并将所述接收端DMA地址中的传输数据移动到数据接收进程中,将所述接收请求释放回到接收请求池中;
具体的,所述步骤S102包括:
接收端的RDMA接收队列通过预先从接收端接收请求池中获取的接收请求,接收所述发送端发送请求中RDMA工作请求对应的数据;其中,发送端与接收端建立连接进行初始化时,将接收端接收请求池中所有的接收请求放入到接收端的RDMA接收队列中,保证RDMA接收队列里面有足够的接收请求来接收数据,以免造成数据丢失。
接收端从页面池中获取页面,并对所述页面进行DMA映射,得到接收端DMA地址,其中,所述页面的数量满足存储所述传输数据的要求;接收端使用页面池来管理空闲页面,接收端优先从页面池中获取到满足要求的空闲页面,当页面池中空闲页面充足时,完全不需要调用系统API去分配空闲page,可以直接从页面池中获取空闲页面,省去了系统API分配空闲页面带来的消耗,提高数据传输的性能。
对所述发送端DMA地址进行RDMA读操作,得到传输数据,并将所述传输数据复制到所述接收端DMA地址的页面中;
复制完成后,将所述接收请求发送到已完成队列中。
在将所述接收请求发送到已完成队列中之后,所述方法还包括:
接收端的数据接收进程将所述已完成队列的接收请求中包含所述传输数据的页面移动到数据接收进程中;
移动完成后,将所述接收请求释放回到接收请求池中;
接收端的RDMA接收队列从所述接收请求池中获取接收请求,以接收所述发送端下一发送请求中RDMA工作请求对应的数据。接收端的RDMA接收队列通过直接从接收请求池中获取空闲的接收请求,达到接收下一发送请求中RDMA工作请求对应数据的目的,而不需要再调用系统API去分配接收请求使用的内存,降低了接收流程的延迟。
本发明实施例使用接收请求来维护在接收流程中涉及的所有数据结构和内存,所以在接收流程中不需要额外进行数据结构内存的分配,所有必须的数据结构和内存都包含在接收请求中,避免了接收流程中进行数据结构内存分配带来的开销,降低整个接收流程的延迟。
并且,针对接收请求引入接收请求池,接收端在建立连接后,初始化好足够多的接收请求并将它们放入接收请求池中,这样在接收数据过程中,可以直接从接收请求池中获取空闲的、已经初始化好的接收请求,将该接收请求用来接收数据;不需要再调用系统API去分配接收请求使用的内存,也不用花费CPU去初始化这个新分配的接收请求,减少整个数据传输流程花费的时间,降低了整体的延迟。
此外,在发送端和接收端建立连接后,接收端主动调用系统API去分配足够的空闲页面,并将这些空闲页面放入页面池中,之后在数据传输过程中如果需要空闲页面,优先从页面池中获取,省去了系统API分配空闲页面带来的消耗,提高数据传输的性能,只有在获取失败的少数情况下,才使用系统API去获取空闲页面。
步骤S103:接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端;
具体的,所述步骤S103包括:
接收端获取发送端发送请求的唯一标识后,基于所述唯一标识从接收端的发送请求池中获取发送请求;
将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求的数据缓冲区;
将所述响应请求的RDMA工作请求发送到RDMA发送队列;
所述RDMA发送队列通过RDMA传输协议将所述响应请求的RDMA工作请求对应的数据发送到发送端,其中,所述响应请求的RDMA工作请求对应的数据包括发送端发送请求的唯一标识。
步骤S104:发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中。
具体的,所述步骤S104包括:
发送端的RDMA接收队列通过预先从发送端接收请求池中获取的接收请求,接收响应请求的RDMA工作请求对应的发送端发送请求的唯一标识;
根据所述发送端发送请求的唯一标识,从所述等待响应队列中找到所述唯一标识对应的发送请求;
将所述接收请求通过发送端接收请求池重新放入发送端RDMA接收队列中,以便发送端RDMA接收队列接收发送端下一发送请求的唯一标识;
将所述发送请求释放回到发送请求池中;
发送端通过发送端的数据发送进程从发送请求池中获取发送请求,其中,所述发送请求包含下一传输数据以及发送请求的唯一标识。
具体的,如果数据传输方式为同步传输,则在将所述发送请求释放回到发送请求池中之后,所述方法还包括:
通过发送端的等待响应队列通知发送端的数据发送进程,完成所述同步传输的发送过程。在同步传输方式下,数据发送后需要等待接收端接收才可以发送下一数据,因此,通过对比响应请求中发送端发送请求的唯一标识和等待响应队列中的发送请求,可以确保接收端已正常接收传输数据,提高传输的准确性,然后等待响应队列通知数据发送进程,完成当前数据同步传输的发送过程,等待传输下一数据。
本发明实施例使用发送请求来维护在发送流程中涉及的所有数据结构和内存,所以在发送流程中不需要额外进行数据结构内存的分配,所有必须的数据结构和内存都包含在发送请求中,避免了发送流程中进行数据结构内存分配带来的开销,降低整个发送流程的延迟。
并且,本发明实施例使用接收请求来维护在接收流程中涉及的所有数据结构和内存,所以在接收流程中不需要额外进行数据结构内存的分配,所有必须的数据结构和内存都包含在接收请求中,避免了接收流程中进行数据结构内存分配带来的开销,降低整个接收流程的延迟。
由于在数据传输过程中,本发明实施例分别使用发送请求和接受请求来管理发送流程和接收流程,所以在一次数据传输过程中,发送端需要申请一个发送请求的内存并初始化其来进行发送数据,同理,接收端也需要申请一个接收请求的内存并初始化其来进行接收数据,这种情况下,两端都需要分别做一次内存分配操作和初始化请求操作。因此,本发明实施例引入了请求池,针对发送请求引入发送请求池,针对接收请求引入接收请求池,则能够避免这两次内存分配操作和初始化请求操作,具体实现原理为:
发送端在建立连接后,直接初始化好足够多的发送请求并将它们放入发送请求池中,这样在发送数据过程中,可以直接从发送请求池中获取空闲的、已经初始化好的发送请求,将该发送请求用来发送数据;
接收端在建立连接后,初始化好足够多的接收请求并将它们放入接收请求池中,这样在接收数据过程中,可以直接从接收请求池中获取空闲的、已经初始化好的接收请求,将该接收请求用来接收数据。
引入上述请求池之后的优势就是不需要再调用系统API去分配请求使用的内存,也不用花费CPU去初始化这个新分配的请求,减少整个数据传输流程花费的时间,降低了整体的延迟。
此外,由于在使用DMA 地址来传输数据时,接收端需要分配足够数量的空闲页面来存储DMA地址中的数据,需要多次调用系统API来获取空间页面,每次调用系统API都是一次开销。因此,本发明实施例在接收端引入了页面池,使用页面池来管理空闲页面,接收端优先从页面池中获取到足够数量的空闲页面,当页面池中空闲页面充足时,完全不需要调用系统API去分配空闲page,可以直接从页面池中获取空闲页面,省去了系统API分配空闲页面带来的消耗,提高数据传输的性能,只有当页面池中空闲页面不足的例外情况下,才需要从系统中获取空闲页面。具体实施方式为:
在发送端和接收端建立连接后,接收端主动调用系统API去分配足够的空闲页面,并将这些空闲页面放入页面池中,之后在数据传输过程中如果需要空闲页面,优先从页面池中获取,获取失败才使用系统API去获取空闲页面。
从以上的描述中,可以看出,本发明实现了如下技术效果:
在本发明实施例中,使用发送请求和接收请求这两种请求以及页面,来管理所有在数据传输过程中需要使用到的内存和数据结构,所有必须的数据结构和内存都包含在请求中,不需要额外进行数据结构内存的分配,避免了数据传输过程中软件再进行额外的内存分配释放操作带来的开销,提高了数据传输过程的效率,降低了数据传输过程的延迟。
并且,使用请求池来管理请求,即在发送端和接收端分别使用发送请求池来管理发送请求,使用接收请求池来管理接收请求,以及使用页面池管理空闲页面,不需要调用系统API去分配请求和空闲页面使用的内存,也不需要花费CPU去初始化这个新分配的请求,减少整个流程花费的时间,也降低了整体数据传输过程的延迟。
此外,在发送端和接收端建立连接后,接收端主动调用系统API去分配足够的空闲页面,并将这些空闲页面放入页面池中,之后在数据传输过程中如果需要空闲页面,优先从页面池中获取,省去了系统API分配空闲页面带来的消耗,提高数据传输的性能,只有当页面池中空闲页面不足的例外情况下,才需要从系统中获取空闲页面。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本发明实施例还提供了一种用于实施上述基于RDMA的数据传输方法的基于RDMA的数据传输装置,如图4所示,该装置包括:
第一发送单元41,用于发送端通过发送端的数据发送进程从发送请求池中获取发送请求,将所述发送请求发送至接收端和等待响应队列,其中,所述发送请求包含发送请求的唯一标识以及将传输数据进行DMA映射后得到的发送端DMA地址;
第一接收单元42,用于接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的发送端DMA地址,将所述发送端DMA地址中的传输数据复制到接收端DMA地址中,并将所述接收端DMA地址中的传输数据移动到数据接收进程中,将所述接收请求释放回到接收请求池中;
第二发送单元43,用于接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端;
第二接收单元44,用于发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中。
本发明实施例还提供了一种电子设备,如图5所示,该电子设备包括一个或多个处理器51以及存储器52,图5中以一个处理器51为例。
该控制器还可以包括:输入装置53和输出装置54。
处理器51、存储器52、输入装置53和输出装置54可以通过总线或者其他方式连接,图5中以通过总线连接为例。
处理器51可以为中央处理器(Central Processing Unit,简称为CPU),处理器51还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,简称为DSP)、专用集成电路(Application Specific Integrated Circuit,简称为ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称为FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合,通用处理器可以是微处理器或者任何常规的处理器。
存储器52作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的控制方法对应的程序指令/模块。处理器51通过运行存储在存储器52中的非暂态软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例的基于RDMA的数据传输方法。
存储器52可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据服务器操作的处理装置的使用所创建的数据等。此外,存储器52可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器52可选包括相对于处理器51远程设置的存储器,这些远程存储器可以通过网络连接至网络连接装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置53可接收输入的数字或字符信息,以及产生与服务器的处理装置的用户设置以及功能控制有关的键信号输入。输出装置54可包括显示屏等显示设备。
一个或者多个模块存储在存储器52中,当被一个或者多个处理器51执行时,执行如图3所示的方法。
本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成的,程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各电机控制方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,简称为ROM)、随机存储记忆体(Random AccessMemory,简称为RAM)、快闪存储器(Flash Memory,简称为FM)、硬盘(Hard Disk Drive,简称为HDD)或固态硬盘(Solid-State Drive,简称为SSD)等;存储介质还可以包括上述种类的存储器的组合。
虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。

Claims (10)

1.一种基于RDMA的数据传输方法,其特征在于,包括:
发送端通过发送端的数据发送进程从发送请求池中获取发送请求,将所述发送请求发送至接收端和等待响应队列,其中,所述发送请求包含发送请求的唯一标识以及将传输数据进行DMA映射后得到的发送端DMA地址;
接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的发送端DMA地址,将所述发送端DMA地址中的传输数据复制到接收端DMA地址中,并将所述接收端DMA地址中的传输数据移动到数据接收进程中,将所述接收请求释放回到接收请求池中;
接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端;
发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中。
2.根据权利要求1所述的方法,其特征在于,所述将所述发送请求发送至接收端和等待响应队列包括:
将所述发送请求的RDMA工作请求发送到RDMA发送队列;
所述RDMA发送队列通过RDMA传输协议将所述发送请求的RDMA工作请求对应的数据发送到接收端,其中,所述发送请求的RDMA工作请求对应的数据包括发送请求的唯一标识以及将传输数据进行DMA映射后得到的发送端DMA地址;
将所述发送请求发送至等待响应队列。
3.根据权利要求1所述的方法,其特征在于,所述接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的发送端DMA地址,将所述发送端DMA地址中的传输数据复制到接收端DMA地址中,并将所述接收端DMA地址中的传输数据移动到数据接收进程中,将所述接收请求释放回到接收请求池中,包括:
接收端的RDMA接收队列通过预先从接收端接收请求池中获取的接收请求,接收所述发送端发送请求中RDMA工作请求对应的数据;
接收端从页面池中获取页面,并对所述页面进行DMA映射,得到接收端DMA地址,其中,所述页面的数量满足存储所述传输数据的要求;
对所述发送端DMA地址进行RDMA读操作,得到传输数据,并将所述传输数据复制到所述接收端DMA地址的页面中;
复制完成后,将所述接收请求发送到已完成队列中。
4.根据权利要求3所述的方法,其特征在于,在将所述接收请求发送到已完成队列中之后,所述方法还包括:
接收端的数据接收进程将所述已完成队列的接收请求中包含所述传输数据的页面移动到数据接收进程中;
移动完成后,将所述接收请求释放回到接收请求池中;
接收端的RDMA接收队列从所述接收请求池中获取接收请求,以接收所述发送端下一发送请求中RDMA工作请求对应的数据。
5.根据权利要求1所述的方法,其特征在于,所述接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端,包括:
接收端获取发送端发送请求的唯一标识后,基于所述唯一标识从接收端的发送请求池中获取发送请求;
将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求的数据缓冲区;
将所述响应请求的RDMA工作请求发送到RDMA发送队列;
所述RDMA发送队列通过RDMA传输协议将所述响应请求的RDMA工作请求对应的数据发送到发送端,其中,所述响应请求的RDMA工作请求对应的数据包括发送端发送请求的唯一标识。
6.根据权利要求1所述的方法,其特征在于,所述发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中,包括:
发送端的RDMA接收队列通过预先从发送端接收请求池中获取的接收请求,接收响应请求的RDMA工作请求对应的发送端发送请求的唯一标识;
根据所述发送端发送请求的唯一标识,从所述等待响应队列中找到所述唯一标识对应的发送请求;
将所述接收请求通过发送端接收请求池重新放入发送端RDMA接收队列中,以便发送端RDMA接收队列接收发送端下一发送请求的唯一标识;
将所述发送请求释放回到发送请求池中;
发送端通过发送端的数据发送进程从发送请求池中获取发送请求,其中,所述发送请求包含下一传输数据以及发送请求的唯一标识。
7.根据权利要求1所述的方法,其特征在于,如果数据传输方式为异步传输,则在将所述发送请求发送至接收端和等待响应队列之后,所述方法还包括:
通过RDMA传输协议将所述发送请求的RDMA 工作请求发送到RDMA发送队列后,返回到发送端的数据发送进程,完成所述异步传输的发送过程;
如果数据传输方式为同步传输,则在将所述发送请求释放回到发送请求池中之后,所述方法还包括:
通过发送端的等待响应队列通知发送端的数据发送进程,完成所述同步传输的发送过程。
8.一种基于RDMA的数据传输装置,其特征在于,包括:
第一发送单元,用于发送端通过发送端的数据发送进程从发送请求池中获取发送请求,将所述发送请求发送至接收端和等待响应队列,其中,所述发送请求包含发送请求的唯一标识以及将传输数据进行DMA映射后得到的发送端DMA地址;
第一接收单元,用于接收端的RDMA接收队列通过预先获取的接收请求,接收所述发送请求中的发送端DMA地址,将所述发送端DMA地址中的传输数据复制到接收端DMA地址中,并将所述接收端DMA地址中的传输数据移动到数据接收进程中,将所述接收请求释放回到接收请求池中;
第二发送单元,用于接收端基于发送端发送请求的唯一标识从接收端发送请求池中获取发送请求,并将所述发送请求初始化为响应请求,将发送端发送请求的唯一标识存入所述响应请求,将所述响应请求发送到发送端;
第二接收单元,用于发送端通过发送端的RDMA接收队列接收所述响应请求中发送端发送请求的唯一标识,根据所述发送请求的唯一标识从所述等待响应队列中找到对应的发送请求,并将所述发送请求释放回到发送请求池中。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行权利要求1-7任意一项所述的基于RDMA的数据传输方法。
10.一种电子设备,其特征在于,所述电子设备包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器执行权利要求1-7任意一项所述的基于RDMA的数据传输方法。
CN202110415701.1A 2021-04-19 2021-04-19 基于rdma的数据传输方法、装置及电子设备 Active CN112822299B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110415701.1A CN112822299B (zh) 2021-04-19 2021-04-19 基于rdma的数据传输方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110415701.1A CN112822299B (zh) 2021-04-19 2021-04-19 基于rdma的数据传输方法、装置及电子设备

Publications (2)

Publication Number Publication Date
CN112822299A true CN112822299A (zh) 2021-05-18
CN112822299B CN112822299B (zh) 2021-07-13

Family

ID=75863647

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110415701.1A Active CN112822299B (zh) 2021-04-19 2021-04-19 基于rdma的数据传输方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN112822299B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113900977A (zh) * 2021-09-16 2022-01-07 深圳致星科技有限公司 联邦学习中dma数据传输优化方法
CN114911581A (zh) * 2022-07-19 2022-08-16 深圳星云智联科技有限公司 数据通信方法及相关产品

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103645994A (zh) * 2013-11-05 2014-03-19 华为技术有限公司 一种数据处理方法及设备
CN103902486A (zh) * 2014-04-08 2014-07-02 华为技术有限公司 一种远端直接内存访问实现方法、装置及系统
US20170295237A1 (en) * 2016-04-07 2017-10-12 Fujitsu Limited Parallel processing apparatus and communication control method
CN111314731A (zh) * 2020-02-20 2020-06-19 上海交通大学 面向视频文件大数据的rdma混合传输方法、系统及介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103645994A (zh) * 2013-11-05 2014-03-19 华为技术有限公司 一种数据处理方法及设备
CN103902486A (zh) * 2014-04-08 2014-07-02 华为技术有限公司 一种远端直接内存访问实现方法、装置及系统
US20170295237A1 (en) * 2016-04-07 2017-10-12 Fujitsu Limited Parallel processing apparatus and communication control method
CN111314731A (zh) * 2020-02-20 2020-06-19 上海交通大学 面向视频文件大数据的rdma混合传输方法、系统及介质

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113900977A (zh) * 2021-09-16 2022-01-07 深圳致星科技有限公司 联邦学习中dma数据传输优化方法
CN114911581A (zh) * 2022-07-19 2022-08-16 深圳星云智联科技有限公司 数据通信方法及相关产品
CN114911581B (zh) * 2022-07-19 2022-09-23 深圳星云智联科技有限公司 数据通信方法及相关产品

Also Published As

Publication number Publication date
CN112822299B (zh) 2021-07-13

Similar Documents

Publication Publication Date Title
CN113485822A (zh) 内存管理方法、系统、客户端、服务器及存储介质
CN112822299B (zh) 基于rdma的数据传输方法、装置及电子设备
CN113590364B (zh) 一种基于分布式共享内存系统的数据处理方法和装置
CN109218356B (zh) 管理服务器上有状态应用的方法和设备
CN112822300B (zh) 基于rdma的数据传输方法、装置及电子设备
CN113076281B (zh) 一种Ceph内核客户端进行通信的方法、系统、设备及介质
JP2021518955A (ja) プロセッサコアのスケジューリング方法、装置、端末及び記憶媒体
WO2014183417A1 (zh) 管理内存的方法、装置和系统
WO2017032152A1 (zh) 将数据写入存储设备的方法及存储设备
CN115964319A (zh) 远程直接内存访问的数据处理方法及相关产品
CN111126604A (zh) 模型训练方法、装置、服务器及存储介质
CN115080479B (zh) 传输方法、服务器、设备、裸金属实例及基板管理控制器
CN115686875A (zh) 用于在多个进程之间传输数据的方法、设备和程序产品
CN109818977B (zh) 一种接入服务器通信优化方法、接入服务器以及通信系统
CN113961520A (zh) 动态文件挂载方法、系统、计算机设备及可读存储介质
CN107579929B (zh) 一种可靠连接通信队列对的设置方法、系统及相关装置
CN115934585A (zh) 内存管理方法、装置和计算机设备
CN110737530B (zh) 一种提升handle标识解析系统收包能力的方法
CN115237589A (zh) 一种基于sr-iov的虚拟化方法、装置和设备
WO2017166997A1 (zh) 智能网卡侧的异常处理方法和装置
CN108388409B (zh) 打印请求处理方法、装置、计算机设备和存储介质
CN109698845B (zh) 数据传输的方法、服务器、卸载卡及存储介质
US20170034267A1 (en) Methods for transferring data in a storage cluster and devices thereof
KR102303424B1 (ko) 랜덤 액세스 메모리를 포함하는 하나 이상의 처리 유닛을 위한 직접 메모리 액세스 제어 장치
CN111404986B (zh) 数据传输处理方法、设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant