一种带异步通知的乱序rdma方法与装置
专利摘要:一种带异步通知的乱序RDMA方法,包括步骤1:源方获取并记录RDMA消息的消息包信息,根据消息包信息从源方主存读取包数据,并将该包数据和对应的消息包信息封装成RDMA数据包,并发送给目标方;步骤2:在收到目标方返回响应包后,响应计数,收齐响应后,向目标方发送异步通知消息Send包;步骤3:在目标方将Send包写入接收队列并返回响应后,写完成事件。本发明,消息包支持乱序发射,减小对网络和路由方式的限制,使网络的构建更为灵活。使用源方计数的可靠性消息传输机制,保证消息可靠传输,简化硬件设计,节省硬件资源开销。由源方硬件自动发起异步通知消息通知目标方消息完成,实现消息完成事件的快速通知,降低消息延时。
专利说明:
一种带异步通知的乱序RDMA方法与装置
[0001] 技术领域
[0002] 本发明涉及乱序RDMA消息通信领域,更具体地说涉及一种带异步通知的乱序RDMA方法与装置。
[0003] 背景技术
[0004] 在高性能计算系统中,计算节点之间采用RDMA消息机制进行远程主存访问,RDMA消息机制一般集成在网络接口芯片中实现。
[0005] 目前在高性能计算领域,商用网络接口芯片基本被Mellanox公司垄断,其RDMA机制严格参照InfiniBand规范实现。InfiniBand规范中的RDMA消息传输必须严格保序,保序传输一般只能使用确定性路由,对网络的动态适应能力较差。而使用乱序发射的消息机制可支持自适应路由,对网络的约束更小。
[0006] 在乱序通信网络中,当RDMA消息完成数据传输,源方需要通知目标方完成事件时,如果由软件向目标方发起异步通知,需要等待源方RDMA消息完成后,再投递异步通知消息,具有较大的延时。
[0007] 发明内容
[0008] 针对上述技术问题,本发明提出一种带异步通知的乱序RDMA方法,包括如下步骤:
[0009] 步骤1:源方获取并记录RDMA消息的消息包信息,根据消息包信息从源方主存读取包数据,并将该包数据和对应的消息包信息封装成RDMA数据包,并发送给目标方;
[0010] 步骤2:在收到目标方返回响应包后,响应计数,并在收齐响应后,向目标方发送异步通知消息Send包;
[0011] 步骤3:在目标方将Send包写入接收队列并返回响应后,写完成事件。
[0012] 该方法,支持消息乱序发射及消息包的乱序传输,减小对路由方式的限定,使网络的构建更为灵活,且由源方硬件自动发起异步通知消息通知目标方消息完成,实现消息完成事件的快速通知,降低消息延时。RDMA消息长度大于传输最大包长时,会拆分成多个包传输,每个包都包含包信息,本申请,不同RDMA消息的不同消息包或者同一RDMA消息的不同消息包发送时,源方按次序获取消息包信息,根据消息包信息从源方主存读取包数据,并将该包数据和对应的消息包信息封装成RDMA数据包,并发送给目标方,目标方每接收一个RDMA数据包,向源方返回一个响应,源方进行响应计数,并在响应收齐后(响应收齐表示一个RDMA消息传输完成),向目标方发送异步通知消息Send包,目标方写入接收队列并返回一个响应,源方收到响应包后,消息执行完成,写完成事件到指定主存空间。
[0013] 优选的,步骤1中,RDMA消息的消息包信息通过悬挂缓冲单元获得,其包括消息ID、剩余数据量、下一个包源数据地址、下一个包目标数据地址、MTU、剩余应答数量、异步通知接收队列号、消息描述符、消息状态;步骤2中,目标方返回响应包中携带有消息悬挂缓冲号和消息ID号。
[0014] 优选的,步骤2中响应计数的具体方法为:源方每收到一个响应包,根据响应包中的消息悬挂缓冲号和消息ID号匹配悬挂缓冲单元的对应消息信息,匹配成功后悬挂缓冲单元中剩余应答数量减一;当剩余应答数量为零时,表示消息传输完成。该设置,使用源方计数,保证消息传输的可靠性,且可简化硬件设计,节省硬件资源开销。
[0015] 优选的,步骤1中,源方根据消息剩余数据量、下一个包源数据地址、下一个包目标数据地址、MTU(最大传输包长度)等信息,从源方主存读取数据。
[0016] 本发明还公布了一种带异步通知的乱序RDMA装置,包括发送引擎和接收引擎,所述发送引擎包括消息悬挂缓冲模块、响应处理模块、拆包模块、组包模块、访存接口模块、数据缓冲模块;所述接收引擎,包括请求包处理模块、响应队列模块、响应包处理模块、接收队列管理模块、接收引擎访存接口模块;
[0017] 所述消息悬挂缓冲模块,用于获取并寄存RDMA消息包的消息描述符,并记录RDMA消息包的消息信息;消息信息包括消息ID、剩余数据量、下一个包源数据地址、下一个包目标数据地址、剩余应答数量、异步通知接收队列号、消息描述符、消息状态、MTU等信息。
[0018] 所述拆包模块,和所述消息悬挂缓冲模块、组包模块以及访存接口模块电连接,用于读取消息描述符并进行拆包,生成包控制信息,输出包信息内容到组包模块,输出取数据请求到访存接口模块,并更新消息状态信息回写到消息悬挂缓冲;且在获取消息悬挂缓冲发出消息进入发送异步通知状态信号时,拆包模块生成异步通知控制信息和消息描述符内容,输出到组包模块,该消息包数据内容为RDMA消息的描述符;
[0019] 所述访存接口模块,和所述数据缓冲模块电连接,用于负责处理发送引擎的所有主存访问,收到拆包模块的取数据请求后,向主存通路发起访存请求,并将访存响应写入到数据缓冲;所述访存接口模块还和所述消息悬挂缓冲模块电连接,用于负责处理消息悬挂缓冲模块输入的完成事件;
[0020] 所述数据缓冲,用于保存RDMA消息包的数据内容;
[0021] 所述组包模块,和所述拆包模块以及数据缓冲模块电连接,用于负责消息包的组包发送上网,从拆包模块接收包控制信息,从数据缓冲接收包数据,再封装成RDMA消息请求包发送到上网通路;且在拆包模块获取消息悬挂缓冲发出消息进入发送异步通知状态信号时,从拆包模块获取异步通知控制信息和消息描述符,再封装成发送异步通知消息请求包发送到上网通路;
[0022] 所述请求包处理模块,负责处理网上收到的消息请求包,其和所述响应队列模块、访存接口模块、接收队列管理模块电连接;在消息请求包为RDMA消息请求包时,则解析请求包,提取包中数据,生成写数据请求输入到访存接口模块,同时根据消息请求包内容生成RDMA消息响应包,输入到响应队列模块;在消息请求包为发送异步通知消息请求包时,生成发送异步通知消息响应包并发送到响应队列模块,生成异步通知信息写入到接收队列管理模块;
[0023] 所述响应队列模块,和所述请求包处理模块电连接,处理从请求包处理模块输出的响应包,并把响应包发送上网;
[0024] 所述响应包处理模块,负责处理网上收到的响应包,生成远程响应控制信息输入到响应处理模块;
[0025] 所述响应处理模块,和所述响应包处理模块以及消息悬挂缓冲模块电连接,负责处理远程响应,根据响应包类型作出处理;在响应包为RDMA消息响应包时,控制所述消息悬挂缓冲装置响应计数,并在收齐响应后,控制所述消息悬挂缓冲装置生成并发出消息进入发送异步通知状态信号;在响应包为发送异步通知消息响应包时,控制消息悬挂缓冲模块生成完成事件写入主存;
[0026] 所述接收队列管理模块,和所述请求包处理模块电连接,用于在收到请求包处理模块输入的异步通知信息时,根据接收队列号定位到对应接收队列空间的指定位置,并生成队列写请求输入到接收引擎访存接口模块;
[0027] 接收引擎访存接口模块负责处理接收引擎的所有访存请求,包括请求包处理模块输入的写数据请求和接收队列管理模块输入的队列写请求,所有写主存请求发送到主存通路。
[0028] 本申请中的乱序RDMA装置,不同RDMA消息的不同消息包或者同一RDMA消息的不同消息包发送时,发送引擎按次序获取各个RDMA消息的消息包信息,根据消息包信息从主存读取包数据,并将该包数据和对应的消息包信息封装成RDMA消息请求包,并发送给接收引擎,接收引擎每接收一个RDMA消息请求包,向发送引擎返回一个响应,发送引擎中的响应处理模块进行响应计数,并在响应收齐后(响应收齐表示一个RDMA消息传输完成),向接收引擎发送具有发送异步通知消息的消息请求包,接收引擎中的请求包处理模块生成异步通知信息写入到接收队列管理模块,并返回一个响应,发送引擎中的响应处理模块收到响应包后,表示消息执行完成,写完成事件到指定主存空间。该装置,支持消息乱序发射及消息包的乱序传输,减小对路由方式的限定,使网络的构建更为灵活,且由源方硬件自动发起异步通知消息通知目标方消息完成,实现消息完成事件的快速通知,降低消息延时。
[0029] 优选的,在响应包为RDMA消息响应包时,响应处理模块的响应计数方式为:每收到一个响应包,根据响应包中的消息悬挂缓冲号和消息ID号匹配悬挂缓冲单元的对应消息信息,匹配成功后悬挂缓冲单元中剩余应答数量减一。该设置,使用源方计数,保证消息传输的可靠性,且可简化硬件设计,节省硬件资源开销。
[0030] 优选的,所述接收队列管理模块,其之接收队列存储空间位于主存空间。
[0031] 本发明的有益效果是:消息包支持乱序发射,能够减小对网络和路由方式的限制,使网络的构建更为灵活。使用源方计数的可靠性消息传输机制,保证消息可靠传输的同时,简化硬件设计,节省硬件资源开销。硬件自动发送异步通知消息,在乱序通信网络下能够实现源方向目标方完成事件的快速通知,有效降低消息延时。
[0032] 附图说明
[0033] 图1为实施例1中带异步通知的乱序RDMA方法的机制图;
[0034] 图2为实施例2中发送引擎的结构示意图;
[0035] 图3为实施例2中接收引擎的结构示意图。
[0036] 具体实施方式
[0037] 下面对本发明作进一步详细的说明:
[0038] 实施例1:如图1所示,一种带异步通知的乱序RDMA方法,包括如下步骤:
[0039] 步骤1:源方获取并记录RDMA消息的消息包信息,根据消息包信息从源方主存读取包数据,并将该包数据和对应的消息包信息封装成RDMA数据包,并发送给目标方;较佳地,该步骤中, RDMA消息的消息包信息通过悬挂缓冲单元获得,其包括消息ID、剩余数据量、下一个包源数据地址、下一个包目标数据地址、MTU、剩余应答数量、异步通知接收队列号、消息描述符、消息状态;
[0040] 步骤2:在收到目标方返回响应包后,响应计数,并在收齐响应后,向目标方发送异步通知消息Send包;该步骤中,目标方返回的响应包中携带有消息悬挂缓冲号和消息ID号;
[0041] 步骤3:在目标方将Send包写入接收队列并返回响应后,写完成事件。
[0042] 该方法,支持消息乱序发射及消息包的乱序传输,减小对路由方式的限定,使网络的构建更为灵活,且由源方硬件自动发起异步通知消息通知目标方消息完成,实现消息完成事件的快速通知,降低消息延时。RDMA消息长度大于传输最大包长时,会拆分成多个包传输,每个包都包含包信息,本申请,不同RDMA消息的不同消息包或者同一RDMA消息的不同消息包发送时,源方按次序获取消息包信息,根据消息包信息从源方主存读取包数据,并将该包数据和对应的消息包信息封装成RDMA数据包,并发送给目标方,目标方每接收一个RDMA数据包,向源方返回一个响应,源方进行响应计数,并在响应收齐后(响应收齐表示一个RDMA消息传输完成),向目标方发送异步通知消息Send包,目标方写入接收队列并返回一个响应,源方收到响应包后,消息执行完成,写完成事件到指定主存空间。
[0043] 优选的,步骤2中响应计数的具体方法为:源方每收到一个响应包,根据响应包中的消息悬挂缓冲号和消息ID号匹配悬挂缓冲单元的对应消息信息,匹配成功后悬挂缓冲单元中剩余应答数量减一;当剩余应答数量为零时,表示消息传输完成。该设置,使用源方计数,保证消息传输的可靠性,且可简化硬件设计,节省硬件资源开销。
[0044] 优选的,步骤1中,源方根据消息剩余数据量、下一个包源数据地址、下一个包目标数据地址、MTU(最大传输包长度)等信息,从源方主存读取数据。
[0045] 实施例2:如图2-3所示,一种带异步通知的乱序RDMA装置,包括发送引擎和接收引擎,所述发送引擎包括消息悬挂缓冲模块、响应处理模块、拆包模块、组包模块、访存接口模块、数据缓冲模块;所述接收引擎,包括请求包处理模块、响应队列模块、响应包处理模块、接收队列管理模块、接收引擎访存接口模块;
[0046] 所述消息悬挂缓冲模块,用于获取并寄存RDMA消息包的消息描述符,并记录RDMA消息包的消息信息;消息信息包括消息ID、剩余数据量、下一个包源数据地址、下一个包目标数据地址、剩余应答数量、异步通知接收队列号、消息描述符、消息状态、MTU等信息。
[0047] 所述拆包模块,和所述消息悬挂缓冲模块、组包模块以及访存接口模块电连接,用于读取消息描述符并进行拆包,生成包控制信息,输出包信息内容到组包模块,输出取数据请求到访存接口模块,并更新消息状态信息回写到消息悬挂缓冲;且在获取消息悬挂缓冲发出消息进入发送异步通知状态信号时,拆包模块生成异步通知控制信息和消息描述符内容,输出到组包模块,该消息包数据内容为RDMA消息的描述符;
[0048] 所述访存接口模块,和所述数据缓冲模块电连接,用于负责处理发送引擎的所有主存访问,收到拆包模块的取数据请求后,向主存通路发起访存请求,并将访存响应写入到数据缓冲;所述访存接口模块还和所述消息悬挂缓冲模块电连接,用于负责处理消息悬挂缓冲模块输入的完成事件;
[0049] 所述数据缓冲,用于保存RDMA消息包的数据内容;
[0050] 所述组包模块,和所述拆包模块以及数据缓冲模块电连接,用于负责消息包的组包发送上网,从拆包模块接收包控制信息,从数据缓冲接收包数据,再封装成RDMA消息请求包发送到上网通路;且在拆包模块获取消息悬挂缓冲发出消息进入发送异步通知状态信号时,从拆包模块获取异步通知控制信息和消息描述符,再封装成发送异步通知消息请求包发送到上网通路;
[0051] 所述请求包处理模块,负责处理网上收到的消息请求包,其和所述响应队列模块、访存接口模块、接收队列管理模块电连接;在消息请求包为RDMA消息请求包时,则解析请求包,提取包中数据,生成写数据请求输入到访存接口模块,同时根据消息请求包内容生成RDMA消息响应包,输入到响应队列模块;在消息请求包为发送异步通知消息请求包时,生成发送异步通知消息响应包并发送到响应队列模块,生成异步通知信息写入到接收队列管理模块;
[0052] 所述响应队列模块,和所述请求包处理模块电连接,处理从请求包处理模块输出的响应包,并把响应包发送上网;
[0053] 所述响应包处理模块,负责处理网上收到的响应包,生成远程响应控制信息输入到响应处理模块;
[0054] 所述响应处理模块,和所述响应包处理模块以及消息悬挂缓冲模块电连接,负责处理远程响应,根据响应包类型作出处理;在响应包为RDMA消息响应包时,控制所述消息悬挂缓冲装置响应计数,并在收齐响应后,控制所述消息悬挂缓冲装置生成并发出消息进入发送异步通知状态信号;在响应包为发送异步通知消息响应包时,控制消息悬挂缓冲模块生成完成事件写入主存;
[0055] 所述接收队列管理模块,和所述请求包处理模块电连接,用于在收到请求包处理模块输入的异步通知信息时,根据接收队列号定位到对应接收队列空间的指定位置,并生成队列写请求输入到接收引擎访存接口模块;
[0056] 接收引擎访存接口模块负责处理接收引擎的所有访存请求,包括请求包处理模块输入的写数据请求和接收队列管理模块输入的队列写请求,所有写主存请求发送到主存通路。
[0057] 本申请中的乱序RDMA装置,不同RDMA消息的不同消息包或者同一RDMA消息的不同消息包发送时,发送引擎按次序获取各个RDMA消息的消息包信息,根据消息包信息从主存读取包数据,并将该包数据和对应的消息包信息封装成RDMA消息请求包,并发送给接收引擎,接收引擎每接收一个RDMA消息请求包,向发送引擎返回一个响应,发送引擎中的响应处理模块进行响应计数,并在响应收齐后(响应收齐表示一个RDMA消息传输完成),向接收引擎发送具有发送异步通知消息的消息请求包,接收引擎中的请求包处理模块生成异步通知信息写入到接收队列管理模块,并返回一个响应,发送引擎中的响应处理模块收到响应包后,表示消息执行完成,写完成事件到指定主存空间。该装置,支持消息乱序发射及消息包的乱序传输,减小对路由方式的限定,使网络的构建更为灵活,且由源方硬件自动发起异步通知消息通知目标方消息完成,实现消息完成事件的快速通知,降低消息延时。
[0058] 优选的,在响应包为RDMA消息响应包时,响应处理模块的响应计数方式为:每收到一个响应包,根据响应包中的消息悬挂缓冲号和消息ID号匹配悬挂缓冲单元的对应消息信息,匹配成功后悬挂缓冲单元中剩余应答数量减一。该设置,使用源方计数,保证消息传输的可靠性,且可简化硬件设计,节省硬件资源开销。
[0059] 优选的,所述接收队列管理模块,其之接收队列存储空间位于主存空间。
[0060] 以上所述仅是本发明的较佳实施方式,故凡依本专利申请范围所述的构造、特征及原理所做的等效变化或修饰,均包括于本发明专利申请范围内。
权利要求:1.一种带异步通知的乱序RDMA方法,其特征在于,包括如下步骤:
步骤1:源方获取并记录RDMA消息的消息包信息,根据消息包信息从源方主存读取包数据,并将该包数据和对应的消息包信息封装成RDMA数据包,并发送给目标方;
步骤2:在收到目标方返回响应包后,响应计数,并在收齐响应后,向目标方发送异步通知消息Send包;
步骤3:在目标方将Send包写入接收队列并返回响应后,写完成事件。
2.根据权利要求1所述的一种带异步通知的乱序RDMA方法,其特征在于,步骤1中,RDMA消息的消息包信息通过悬挂缓冲单元获得,其包括消息ID、剩余数据量、下一个包源数据地址、下一个包目标数据地址、MTU、剩余应答数量、异步通知接收队列号、消息描述符、消息状态;步骤2中,目标方返回响应包中携带有消息悬挂缓冲号和消息ID号。
3.根据权利要求2所述的一种带异步通知的乱序RDMA方法,其特征在于,步骤2中响应计数的具体方法为:源方每收到一个响应包,根据响应包中的消息悬挂缓冲号和消息ID号匹配悬挂缓冲单元的对应消息信息,匹配成功后悬挂缓冲单元中剩余应答数量减一;当剩余应答数量为零时,表示消息传输完成。
4.根据权利要求2所述的一种带异步通知的乱序RDMA方法,其特征在于,步骤1中,源方根据消息剩余数据量、下一个包源数据地址、下一个包目标数据地址、MTU(最大传输包长度)等信息,从源方主存读取数据。
5.一种带异步通知的乱序RDMA装置,包括发送引擎和接收引擎,其特征在于,所述发送引擎包括消息悬挂缓冲模块、响应处理模块、拆包模块、组包模块、访存接口模块、数据缓冲模块;所述接收引擎,包括请求包处理模块、响应队列模块、响应包处理模块、接收队列管理模块、接收引擎访存接口模块;
所述消息悬挂缓冲模块,用于获取并寄存RDMA消息包的消息描述符,并记录RDMA消息包的消息信息;消息信息包括消息ID、剩余数据量、下一个包源数据地址、下一个包目标数据地址、剩余应答数量、异步通知接收队列号、消息描述符、消息状态、MTU等信息,
所述拆包模块,和所述消息悬挂缓冲模块、组包模块以及访存接口模块电连接,用于读取消息描述符并进行拆包,生成包控制信息,输出包信息内容到组包模块,输出取数据请求到访存接口模块,并更新消息状态信息回写到消息悬挂缓冲;且在获取消息悬挂缓冲发出消息进入发送异步通知状态信号时,拆包模块生成异步通知控制信息和消息描述符内容,输出到组包模块,该消息包数据内容为RDMA消息的描述符;
所述访存接口模块,和所述数据缓冲模块电连接,用于负责处理发送引擎的所有主存访问,收到拆包模块的取数据请求后,向主存通路发起访存请求,并将访存响应写入到数据缓冲;所述访存接口模块还和所述消息悬挂缓冲模块电连接,用于负责处理消息悬挂缓冲模块输入的完成事件;
所述数据缓冲,用于保存RDMA消息包的数据内容;
所述组包模块,和所述拆包模块以及数据缓冲模块电连接,用于负责消息包的组包发送上网,从拆包模块接收包控制信息,从数据缓冲接收包数据,再封装成RDMA消息请求包发送到上网通路;且在拆包模块获取消息悬挂缓冲发出消息进入发送异步通知状态信号时,从拆包模块获取异步通知控制信息和消息描述符,再封装成发送异步通知消息请求包发送到上网通路;
所述请求包处理模块,负责处理网上收到的消息请求包,其和所述响应队列模块、访存接口模块、接收队列管理模块电连接;在消息请求包为RDMA消息请求包时,则解析请求包,提取包中数据,生成写数据请求输入到访存接口模块,同时根据消息请求包内容生成RDMA消息响应包,输入到响应队列模块;在消息请求包为发送异步通知消息请求包时,生成发送异步通知消息响应包并发送到响应队列模块,生成异步通知信息写入到接收队列管理模块;
所述响应队列模块,和所述请求包处理模块电连接,处理从请求包处理模块输出的响应包,并把响应包发送上网;
所述响应包处理模块,负责处理网上收到的响应包,生成远程响应控制信息输入到响应处理模块;
所述响应处理模块,和所述响应包处理模块以及消息悬挂缓冲模块电连接,负责处理远程响应,根据响应包类型作出处理;在响应包为RDMA消息响应包时,控制所述消息悬挂缓冲装置响应计数,并在收齐响应后,控制所述消息悬挂缓冲装置生成并发出消息进入发送异步通知状态信号;在响应包为发送异步通知消息响应包时,控制消息悬挂缓冲模块生成完成事件写入主存;
所述接收队列管理模块,和所述请求包处理模块电连接,用于在收到请求包处理模块输入的异步通知信息时,根据接收队列号定位到对应接收队列空间的指定位置,并生成队列写请求输入到接收引擎访存接口模块;
接收引擎访存接口模块负责处理接收引擎的所有访存请求,包括请求包处理模块输入的写数据请求和接收队列管理模块输入的队列写请求,所有写主存请求发送到主存通路。
6.根据权利要求5所述的一种带异步通知的乱序RDMA装置,其特征在于,在响应包为RDMA消息响应包时,响应处理模块的响应计数方式为:每收到一个响应包,根据响应包中的消息悬挂缓冲号和消息ID号匹配悬挂缓冲单元的对应消息信息,匹配成功后悬挂缓冲单元中剩余应答数量减一。
7.根据权利要求5所述的一种带异步通知的乱序RDMA装置,其特征在于,所述接收队列管理模块,其之接收队列存储空间位于主存空间。
公开号:CN110602211
申请号:CN201910870364.8A
发明人:丁亚军 牟华先 斯添浩 周建毅 冯冬明 周舟
申请人:无锡江南计算技术研究所
申请日:2019-09-16
公开日:2019-12-20