CN118200253A - 面向rdma ud传输的可靠通信方法、电子设备及可读介质 - Google Patents

面向rdma ud传输的可靠通信方法、电子设备及可读介质 Download PDF

Info

Publication number
CN118200253A
CN118200253A CN202410488072.9A CN202410488072A CN118200253A CN 118200253 A CN118200253 A CN 118200253A CN 202410488072 A CN202410488072 A CN 202410488072A CN 118200253 A CN118200253 A CN 118200253A
Authority
CN
China
Prior art keywords
data
layer
transmission
communication information
buffer
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.)
Pending
Application number
CN202410488072.9A
Other languages
English (en)
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.)
China Telecom Technology Innovation Center
China Telecom Corp Ltd
Original Assignee
China Telecom Technology Innovation Center
China Telecom Corp 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 China Telecom Technology Innovation Center, China Telecom Corp Ltd filed Critical China Telecom Technology Innovation Center
Priority to CN202410488072.9A priority Critical patent/CN118200253A/zh
Publication of CN118200253A publication Critical patent/CN118200253A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本公开提供了一种面向RDMA UD传输的可靠通信方法、电子设备及可读介质,属于计算机技术领域。该方法在发送端设置第一抽象层对接第一应用层与封装第一实现层,在第一应用层发起数据发送申请时,第一抽象层获取下发的原始数据,并通过第一实现层对原始数据基于动态MTU进行分片,获得数据段,以及封装并下发对应的WQE,在该WQE对应的数据段中添加排序头;再获取指向接收端中对应QP的远端通信信息,添加到排序头中,进而对数据段执行基于UD传输的乱序发送,以使接收端基于WQE解析排序头将数据段按序写入到对应用户缓冲区,以及根据远端通信信息进行分发。该方法通过抽象层接管,能够统一处理以提升网络性能,以及通过数据重排序和分发,提升数据传输的可靠性。

Description

面向RDMA UD传输的可靠通信方法、电子设备及可读介质
技术领域
本公开属于计算机技术领域,具体涉及面向RDMA UD传输的可靠通信方法、电子设备及计算机可读介质。
背景技术
通信的可靠性指在发送和接收者之间传输数据在一次发送的基础上,能够被保证按照发送顺序完整地被接收。在RDMA(Remote Direct Memory Access,远程直接内存访问)网络中,可以采用RC(Reliable Connection,可靠连接)模式进行通信,在建立对端连接的基础上通过多种验证机制保证传输可靠性。但是,RC通信又会导致算力开销大,不能满足低延迟、高吞吐量以及大规模负载的应用背景。
在此基础上,可以采用UD(Unreliable Datagram,不可靠数据报)模式进行通信,UD模式可以实现无连接通信、高度并行化和高效数据传输,满足实际应用需求,但是又因为多端发送、无序交付、适用范围有限等问题,导致其通信传输不可靠,且容易加重网络负载。在实际应用中,使得高效传输与可靠通信不能兼得。
发明内容
本公开实施例的目的是发送一种面向RDMA UD传输的可靠通信方法、面向RDMA UD传输的可靠通信装置、电子设备及计算机可读介质,能够解决在RDMA网络中,不能兼顾可靠性通信与数据传输效率的问题。
为了解决上述技术问题,本公开是这样实现的:
第一方面,本公开提供了一种面向RDMA UD传输的可靠通信方法,可以应用于发送端的第一抽象层,第一抽象层用于对接发送端的第一应用层以及对发送端的第一实现层进行封装,该方法可以包括:响应于第一应用层发起的数据发送申请,获取下发的原始数据;通过第一实现层对原始数据基于动态MTU进行分片,获得至少一个数据段;通过第一实现层封装并下发数据段对应的WQE,并在WQE对应的数据段中添加排序头;通过第一实现层获取指向接收端中对应QP的远端通信信息,并将远端通信信息添加到对应数据段的排序头内;对数据段执行基于UD传输的乱序发送,以使接收端基于排序头将数据段按序写入到对应用户缓冲区,以及根据远端通信信息进行分发。
可选地,发送端还包括发送缓冲区,第一实现层包括数据处理模块,基于动态MTU对原始数据进行分片,获得至少一个数据段,包括:使数据处理模块对原始数据基于动态MTU进行分片,获得写入发送缓冲区中的至少一个数据段。
可选地,封装并下发数据段对应的WQE,包括:使数据处理模块封装并下发指向发送缓冲区中数据段的WQE。
可选地,所第一实现层还包括可靠处理模块,获取指向接收端中对应QP的远端通信信息,包括:使可靠处理模块获取基于带外数据方式同步的远端通信信息,远端通信信息包括QPN和QKey。
可选地,在接收端存在共享QP的情况下,远端通信信息还包括进程标识和线程标识。
可选地,通过第一实现层对原始数据基于动态MTU进行分片,获得至少一个数据段,包括:通过第一实现层获取网络时延信号;在网络时延信号符合常规时延信号的情况下,将默认MTU作为动态MTU对原始数据进行分片,获得至少一个数据段;在网络时延信号不符合常规时延信号的情况下,根据网络时延信号相对常规时延信号的偏差对默认MTU进行动态调整后,获得动态MTU对原始数据进行分片,获得至少一个数据段。
第二方面,本公开实施例提供了灵一种面向RDMA UD传输的可靠通信方法,应用于接收端,接收端包括第二抽象层,第二抽象层用于对接接收端的第二应用层以及对接收端的第二实现层进行封装,方法包括:对乱序接收的数据段解析发送端添加的排序头,并将数据段根据排序头按序写入对应的用户缓冲区,数据段由发送端基于第一方面的方法提供;通过第二实现层解析远端通信信息,并根据远端通信信息获取数据段在用户缓冲区的缓冲地址;通过第二实现层将缓冲地址发送到第二抽象层;通过第二抽象层将缓冲地址上报到第二应用层,以使第二应用层通过缓冲地址访问用户缓冲区。
可选地,接收端还包括接收缓冲区,对乱序接收的数据段解析发送端添加的排序头,并将数据段根据排序头按序写入对应的用户缓冲区,包括:对乱序接收的数据段写入接收缓冲区,接收缓冲区为片上散列缓存;解析数据段中的排序头,根据排序头将数据段按序写入对应的用户缓冲区;释放接收缓冲区。
可选地,对乱序接收的数据段写入接收缓冲区之后,还包括:返回CQE通知。
第三方面,本公开提供了一种电子设备,该电子设备包括处理器、存储器及存储在该存储器上并可在该处理器上运行的程序或指令,该程序或指令被该处理器执行时实现如第一方面或第二方面的面向RDMA UD传输的可靠通信方法的步骤。
第四方面,本公开提供了一种计算机可读介质,计算机可读介质上存储程序或指令,该程序或指令被处理器执行时实现如第一方面或第二方面的面向RDMA UD传输的可靠通信方法的步骤。
第五方面,本公开提供了一种芯片,该芯片包括处理器和通信接口,通信接口和处理器耦合,该处理器用于运行程序或指令,实现如第一方面或第二方面的面向RDMA UD传输的可靠通信方法的步骤。
第六方面,本公开提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如实现如第一方面或第二方面的面向RDMA UD传输的可靠通信方法的步骤。
本公开提供的面向RDMA UD传输的可靠通信方法,通过在发送端设置第一抽象层对接第一应用层与封装第一实现层,实现对数据处理、发送的接管,在第一应用层发起数据发送申请时,第一抽象层获取下发的原始数据,并通过第一实现层对原始数据基于动态MTU进行分片,获得数据段,以及封装并下发对应的WQE,在该WQE对应的数据段中添加排序头;再获取指向接收端中对应QP的远端通信信息,添加到排序头中;在此基础上,对数据段执行基于UD传输的乱序发送,以使接收端解析数据段中的排序头,并基于排序头将数据段按序写入到对应用户缓冲区,以及根据远端通信信息进行分发。该方法通过抽象层接管,能够对应用侧的数据处理进行统一、协调,提升网络性能,以及对数据段进行排序头、远端通信信息的添加,可以在不改动底层路由交换协议的基础上,实现数据的重排序和分发,提升了数据传输的可靠性,从而在UD传输基础上兼顾传输效率与可靠性。
附图说明
图1为本公开实施例提供的面向RDMA UD传输的可靠通信方法的步骤流程图之一;
图2为本公开实施例提供的面向RDMA UD传输的可靠通信方法的步骤流程图之二;
图3为本公开实施例提供的一种软件-硬件架构的示意图;
图4为本公开实施例提供的面向RDMA UD传输的可靠通信方法的步骤流程图之三;
图5为本公开实施例提供的一种发送端与接收端间基于软件-硬件架构的数据传输流程示意图;
图6为本公开实施例提供的面向RDMA UD传输的可靠通信方法在发送端与接收端间的交互流程示意图;
图7为本公开实施例提供的一种电子设备的结构示意图;
图8为本公开实施例提供的一种电子设备的硬件示意图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
本公开的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
值得指出的是,RDMA是一种远程直接内存访问技术,可以将数据从发送端的内存传输到接收端,而无需双方操作系统的介入,解放了数据包在用户空间和内核空间复制移动和上下文切换的开销,能够支持高吞吐、低延迟的网络通信,尤其适合在大规模并行计算机集群中使用。
其中,RDMA提供了基于WQ(Work Queue,工作队列)的端到端通信,消息服务建立在通信双方端对端的QP(Queue Pairs,队列对)上,QP指发送和接收WQ的组合,包括SQ(SendQueue,发送队列)和RQ(Receive Queue,接收队列)。在WQ中基于WQE(Work Queue Element,工作队列元素)描述发送或接收数据的任务类型、内存地址、数据长度等操作信息。在一次发送-接收流程中,发送端可以将发送数据相关的WQE放入SQ中,对应的接收端可将接收数据相关的WQE放入RQ中。在每一设备端,每个进程可以申请和使用多个QP,每一设备端上的每一QP具有唯一QPN(Query Pair Number,队列对编号)。
进一步的,RDMA还提供了一种CQ(Complete Queue,完成队列),CQ中以CQE(Completion Queue Element,完成队列元素)记录数据处理任务的完成。在RDMA网络中,WQE表示任务下发,CQE表示任务完成,则每个CQE都包含对应WQE完成的信息。在RDMA网络中,读取和写入都是单端操作,而本端通过虚拟地址进行远端内存的读写,远端应用无需感知本次通信。
QP之间的服务类型可以划分为面向连接(Connection)与面向数据报(Datagram),面向连接时本端的一个QP与远端另一个QP建立关联,从而在本端QP下发的每个WQE其目的为远端关联的对应QP;面向数据报时本端的一个QP通过WQE来指定目的,从而QP下发的每个WQE可以指向不同的目的。在面对连接、面对数据报的服务类型中,本端QP可以传输数据的远端QP是在创立QP的准备阶段互相告知的,因此在面向连接的传输中本端QP与一个目的的远端QP进行信息交换,而在面向数据报的传输中本端QP与每个目的的远端QP进行信息交换。
在此基础上,还可以基于传输的可靠性进行划分,其中应用广泛的常规传输方式为RC(Reliable Connection,可靠连接)和UD(Unreliable Datagram,不可靠数据报)。RC传输可靠,但需要QP之间一对一关联,对网络资源占用大,UD传输QP可以并行地与多个QP进行数据传输,但是不能保证可靠性。
本公开实施例提供了一种面向RDMA UD传输的可靠通信方法,通过对待传输的原始数据进行分片、分类、排序等处理,在UD传输的基础上提高传输的可靠性。下面结合附图,通过具体的实施例及其应用场景对本公开实施例提供的信令互通进行详细地说明。
图1为本公开实施例提供的面向RDMA UD传输的可靠通信方法的步骤流程图之一。该方法可以应用于发送端的第一抽象层,第一抽象层用于对接发送端的第一应用层以及对发送端的第一实现层进行封装。
在RDMA网络中应用层(Application)包括VerBS标准接口,定义了软件、硬件在不同调用下应执行的动作。本公开实施例中,在发送端设置第一抽象层(Abstract)以对其第一应用层原生的VerBS标准接口进行对接,并封装对应的第一实现层(Provider)。在第一实现层中可以包括VerBS对应的API(Application Programming Interface,应用程序编程接口)实现,以便第一抽象层可以通过调用对应的API实现接管QP的创建和维护,数据的发送和接收,以及对数据统一、协调处理。另外,本公开实施例在已创建QP的基础上执行,已交换可支持数据传输的设备端、QP、缓冲区等相关控制信息。
如图1所示,该方法可以包括如下步骤101至步骤105。
步骤101、响应于第一应用层发起的数据发送申请,获取下发的原始数据。
本公开实施例中,第一应用层可以基于UD传输模式,调用原生的VerBS标准接口创建WR(Work Request,传输请求)以发起数据发送申请,并在WR中描述待传输的原始数据。在此基础上,第一抽象层可以接管原始数据的发送,响应于该数据发送申请,获取下发的原始数据。此时,第一应用层调用VerBS标准接口而不感知第一抽象层的存在,第一抽象层接管了VerBS标准接口往第一实现层的调度,因此创建WR时传参的类型和结构应与VerBS标准接口对应。
步骤102、通过第一实现层对原始数据基于动态MTU进行分片,获得至少一个数据段。
在此基础上,第一抽象层可以往第一实现层调度,实现对原始数据的基于动态MTU(Maximum Transmission Unit,最大传输单元)的分片,每条原始数据可以切分为至少一个数据段,数据长度小于动态MTU的可以进行补全。MTU指网络传输的最大数据长度,以字节为单位,可以表示为一次发送报文的最大字节数。本公开实施例中,通过动态MTU对原始数据进行分片,使得分片大小可以动态调整,以适应网络传输质量、业务处理需求等,在最大利用网络带宽的基础上,避免数据在传输中被截断,以及通过规范的切分便于数据在接收时的重排序。
在本公开一可选的方法实施例中,步骤102可以包括如下步骤A1至步骤A3。
步骤A1、通过第一实现层获取网络时延信号。
步骤A2、在网络时延信号符合常规时延信号的情况下,将默认MTU作为动态MTU对原始数据进行分片,获得至少一个数据段。
步骤A3、在网络时延信号不符合常规时延信号的情况下,根据网络时延信号相对常规时延信号的偏差对默认MTU进行动态调整后,获得动态MTU对原始数据进行分片,获得至少一个数据段。
本公开实施例中,网络时延信号(Round Trip Time,RTT)可以是网络中数据实际传输的时延信号,可以以网络时延信号表示网络传输质量。在切分数据段时可以网络时延信号评估网络拥塞状态,在无网络拥塞时可以将默认MTU作为动态MTU对原始数据进行分片;在处于网络拥塞状态下时,可以根据网络时延信号相对常规时延信号(base-RoundTrip Time,base-RTT)的偏差对默认MTU进行动态调整,并将调整后的默认MTU作为动态MTU进行原始数据分片,获得大小为动态MTU至少一个数据段。常规时延信号可以是根据网络带宽、业务需求等相关信息确定的,使业务正常进行时的时延信号。
其中,无网络拥塞可以是网络时延信号符合常规时延信号,如网络时延信号小于或等于常规时延信号,或者网络时延信号大于常规时延信号的偏差在允许的范围内;处于网络拥塞状态下可以是网络时延信号不符合常规时延信号,如网络时延信号大于常规时延信号,或者网络时延信号大于常规时延信号的偏差在允许的范围外。举例而言,在400Gbps带宽的RDMA网络中,无网络拥塞情况时以默认MTU的4096字节为动态MTU进行分片,处于网络拥塞状态时以base-RTT相对RTT比值乘以4096字节,将计算结果作为动态MTU进行分片。
步骤103、通过第一实现层封装并下发数据段对应的WQE,并在WQE对应的数据段中添加排序头。
WQE可以基于WR生成,以描述发送任务的信息,如WQE可以表示“将位于地址1且长度为x的数据发送到地址2”。本公开实施例中,WQE在分片的基础上生成,从而使得切分后的数据段与WQE指向的数据报文具有一一对应关系,WQE可以描述将数据段从发送端的存储地址发送到接收端。进一步的,还可以在WQE对应的数据段中添加排序头,描述数据段在原始数据中的位序,该位序可以以offset偏移、data length等参数表示。WQE在封装后可以下发到发送端对应的SQ中。
步骤104、通过第一实现层获取指向接收端中对应QP的远端通信信息,并将远端通信信息添加到对应数据段的排序头内。
本公开实施例中,远端通信信息可以指接收端的相关通信信息,可以在建立数据通信前与接收端交换获得,用于接收端对数据段进行发送端侧的识别,以及分发。可选地,该远端通信信息可以指向接收端对应的QP,以便接收端能够匹配到所接收数据在用户缓冲区的缓冲地址。在获取远端通信信息的基础上,可以添加到对应数据段的排序头内,其中一条原始数据切分获得的数据段应具有一致的远端通信信息。
步骤105、对数据段执行基于不可靠数据报UD传输的乱序发送,以使接收端基于排序头将数据段按序写入到对应用户缓冲区,以及根据远端通信信息进行分发。
本公开实施例中,在添加排序头、远端通信信息的基础上,可以采用RDMA原生的UD传输流程,通过Rdma Core(RDMA用户态软件协议栈)执行UD传输的QP数据发送请求,由发送端的以太网卡(RNIC)基于WQE确定执行数据发送任务,并将数据段写入到WQE所指定的接收端地址。由于UD传输中一个QP可以和其他任意的QP进行数据发送,支持一对多的并行式传输,但不保证数据的按需性和交付性,因此对数据段执行UD传输时为乱序发送,而接收端可以解析确定排序头以将数据段按序写入对应用户缓冲区,以及根据远端通信信息可以区分不同数据段在接收端对应的QP,从而在对应用户缓冲区匹配到读取该数据段的缓冲地址,完成数据的接收。
需要说明的是,在发送过程中采用的是RMDA原生的UD QP发送流程,发送端基于SQWQE将数据段发送到接收端的对应RQ,接收端消耗一个RQ WQE进行数据段接收,将数据段存储到接收端对应的存储区域。此时,SQ WQE与RQ WQE不等同。
图2为本公开实施例提供的面向RDMA UD传输的可靠通信方法的步骤流程图之二。应用于发送端的第一抽象层,第一抽象层用于对接发送端的第一应用层以及对发送端的第一实现层进行封装,如图2所示,该方法可以包括如下步骤201至步骤205。
步骤201、响应于第一应用层发起的数据发送申请,获取下发的原始数据。
本公开实施例中,步骤201可对应参照前述步骤101的相关描述,为避免重复,在此不再赘述。
本公开实施例中,在接收到第一应用层发起的数据发送申请时,还可以同步应用程序不同进程间的请求,从而对不同进程的数据发送请求可以统一处理,以提升网络的通信性能。进一步的,第一抽象层还可以接管对应的事件信息传递,以无缝兼容VerBS标准接口。
本公开一可选的实施例中,发送端还包括发送缓冲区,第一实现层包括数据处理模块。
本公开实施例中,发送缓冲区(Sending Buffer)用于缓存待发送的数据段,可以在发送端预先分配对应的缓冲区域;数据处理(Data Handle)模块对应第一实现层中与数据分片相关的API实现。
步骤202、使数据处理模块对原始数据基于动态MTU进行分片,获得写入发送缓冲区中的至少一个数据段。
本公开实施例中,第一抽象层可以调度到第一实现层中对应的数据处理模块对原始数据基于动态MTU进行分片,将切分后的至少一个数据段缓存到发送缓冲区中,该切分过程可参照前述步骤102的相关描述,为避免重复,在此不再赘述。
步骤203、使数据处理模块封装并下发指向发送缓冲区中数据段的WQE,并在WQE对应的数据段中添加排序头。
本公开实施例中,第一抽象层可以调度到第一实现层中对应的数据处理模块封装并下发指向发送缓冲区中数据段的WQE。由于原始数据分片实在获取原始数据后,数据段存储到发送缓冲区中,因而WQE在描述任务信息时指向数据段在发送缓冲区中的存储地址,该WQE封装及下发的过程可对应参照前述步骤103的相关描述,为避免重复,在此不再赘述。
本公开实施例中,在生成WQE时可以对应生成其所指向数据段的消息唯一标识符(msg_id),以唯一标识不同的数据段。在对原始数据切分后每个数据段包括消息唯一标识符部分组成一个MTU单元,每个数据段中包含一段完整的有效载荷(Payload)。
本公开一可选的一方法实施例中,第一实现层还包括可靠处理模块。
本公开实施例中,可靠处理(Reliable Control)模块对应第一实现层中与数据报文的分类及辨别相关的API实现。
步骤204、使可靠处理模块获取基于带外数据方式同步的远端通信信息,远端通信信息包括队列对编号QPN和队列密钥Qkey。
本公开实施例中,第一抽象层可以调度可靠处理模块基于带外数据(Out ofband,OOB)的方式获取远端通信信息。其中,带外数据用于建立数据通信前的信息协同机制,远端通信信息可以指向接收端对应的QP,如可以是QPN,QPN为每个QP对应的编号,基于IB协议规定采用24个字节表示,即每个设备端最大可以同时使用224个QP,由于每个设备端都维护各自的QPN集合,相互独立,因此不同设备端上不同的QP可能存在QPN相同的情况,但在同一设备端上QPN唯一。Qkey(Queue Key)是一种保护机制,用于验证发送端是否有权访问接收端的QP,基于IB协议规定采用32个字节表示。远端通信信息中包括Qkey以使接收端在Qkey匹配的情况下接收发送端发送的数据段。具体的,可对应参照前述步骤104的相关描述,为避免重复,在此不再赘述。
在本公开实施例中,可以通过RDMA网络中的通信管理(Communication Manager)模块实现带外交互,获取远端通信信息。
在本公开一可选的方法实施例中,在接收端存在共享QP的情况下,远端通信信息还包括进程标识和线程标识。
本公开实施例中,由于SQ的利用率通常高于QR,因此接收端还可能存在接收端的应用程序中多个线程共享一个QP的情况,即任意发送端QP发送到接收端的数据段皆通过消耗SRQ(Shared Receive Queue,共享接收队列)中的WQE进行接收,同时不同线程接收的数据段也共享了SQR对应的缓冲区域,以节省存储空间。此时,在远端通信信息中还可以进一步包括进程标识和线程标识等,以使接收端对同QP对应的缓存区域内不同线程对应的数据段进行类别、完整性的分类和识别。在发送端可以由第一抽象层统计QP的调度次数,在调度次数仅为单次时可以认为接收端的QP不是由多线程共享的,因此可以不携带进程标识和线程标识等信息以减少头部体量,降低数据传输压力,提高效率;反之,则需要添加进程标识和线程标识等信息,以便接收端准确匹配缓存地址,完成数据接收。
步骤205、对数据段执行基于不可靠数据报UD传输的乱序发送,以使接收端基于排序头将数据段按序写入到对应用户缓冲区,以及根据远端通信信息进行分发。
本公开实施例中,步骤205可对应参照前述步骤105的相关描述,为避免重复,在此不赘述。
本公开提供的面向RDMA UD传输的可靠通信方法,通过在发送端设置第一抽象层对接第一应用层与封装第一实现层,实现对数据处理、发送的接管,在第一应用层发起数据发送申请时,第一抽象层获取下发的原始数据,并通过第一实现层对原始数据基于动态MTU进行分片,获得数据段,以及封装并下发对应的WQE,在该WQE对应的数据段中添加了排序头;再获取指向接收端中对应QP的远端通信信息,添加到排序头中;在此基础上,对数据段执行基于UD传输的乱序发送,以使接收端解析排序头,并基于排序头将数据段按序写入到对应用户缓冲区,以及根据远端通信信息进行分发。该方法通过抽象层接管,能够对应用侧的数据处理进行统一、协调,提升网络性能,以及对数据段进行排序头、远端通信信息的添加,可以在不改动底层路由交换协议的基础上,实现数据的重排序和分发,提升了数据传输的可靠性,从而在UD传输基础上兼顾传输效率与可靠性。
图3为本公开实施例提供的一种软件-硬件架构的示意图,如3所示,该架构中可用于实现前述图1至图2任一所述的面向RDMA UD传输的可靠通信方法。其中,硬件部分包括RDMA网卡(RDMANIC),软件部分包括应用层、抽象层以及原生模块(Native Module)。
其中,应用层包括VerBS标准接口。
抽象层对接应用层,接收应用层调用VerBS标准接口下发的工作请求,该工作请求可以对应的事件类型可以是数据发送任务,也可以是数据接收任务,该工作请求可以通过设置回调函数事件(Callback Event)触发。进一步的,抽象层还可以采用进程数据同步锁(Process Sync Locks)对来自应用层的工作请求执行进程间的同步,以统一处理数据。
抽象层还可以调度到实现层,该实现层包括VerBS实现层API(VerBS ProviderAPI)。
在原生模块中封装有可供调用的不同模块,如对应于前述抽象层的实现层。该实现层包括数据处理模块与可靠处理模块。数据处理模块可以对发送的数据进行数据分片(Fragmentation),将分片获得的数据段写入本地的发送缓冲区;也可以对接收缓冲区接收的数据段按序写入本地的用户缓冲区进行重排序(Reorder Process)。可靠处理模块可以对发送的数据进行传输标识(Transmission Identity),通过添加、提取以及分析远端通信信息,实现数据段的分类及辨别。在原生模块中还配置有用于执行原生UD模式的QP传输(UD-QP)流程的RDMA网卡用户态软件栈,由RDMA网卡确定执行数据发送任务。
图4为本公开实施例提供的面向RDMA UD传输的可靠通信方法的步骤流程图之三,应用于接收端,接收端包括第二抽象层,第二抽象层用于对接接收端的第二应用层以及对接收端的第二实现层进行封装。
本公开实施例中,接收端为一次数据传输流程中接收数据的设备端,与图1至2任一所述的发送端对应。其中,第二抽象层、第二应用层与第二实现层可对应参照前述图1中对第一抽象层、第一应用层与第一实现层的相关描述,为避免重复,在此不再赘述。
该方法可以包括如下步骤401至404。
步骤401、对乱序接收的数据段,解析发送端添加的排序头,并将数据段根据排序头按序写入对应的用户缓冲区,数据段由发送端前述图1至图2任一所述的方法提供。
本公开实施例中,发送端基于UD传输对数据段乱序发送,因而接收端也是乱序接收数据段。此时,接收端可以提取所接收数据段中由发送端所添加的排序头,根据前述图1和2中所述排序头可以表示数据段在原始数据中的位序,从而接收端可以根据排序头对数据段进行重排序,将其按序写入接收端本地的用户缓冲区(User Buffer),保证完整数据接收的可靠性。该用户缓冲区可以在带外数据同步时预先分配,用于存储排序后的数据段。
步骤402、通过第二实现层解析远端通信信息,并根据远端通信信息获取数据段在用户缓冲区的缓冲地址。
本公开实施例中,接收端的用户缓冲区中可能包括不同QP对应的存储地址,此时可以通过第二实现层解析数据段中排序头内携带的远端通信信息,根据图1和图2所述,远端通信信息可以指向接收端对应QP,从而接收端可以根据远端通信信息能够在用户缓冲区匹配到存储对应按序排列的数据段的缓冲地址。
其中,远端通信信息可以包括QPN,从而基于接收端内对QP的唯一标识确定QP以及其对应分配的用户缓冲区的存储地址;进一步的,在接收端存在共享QP的情况下,远端通信信息还可以包括进程标识、线程标识等,以在共享的用户缓冲区中匹配数据段具体的缓冲地址。
步骤403、通过第二实现层将缓冲地址发送到第二抽象层。
本公开实施例中,第一实现层在确定缓冲地址后可以将其向第二抽象层发送,该缓冲地址指向重排序后的数据段在用户缓冲区的具体存储地址。
步骤404、通过第二抽象层将缓冲地址上报到第二应用层,以使第二应用层通过缓冲地址访问用户缓冲区。
本公开实施例中,第二抽象层可以将缓冲地址上报到第二应用层,使第二应用层感知到数据段接收,并可以基于缓冲地址直接访问用户缓冲区,减少数据复制次数,获得排序后的数据段,完成数据的接收。进一步的,第二抽象层还可以接管事件传递,如向第二应用层返回事件信息,可以包括事件类型为接收数据等。
本公开一可选的方法实施例中,前述步骤401可包括如下步骤B1至步骤B3。
步骤B1、对乱序接收的数据段写入接收缓冲区,接收缓冲区为片上散列缓存。
步骤B2、解析数据段中的排序头,根据排序头将数据段按序写入对应的用户缓冲区。
步骤B3、释放接收缓冲区。
本公开实施例中,可以在接收端设置接收缓冲区暂存接收到的乱序数据,接收缓冲区为片上散列缓存,容量较小但交换速度快,在将乱序接收的数据段按序写入对应的用户缓冲区后可以及时释放接收缓冲区,从而提高数据重排效率,避免资源占用。
图5为本公开实施例提供的一种发送端与接收端间基于软件-硬件架构的数据传输流程示意图。如图5所示,该软件-硬件架构包括发送节点(Sending Node)以及接收节点(Receiving Node)。
发送节点的第一应用层包括应用程序(1)、···、应用程序(N)等。在发送节点中,通过第一抽象层对接第一应用层以及向第一实现层调度。第一实现层包括数据处理模块,用于对原始数据基于动态MTU进行分片获得数据段,并封装以及下发对应的WQE,以及在WQE对应的数据段中添加排序头;第一实现层还包括可靠处理模块,用于获取远端通信信息并添加到排序头中,以便接收端基于远端通信信息进行地址匹配。上述数据段被写入发送节点的发送缓冲区,每个数据段可以以消息唯一标识符标示,包括msg_id1、msg_id2、···、msg_idN等,分片后的数据段与消息唯一标识符的总字符数符合动态MTU大小,在字节数不足时补齐,如msg_idN表示的数据段。
发送节点与接收节点之间可以基于带外数据的方式交换远端通信信息,也可以基于UD传输的QP发送流程向接收节点发送对应的数据段。
接收节点的第二应用层包括应用程序(1)、···、应用程序(N)等。在发送节点中,通过第二抽象层对接第二应用层以及向第二实现层调度。第二实现层包括数据处理模块,用于将乱序接收的数据段暂时存储在接收缓冲区,包括msg_id4、msg_id1、msg_id3,并根据对应的排序头将其按序写入对应的用户缓冲区,如将msg_id1对应的数据段写入对应用户缓冲区位序为1的存储位置,将msg_id3对应的数据段写入对应用户缓冲区位序为3的存储位置,将msg_id4对应的数据段写入对应用户缓冲区位序为4的存储位置;第二实现层还包括可靠性处理模块,用于根据排序头携带的远端通信信息匹配缓冲地址,并发送至第二抽象层,以便第二抽象层通知到第二应用层。此时,第二应用层可以基于该缓冲地址直接访问对应用户缓冲区获得发送端所发送的数据,完成数据的接收。
本公开一可选的方法实施例中,前述步骤B1之后,该方法还可以包括如下步骤C1。
步骤C1、返回CQE通知。
本公开实施例中,接收端的接收缓冲区存储乱序的数据段后还可以返回CQE通知,以表示硬件已将数据段存入。
本公开提供的面向RDMA UD传输的可靠通信方法,对乱序接收的数据段解析数据段中的排序头,并将数据段根据排序头按序写入对应的用户缓冲区,数据段由发送端基于第一方面的方法提供;通过第二实现层解析远端通信信息,并根据远端通信信息获取数据段在用户缓冲区的缓冲地址;通过第二实现层将缓冲地址发送到第二抽象层;通过第二抽象层将缓冲地址上报到第二应用层,以使第二应用层通过缓冲地址访问用户缓冲区。该方法通过抽象层接管,能够对应用侧的数据处理进行统一、协调,提升网络性能,以及对数据段进行排序头、远端通信信息的添加,可以在不改动底层路由交换协议的基础上,实现数据的重排序和分发,提升了数据传输的可靠性,从而在UD传输基础上兼顾传输效率与可靠性。
图6为本公开实施例提供的面向RDMA UD传输的可靠通信方法在发送端与接收端间的交互流程示意图。如图6所示,其中包括发送端与接收端,发送端的执行主体包括第一应用层、第一抽象层和第一实现层,第一实现层包括数据处理模块与可靠处理模块,接收端的执行主体包括第二应用层、第二抽象层和第二实现层,第二实现层包括数据处理模块与可靠处理模块。则该面向RDMAUD传输的可靠通信方法的交互流程包括如下步骤601至611。
在发送端:
步骤601、第一应用层调用VerBS标准接口下发WR。
步骤602、第一抽象层接收WR,同步各进程间的数据发送申请,获取对应的原始数据。
步骤603、第一抽象层通过API调度第一实现层的数据处理模块,按照动态MTU对原始数据进行分片处理,将获得的数据段存储到发送缓冲区。
步骤604、第一抽象层通过API调度第一实现层的数据处理模块,对每一数据段封装对应的WQE,并在该WQE对应的数据段中排序头以指示该数据段在原始数据中的位序。
步骤605、第一抽象层通过API调度第一实现层的可靠处理模块,获取指向接收端对应QP的远端通信信息,并将该远端通信信息添加到数据段的排序头内。
步骤606、第一抽象层对数据段执行基于UD传输的乱序发送。
步骤607、第二实现层的数据处理模块将乱序接收的数据段存储到接收缓冲区。
步骤608、第二实现层的数据处理模块对数据段中的排序头进行解析,并基于排序头奖数据段按序写入到对应的用户缓冲区。
步骤609、第二实现层的可靠处理模块对排序头中的远端通信信息进行解析,并匹配到数据段在用户缓冲区的缓冲地址。
步骤610、第二实现层将该缓冲地址向第二抽象层发送。
步骤611、第二抽象层将缓冲地址通知到第二应用层。
步骤612、第二应用层基于该缓冲地址直接访问用户缓冲区获得排序后的数据段,完成数据接收。
本公开提供的面向RDMA UD传输的可靠通信方法,通过在发送端设置第一抽象层对接第一应用层与封装第一实现层,实现对数据处理、发送的接管,在第一应用层发起数据发送申请时,第一抽象层获取下发的原始数据,并通过第一实现层对原始数据基于动态MTU进行分片,获得数据段,以及封装并下发对应的WQE,在该WQE对应的数据段中添加排序头;再获取指向接收端中对应QP的远端通信信息,添加到排序头中;在此基础上,对数据段执行基于UD传输的乱序发送。而接收端对乱序接收的数据段解析发送端添加排序头,并将数据段根据排序头按序写入对应的用户缓冲区,数据段由发送端基于第一方面的方法提供;通过第二实现层解析远端通信信息,并根据远端通信信息获取数据段在用户缓冲区的缓冲地址;通过第二实现层将缓冲地址发送到第二抽象层;通过第二抽象层将缓冲地址上报到第二应用层,以使第二应用层通过缓冲地址直接访问用户缓冲区。该方法通过抽象层接管,能够对应用侧的数据处理进行统一、协调,提升网络性能,以及对数据段进行排序头、远端通信信息的添加,可以在不改动底层路由交换协议的基础上,实现数据的重排序和分发,提升了数据传输的可靠性,从而在UD传输基础上兼顾传输效率与可靠性。
图7为本公开实施例提供的一种电子设备700的结构示意图,如图7所示,该电子设备700可以包括处理器701,存储器702,存储在存储器702上并可在处理器701上运行的程序或指令,该程序或指令被处理器701执行时实现上述信令互通实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
需要说明的是,图7示出的电子设备700仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
图8为本公开实施例提供的一种电子设备800的硬件示意图,如图8所示,电子设备800包括中央处理单元(Central Processing Unit,CPU)801,其可以根据存储在ROM(ReadOnly Memory,只读存储器,)802中的程序或者从存储部分808加载到RAM(Random AccessMemory,随机访问存储器)803中的程序而执行各种适当的动作和处理。在RAM 803中,还存储有系统操作所需的各种程序和数据。CPU 801、ROM 802以及RAM 803通过总线804彼此相连。I/O(Input/Output,输入/输出)接口805也连接至总线804。
以下部件连接至I/O接口805:包括键盘、鼠标等的输入部分806;包括诸如CRT(Cathode Ray Tube,阴极射线管)、LCD(Liquid Crystal Display,液晶显示器)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN(Local AreaNetwork,无线网络)卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
特别地,根据本公开的实施例,下文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(CPU801)执行时,执行本申请的系统中限定的各种功能。
本公开实施例还发送一种计算机可读介质,计算机可读介质上存储有程序或指令,该程序或指令被处理器执行时实现上述信令互通实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
其中,处理器为上述实施例中的电子设备中的处理器。计算机可读介质,包括计算机可读介质,如ROM、RAM、磁碟或者光盘等。
本公开实施例另发送了一种芯片,芯片包括处理器和通信接口,通信接口和处理器耦合,处理器用于运行程序或指令,实现上述信令互通实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
应理解,本公开实施例提到的芯片还可以称为系统级芯片、系统芯片、芯片系统或片上系统芯片等。
本公开实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如上述的信令互通的步骤,且能达到相同的技术效果,为避免重复,这里不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本公开实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,电子设备,空调器,或者网络设备等)执行本公开各个实施例的方法。
上面结合附图对本公开的实施例进行了描述,但是本公开并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本公开的启示下,在不脱离本公开宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本公开的保护之内。

Claims (10)

1.一种面向RDMA UD传输的可靠通信方法,其特征在于,应用于发送端的第一抽象层,所述第一抽象层用于对接发送端的第一应用层以及对发送端的第一实现层进行封装,所述方法包括:
响应于所述第一应用层发起的数据发送申请,获取下发的原始数据;
通过所述第一实现层对所述原始数据基于动态最大传输单元MTU进行分片,获得至少一个数据段;
通过所述第一实现层封装并下发所述数据段对应的工作队列元素WQE,并在所述WQE对应的所述数据段中添加排序头;
通过所述第一实现层获取指向接收端中对应队列对QP的远端通信信息,并将所述远端通信信息添加到对应所述数据段的所述排序头内;
对所述数据段执行基于不可靠数据报UD传输的乱序发送,以使接收端基于所述排序头将所述数据段按序写入到对应用户缓冲区,以及根据所述远端通信信息进行分发。
2.根据权利要求1所述的方法,其特征在于,所述发送端还包括发送缓冲区,所述第一实现层包括数据处理模块,基于动态MTU对所述原始数据进行分片,获得至少一个数据段,包括:
使所述数据处理模块对所述原始数据基于所述动态MTU进行分片,获得写入所述发送缓冲区中的至少一个所述数据段。
3.根据权利要求2所述的方法,其特征在于,所述封装并下发所述数据段对应的WQE,包括:
使所述数据处理模块封装并下发指向所述发送缓冲区中所述数据段的所述WQE。
4.根据权利要求2所述的方法,其特征在于,所述第一实现层还包括可靠处理模块,所述获取指向接收端中对应QP的远端通信信息,包括:
使所述可靠处理模块获取基于带外数据方式同步的远端通信信息,所述远端通信信息包括队列对编号QPN和队列密钥Qkey。
5.根据权利要求4所述的方法,其特征在于,在接收端存在共享QP的情况下,所述远端通信信息还包括进程标识和线程标识。
6.根据权利要求1所述的方法,其特征在于,所述通过所述第一实现层对所述原始数据基于动态MTU进行分片,获得至少一个数据段,包括:
通过所述第一实现层获取网络时延信号;
在所述网络时延信号符合常规时延信号的情况下,将默认MTU作为所述动态MTU对所述原始数据进行分片,获得至少一个数据段;
在所述网络时延信号不符合常规时延信号的情况下,根据所述网络时延信号相对所述常规时延信号的偏差对所述默认MTU进行动态调整后,获得所述动态MTU对所述原始数据进行分片,获得至少一个数据段。
7.一种面向RDMA UD传输的可靠通信方法,其特征在于,应用于接收端,所述接收端包括第二抽象层,所述第二抽象层用于对接接收端的第二应用层以及对接收端的第二实现层进行封装,所述方法包括:
对乱序接收的数据段解析发送端添加的排序头,并将所述数据段根据所述排序头按序写入对应的用户缓冲区,所述数据段由发送端基于权利要求1至6任一所述的方法提供;
通过所述第二实现层解析所述远端通信信息,并根据所述远端通信信息获取所述数据段在所述用户缓冲区的缓冲地址;
通过所述第二实现层将所述缓冲地址发送到所述第二抽象层;
通过所述第二抽象层将所述缓冲地址上报到所述第二应用层,以使所述第二应用层通过所述缓冲地址访问所述用户缓冲区。
8.根据权利要求7所述的方法,其特征在于,所述接收端还包括接收缓冲区,所述对乱序接收的数据段解析发送端添加的排序头,并将所述数据段根据所述排序头按序写入对应的用户缓冲区,包括:
对乱序接收的所述数据段写入接收缓冲区,所述接收缓冲区为片上散列缓存;
解析所述数据段中的所述排序头,根据所述排序头将所述数据段按序写入对应的用户缓冲区;
释放所述接收缓冲区。
9.一种电子设备,其特征在于,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如权利要求1至8中任一项所述的面向RDMA UD传输的可靠通信方法。
10.一种计算机可读介质,其特征在于,所述计算机可读介质上存储程序或指令,所述程序或指令被处理器执行时实现如权利要求1至8中任一项所述的面向RDMA UD传输的可靠通信方法。
CN202410488072.9A 2024-04-22 2024-04-22 面向rdma ud传输的可靠通信方法、电子设备及可读介质 Pending CN118200253A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410488072.9A CN118200253A (zh) 2024-04-22 2024-04-22 面向rdma ud传输的可靠通信方法、电子设备及可读介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410488072.9A CN118200253A (zh) 2024-04-22 2024-04-22 面向rdma ud传输的可靠通信方法、电子设备及可读介质

Publications (1)

Publication Number Publication Date
CN118200253A true CN118200253A (zh) 2024-06-14

Family

ID=91406295

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410488072.9A Pending CN118200253A (zh) 2024-04-22 2024-04-22 面向rdma ud传输的可靠通信方法、电子设备及可读介质

Country Status (1)

Country Link
CN (1) CN118200253A (zh)

Similar Documents

Publication Publication Date Title
US10868767B2 (en) Data transmission method and apparatus in optoelectronic hybrid network
CA2509404C (en) Using direct memory access for performing database operations between two or more machines
WO2020236279A1 (en) System and method for facilitating efficient management of idempotent operations in a network interface controller (nic)
US9774651B2 (en) Method and apparatus for rapid data distribution
US9002969B2 (en) Distributed multimedia server system, multimedia information distribution method, and computer product
US6321269B1 (en) Optimized performance for transaction-oriented communications using stream-based network protocols
CN109768939A (zh) 一种支持优先级的标签化网络栈方法和系统
CN108494817A (zh) 数据传输方法、相关装置及系统
CN102790776A (zh) 心跳连接归一处理方法、终端、服务器及通信系统
CN109547162B (zh) 基于两套单向边界的数据通信方法
US8539089B2 (en) System and method for vertical perimeter protection
CN105141603A (zh) 通信数据传输方法及系统
CN103885840A (zh) 一种基于AXI4总线的FCoE协议加速引擎IP核
CN108566390B (zh) 一种卫星消息监听与分发服务系统
US8135851B2 (en) Object request broker for accelerating object-oriented communications and method
CN113986811A (zh) 一种高性能内核态网络数据包加速方法
CN113271336B (zh) 基于dpdk的机器人中间件dds数据传输方法、电子设备及计算机可读存储介质
CN118200253A (zh) 面向rdma ud传输的可靠通信方法、电子设备及可读介质
CN107483384B (zh) 一种网络数据交互方法及装置
CN117015764A (zh) 集成计算设备之间的消息通信
US8176117B2 (en) Accelerator for object-oriented communications and method
CN111240867A (zh) 一种信息通讯系统及方法
CN113301104B (zh) 数据处理系统及方法
CN114024910B (zh) 一种用于金融交易系统的极低延时可靠通讯系统及方法
CN117641066A (zh) 直播回源方法及系统

Legal Events

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