一种远端直接内存访问实现方法、装置及系统的制作方法
【专利摘要】一种远端直接内存访问实现方法、装置及系统,用于包括本端和对端的内存访问系统,所述本端和所述对端包括各自的中央处理器CPU和RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述对端的RDMA模块在接收到所述本端的RDMA模块发起的RDMA请求报文时,能够将RDMA请求报文转换为QPI数据请求,从而使得参与远端直接内存访问的对端的CPU能够快速从所述对端的RDMA模块获取QPI数据请求,避免了使用PCIE总线与CPU进行通信带来的时延,使得数据请求得到快速响应。
【专利说明】一种远端直接内存访问实现方法、装置及系统
【技术领域】
[0001]本发明涉及通信领域,尤其涉及一种远端直接内存访问实现方法、装置及系统。
【背景技术】
[0002]远端直接内存访问(Remote Direct Memory Access, RDMA)是一种高性能的数据拷贝技术,它可以将数据从一个本端系统中快速转移到远程系统的存储器中,而不对操作系统造成任何影响,从而减少计算机的处理负担。
[0003]现有技术中存在一种远端直接内存访问的方法,通过利用基于PCIE(PeripheralComponent Interconnect Express,快速外部组件互联)接口的RDMA网卡,实现两个系统之间的远端直接内存访问。在现有技术中,需要利用PCIE总线实现远端直接内存访问。然而,PCIE总线为二级总线,本身有一个包括根复合体、交换器和PCIE端点设备的系统拓扑结构,现有技术中RDMA网卡只能作为一个PCIE端点设备,通过PCIE协议,利用PCIE交换器和根复合体与CPU进行通信,导致在进行远端直接内存访问时,存在较大的延时。
【发明内容】
[0004]本发明的实施例提供一种远端直接内存访问实现方法、装置及系统,能够基于QPI (Quick Path Interconnection,快速通路互联)总线实现系统之间的远端直接内存访问。
[0005]为达到上述目的,本发明的实施例采用如下技术方案:
[0006]第一方面,公开了一种远端直接内存访问实现方法,用于内存访问系统,所述内存访问系统包括本端和对端,所述本端和所述对端包括各自的中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述方法包括:
[0007]所述本端的RDMA模块生成RDMA读请求报文,并将所述RDMA读请求报文发送给所述对端的RDMA模块,所述RDMA读请求报文携带读数据地址信息,所述读数据地址信息为读取数据在所述对端的存储地址,所述读取数据为所述本端需要读取的数据;
[0008]所述本端的RDMA模块接收来自所述对端的RDMA模块的RDMA读请求响应报文,所述RDMA读请求响应报文携带所述读取数据;
[0009]所述本端的RDMA模块根据QPI协议,将所述RDMA读请求响应报文转化成QPI写请求报文,所述QPI写请求报文携带所述读取数据;
[0010]所述本端的CPU根据所述QPI写请求报文,将所述读取数据存储在所述本端的内
存单元中。
[0011 ] 结合第一方面,在第一种可能的实现方式中,所述本端的RDMA模块根据QPI协议,将所述RDMA读请求响应报文转化成QPI写请求报文,具体为,
[0012]所述本端的RDMA模块根据RDMA协议,对所述RDMA读请求响应报进行解析,获得所述读取数据;[0013]所述本端的RDMA模块根据所述读取数据以及所述QPI协议,生成所述QPI写请求报文。
[0014]结合第一方面,在第二种可能的实现方式中,所述本端的CPU根据所述QPI写请求报文,将所述读取数据存储在所述本端的内存单元中之后,所述方法还包括:
[0015]所述本端的RDMA模块生成QPI中断,并将所述QPI中断发送给所述本端的CPU,所述QPI中断用于通知所述本端的CPU所述本端的RDMA模块已获得所述读取数据。
[0016]第二方面,公开了一种远端直接内存访问实现方法,用于内存访问系统,所述内存访问系统包括本端和对端,所述本端和所述对端包括各自的中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述方法包括:
[0017]所述对端的RDMA模块接收来自所述本端的RDMA模块的RDMA读请求报文,所述RDMA读请求报文携带读数据地址信息,所述读数据地址信息为读取数据在所述对端的存储地址,所述读取数据为所述本端需要读取的数据;
[0018]所述对端的RDMA模块根据QPI协议,将所述RDMA读请求报文转化成QPI读请求报文,所述QPI读请求报文携带所述读数据地址信息;
[0019]所述对端的CPU根据所述QPI读请求报文,从所述读数据地址信息对应的内存单元中获取所述读取数据;
[0020]所述对端的RDMA模块根据所述读取数据生成RDMA读请求响应报文;
[0021 ] 所述对端的RDMA模块将所述RDMA读请求响应报文发送给所述本端的RDMA模块。
[0022]结合第二方面,在第一种可能的实现方式中,所述对端的RDMA模块根据QPI协议将所述RDMA读请求报文转化成QPI读请求报文,具体为,
[0023]所述对端的RDMA模块根据RDMA协议,对所述RDMA读请求报文进行解析,获得所述读数据地址信息;
[0024]所述对端的RDMA模块根据所述读数据地址信息以及所述Q PI协议,生成所述QPI读请求报文。
[0025]第三方面,公开了一种远端直接内存访问实现方法,用于内存访问系统,所述内存访问系统包括本端和对端,所述本端和所述对端包括各自的中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述方法包括:
[0026]所述本端的RDMA模块根据QPI协议,生成QPI读请求报文,所述QPI读请求报文携带写数据地址信息,所述写数据地址信息为写入数据在所述本端的存储地址,所述写入数据为所述本端要写入所述对端的数据;
[0027]所述本端的CPU根据所述QPI读请求报文,从所述写数据地址对应的内存单元中获取所述写入数据;
[0028]所述本端的RDMA模块根据所述写入数据,生成RDMA写请求报文并发送给所述对端的RDMA模块,所述RDMA写请求报文携带所述写入数据以及写入数据存储地址;所述写入数据存储地址为所述写入数据在所述对端的内存中的存储地址。
[0029]结合第三方面,在第一种可能的实现方式中,所述本端的RDMA模块根据所述写入数据,生成RDMA写请求报文并发送给所述对端的RDMA模块之后,所述方法还包括:[0030]所述本端的RDMA模块生成QPI中断,并将所述QPI中断发送给所述本端的CPU,所述QPI中断用于通知所述本端的CPU所述本端的RDMA模块已将所述写入数据发送给所述对端的RDMA模块。
[0031]第四方面,公开了一种远端直接内存访问实现方法,用于内存访问系统,所述内存访问系统包括本端和对端,所述本端和所述对端包括各自的中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述方法包括:
[0032]所述对端的RDMA模块接收来自所述本端的RDMA模块的RDMA写请求报文,所述RDMA写请求报文携带写入数据以及写入数据存储地址;所述写入数据为所述本端要写入所述对端的数据,所述写入数据存储地址为所述写入数据在所述对端的内存中的存储地址;
[0033]所述对端的RDMA模块根据QPI协议,将所述RDMA写请求报文转化成QPI写请求报文,所述QPI写请求报文携带所述写入数据以及所述写入数据存储地址;
[0034]所述对端的CPU根据所述QPI写请求报文,将所述写入数据写入所述写入数据存储地址对应的内存单元中。
[0035]结合第四方面,在第一种可能的实现方式中,所述对端的RDMA模块根据QPI协议,将所述RDMA写请求报文转化成QPI写请求报文具体为,
[0036]所述对端的RDMA模块根RDMA协议,对所述RDMA写请求报文进行解析,获得所述写入数据;
[0037]所述对端的RDMA模块根据所述写入数据以及所述QPI协议,生成所述QPI写请求报文。
[0038]第五方面,公开了一种实现远端直接内存访问的本端,所述本端包括中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,
[0039]所述RDMA模块用于生成RDMA读请求报文,并将所述RDMA读请求报文发送给对端的RDMA模块,所述RDMA读请求报文携带读数据地址信息,所述读数据地址信息为读取数据在所述对端的存储地址,所述读取数据为所述本端需要读取的数据,接收来自所述对端的RDMA模块的RDMA读请求响应报文,所述RDMA读请求响应报文携带所述读取数据,以及根据QPI协议,将所述RDMA读请求响应报文转化成QPI写请求报文,所述QPI写请求报文携带所述读取数据;
[0040]所述CPU用于根据所述QPI写请求报文,将所述读取数据存储在所述本端的内存单元中。
[0041 ] 结合第五方面,在第一种可能的实现方式中,所述RDMA模块具体用于根据RDMA协议对所述RDMA读请求响应报文进行解析,获得所述读取数据,根据所述读取数据以及所述QPI协议,生成所述QPI写请求报文。
[0042]结合第五方面,在第二种可能的实现方式中,所述RDMA模块还用于,在所述本端的CPU根据所述QPI写请求报文,将所述读取数据存储在所述本端的内存单元中之后,生成QPI中断,并将所述QPI中断发送给所述本端的CPU,所述QPI中断用于通知所述本端的CPU所述本端的RDMA模块已获得所述读取数据。[0043]第六方面,公开了一种实现远端直接内存访问的对端,所述对端包括中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,
[0044]所述RDMA模块用于接收来自本端的RDMA模块的RDMA读请求报文,所述RDMA读请求报文携带读数据地址信息,所述读数据地址信息为读取数据在所述对端的存储地址,所述读取数据为所述本端需要读取的数据,根据QPI协议,将所述RDMA读请求报文转化成QPI读请求报文,所述QPI读请求报文携带所述读数据地址信息,所述RDMA模块还用于,根据所述CPU获取的所述读取数据生成RDMA读请求响应报文,将所述RDMA读请求响应报文发送给所述本端的RDMA模块;
[0045]所述CPU用于根据所述QPI读请求报文,从所述读数据地址信息对应的内存单元中获取所述读取数据。
[0046]结合第六方面,在第一种可能的实现方式中,所述RDMA模块具体用于根据RDMA协议,对所述RDMA读请求报文进行解析,获得所述读数据地址信息,根据所述读数据地址信息以及所述QPI协议,生成所述QPI读请求报文。
[0047]第七方面,公开了一种实现远端直接内存访问的本端,所述本端包括中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,
[0048]所述RDMA模块用于根据QPI协议,生成QPI读请求报文,所述QPI读请求报文携带写数据地址信息,所述写数据地址信息为写入数据在所述本端的存储地址,所述写入数据为所述本端要写入所述对端的数据,以及根据所述CPU获得的所述写入数据,生成RDMA写请求报文并发送给所述对端的RDMA模块,所述RDMA写请求报文携带所述写入数据以及写入数据存储地址;所述写入数据存储地址为所述写入数据在所述对端的内存中的存储地址;
[0049]所述CPU用于根据所述QPI读请求报文,从所述写数据地址对应的内存单元中获取所述写入数据。
[0050]结合第七方面,在第一种可能的实现方式中,所述RDMA模块还用于,生成RDMA写请求报文并发送给所述对端的RDMA模块之后,生成QPI中断,并将所述QPI中断发送给所述本端的CPU,所述QPI中断用于通知所述本端的CPU所述本端的RDMA模块已将所述写入数据发送给所述对端的RDMA模块。
[0051]第八方面,公开了一种实现远端直接内存访问的对端,所述本端包括中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,
[0052]所述RDMA模块用于,接收来自所述本端的RDMA模块的RDMA写请求报文,所述RDMA写请求报文携带写入数据以及写入数据存储地址,根据QPI协议将所述RDMA写请求报文转化成QPI写请求报文,所述QPI写请求报文携带所述写入数据以及所述写入数据存储地址;所述写入数据为所述本端要写入所述对端的数据,所述写入数据存储地址为所述写入数据在所述对端的内存中的存储地址;
[0053]所述CPU用于根据所述QPI写请求报文,将所述写入数据写入所述写入数据存储地址对应的内存单元中。[0054]结合第八方面,在第一种可能的实现方式中,所述RDMA模块具体用于根RDMA协议,对所述RDMA写请求报文进行解析,获得所述写入数据,根据所述写入数据以及所述QPI协议,生成所述QPI写请求报文。
[0055]第九方面,公开了一种实现远端直接内存访问的系统,所述系统包括本端、对端以及所述本端和所述对端之间用于通信的网络,
[0056]所述本端为上述技术方案第五方面所述的本端;
[0057]所述对端为上述技术方案第六方面所述的对端。
[0058]第十方面,公开了一种实现远端直接内存访问系统,所述系统包括对端、本端以及所述本端和所述对端之间用于通信的网络,
[0059]所述本端为上述技术方案第七方面所述的本端;
[0060]所述对端为上述技术方案第八方面所述的对端。
[0061]本发明实施例提供的远端直接内存访问实现方法、装置及系统,用于内存访问系统,所述内存访问系统包括本端和对端,所述本端和所述对端包括各自的中央处理器CPU和RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述对端的RDMA模块在接收到所述本端的RDMA模块发起的RDMA请求报文时,能够将RDMA请求报文转换为QPI数据请求,从而使得参与远端直接内存访问的对端的CPU能够快速从所述对端的RDMA模块获取QPI数据请求,避免了使用PCIE总线与CPU进行通信带来的时延,使得数据请求得到快速响应,能够有效解决现有技术中利用PCIE总线的RDMA网卡实现两个系统间的RDMA存在的延时较大的问题。
【专利附图】
【附图说明】
[0062]图1为本发明实施例1提供的远端直接内存访问实现方法的流程示意图;
[0063]图2为本发明实施例1提供的另一种远端直接内存访问实现方法的流程示意图;
[0064]图3为本发明实施例2提供的远端直接内存访问实现方法的流程示意图;
[0065]图4为本发明实施例2提供的另一种远端直接内存访问实现方法的流程示意图;
[0066]图5为本发明实施例3提供的远端直接内存访问实现方法的流程示意图;
[0067]图6为本发明实施例提供的RDMA系统构架图;
[0068]图7为本发明实施例4提供的远端直接内存访问实现方法的流程示意图;
[0069]图8为本发明实施例5提供的本端的结构框图;
[0070]图9为本发明实施例5提供的对端的结构框图。
【具体实施方式】
[0071]本发明实施例所提供的远端直接内存访问实现方法,用于内存访问系统,所述内存访问系统包括一个本端,一个对端,以及用于所述本端与所述对端之间进行通信的网络接口。通常,将发起读数据请求或写数据请求的设备定义为本端,将所述读数据请求或所述写数据请求的响应设备定义为对端。另外,可以通过QPI读请求报文、QPI写请求报文访问内存,但只能通过QPI写请求报文更新内存的内容。
[0072]实施例1:
[0073]本发明实施例提供了一种远端直接内存访问实现方法,应用于内存访问系统,所述内存访问系统包括本端和对端,所述本端和所述对端包括各自的CPU(CentralProcessing Unit,中央处理器)和RDMA模块,所述CPU和所述RDMA模块之间通过QPI相连。如图1所示,所述方法包括以下步骤:
[0074]101、所述本端的RDMA模块生成RDMA读请求报文,并将所述RDMA读请求报文发送给所述对端的RDMA模块。
[0075]其中,所述RDMA读请求报文携带读数据地址信息,所述读数据地址信息为读取数据在所述对端的存储地址,所述读取数据为所述本端需要读取的数据。本端的RDMA模块发起读数据请求的同时会生成两个地址信息,一个是读数据地址信息,一个是读取数据存储地址。其中,所述读取数据存储地址是所述本端在获得要在所述对端读取的数据之后,存储读取数据的地址信息,所述读取数据存储地址是所述读取数据在本端的存储地址。所述本端的RDMA模块会将所述读数据地址信息封装在RDMA读请求报文之中发送给对端,以便对端的RDMA模块根据所述读数据地址信息访问自身内存,获得本端需要读取的数据。需要说明的是,本端的RDMA模块并不需要将所述读取数据存储地址发送给对端,只需要记录所述读取数据存储地址。
[0076]另外,在本端的RDMA模块发起数据请求之前,在两个系统之间存在初始化的步骤,以下初始化的过程是由各系统上层操作系统通过软件方式来实现的,本发明对此不做限定。各系统配置各自RDMA系统的寄存器。之后,本端向对端发起连接请求,对端接收所述连接请求,并向本端发送连接请求响应,这样,就建立了本端和对端两个系统间的互相连接。建立连接之后,本端和对端互相交换各自的系统参数。在完成上述配置之后,本端上层操作系统会应用软件驱动通知自身RDMA系统开始进行RDMA操作。之后,本端的RDMA系统从指定的内存区域获得关于RDMA读(或写)请求的请求命令描述符。
[0077]102、所述本端的RDMA模块接收所述来自对端的RDMA模块的RDMA读请求响应报文,所述RDMA读请求响应报文携带所述读取数据。
[0078]通常,所述本端的RDMA模块通过网络接口接收所述对端的RDMA模块发送的RDMA读请求响应报文。
[0079]103、所述本端的RDMA模块根据QPI协议,将所述RDMA读请求响应报文转化成QPI
写请求报文。
[0080]这里,本端的RDMA模块首先对所述RDMA读请求响应报文的报文头进行解析,确定所述RDMA读请求报文对应的读数据请求。然后对所述RDMA读请求响应报文的数据段进行解析获得所述读取数据。
[0081]在这之后,本端的RDMA模块还会根据所述QPI协议要求以及所述读取数据,生成QPI写请求报文,所述QPI写请求报文携带所述读取数据。其中,所述本端的RDMA模块还会根据所述读取数据的数据大小确定所述QPI读请求报文的个数N,再根据所述QPI协议要求生成N个所述QPI读请求报文。还需要说明的是,由于所述本端的RDMA模块生成RDMA读请求报文之后会记录读取数据存储地址,即记录所述读取数据在所述本端的内存中存储地址。
[0082]104、所述本端的CPU根据所述QPI写请求报文,将所述读取数据存储在所述本端的内存单元中。
[0083]由于所述本端的RDMA模块生成RDMA读请求报文之后会记录所述读取数据在所述本端的内存中存储地址,即记录读取数据存储地址。因此,所述本端的CPU根据所述QPI写请求报文,将所述读取数据存储在所述读取数据存储地址对应的内存单元中。
[0084]另外,在所述本端的CPU将所述读取数据存储在所述本端的内存中之后,所述本端的RDMA模块还会生成QPI中断报文,并将所述QPI中断报文发送给自身系统的CPU。所述QPI中断报文用于通知所述本端的CPU所述本端已将所述读取数据存储在所述本端的内存中。
[0085]本发明实施例还提供了一种远端直接内存访问实现方法,应用于内存访问系统,所述内存访问系统包括本端和对端,所述本端和所述对端包括各自的CPU和RDMA模块,所述CPU和所述RDMA模块之间通过QPI相连。如图2所示,所述方法包括以下步骤:
[0086]201、所述对端的RDMA模块接收来自所述本端的RDMA模块的RDMA读请求报文。
[0087]其中,所述RDMA读请求报文携带读数据地址信息,所述读数据地址信息为读取数据在所述对端的存储地址,所述读取数据为所述本端需要读取的数据。
[0088]这里,所述RDMA读请求报文携带读数据地址信息,所述读数据地址信息为读取数据在所述对端的存储地址,所述读取数据为所述本端需要读取的数据。这是由于,本端的RDMA模块发起读数据请求的同时会生成两个地址信息,一个是读数据地址信息,一个是读取数据存储地址。其中,所述读取数据存储地址是所述本端在获得要在所述对端读取的数据之后,存储读取的数据的地址信息。所述本端的RDMA模块会将所述读数据地址信息封装在RDMA读请求报文之中发送给对端的RDMA模块,以便对端的CPU根据所述读数据地址信息访问自身内存,获得本端需要读取的数据。
[0089]202、所述对端的RDMA模块根据QPI协议,将所述RDMA读请求报文转化成QPI读请求报文,所述QPI读请求报文携带所述读数据地址信息。
[0090]其中,所述QPI读请求报文携带所述读数据地址信息。所述对端的RDMA模块首先会根据RDMA协议,对所述RDMA读请求报文进行解析,获得所述读数据地址信息。进而根据所述读数据地址信息以及所述QPI协议,生成所述QPI读请求报文。
[0091]现有技术中,当本端的RDMA模块进行RDMA操作,即发起读数据或写数据的操作,RDMA语义首先被映射为PCIE报文,然后再转化为PCIE总线事务向内存发起数据请求,由于PCIE总线为二级总线,导致本端发起的数据请求在较长延时后才能得到响应。QPI接口是CPU之间的互联总线,不同于PCIE总线(系统外设总线),QPI总线可以直接访问内存。若是RDMA模块通过QPI接口访问内存,就可以达到低延时、高带宽的效果。这样就需要根据QPI协议的要求,将所述RDMA读请求报文转换成QPI读请求报文,以便对端的CPU可以快速接收数据请求并访问内存获得响应数据。另外,由于QPI接口可以直接访问CPU,因此数据的一致性不再需要CPU来解决而是交由RDMA来处理,具体地体现在RDMA模块会根据QPI协议,来正确发起读写请求。
[0092]203、所述对端的CPU根据所述QPI读请求报文,从所述读数据地址信息对应的内存单元中获取所述读取数据。
[0093]这里,对端的CPU通过QPI总线接收QPI读请求报文,就可以根据所述QPI读请求报文中携带的读数据地址信息访问自身的内存,获得所述本端需要读取的数据,即本发明实施例所述的读取数据。
[0094]另外,由于所述对端包括CPU和RDMA模块,且所述CPU和所述RDMA模块之间通过QPI相连。因此,是对端的CPU根据所述QPI读请求报文访问内存获得所述写入数据,会将所述写入数据发送给本端的RDMA模块。
[0095]204、所述对端的RDMA模块根据所述读取数据生成RDMA读请求响应报文。
[0096]由于是对端的CPU通过QPI读请求报文访问内存获得的读取数据,因此这里所述对端的RDMA模块获得的数据是QPI读请求的响应数据,即所述读取数据。具体实现中,所述对端的RDMA模块会根据RDMA协议将所述读取数据进行封装,生成RDMA读请求响应报文。
[0097]205、所述对端的RDMA模块将所述RDMA读请求响应报文发送给所述本端的RDMA模块。
[0098]这里,所述对端的RDMA模块所述RDMA读请求响应报文发送至所述对端与所述本端之间的网络接口,以便所述本端的RDMA模块从网络接口接收所述RDMA读请求响应报文,进而获得所述读取数据。这样,所述本端的RDMA模块接收所述对端的RDMA模块发送的所述RDMA读请求响应报文,解析所述RDMA读请求响应报文,就可以获得所述读取数据。
[0099]本发明实施例提供的远端直接内存访问实现方法,用于内存访问系统,所述内存访问系统包括本端和对端,所述本端和所述对端包括各自的中央处理器CPU和RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述对端的RDMA模块在接收到所述本端的RDMA模块发起的RDMA请求报文时,能够将RDMA请求报文转换为QPI数据请求,从而使得参与远端直接内存访问的对端的CPU能够快速从所述对端的RDMA模块获取QPI数据请求,避免了使用PCIE总线与CPU进行通信带来的时延,使得数据请求得到快速响应,能够有效解决现有技术中利用PCIE总线的RDMA网卡实现两个系统间的RDMA存在的延时较大的问题。
[0100]实施例2:
[0101]本发明实施例还提供了一种远端直接内存访问实现方法,应用于内存访问系统,所述内存访问系统包括本端和对端,所述本端和所述对端包括各自的CPU和RDMA模块,所述CPU和所述RDMA模块之间通过QPI相连。如图3所示,所述方法包括以下步骤:
[0102]301、所述本端的RDMA模块根据QPI协议,生成QPI读请求报文。
[0103]其中,所述QPI读请求报文携带写数据地址信息,所述写数据地址信息为写入数据在所述本端的存储地址,所述写入数据为所述本端要写入所述对端的数据。
[0104]实际上,本端的RDMA模块在根据需求向对端发起RDMA写数据的请求时,首先会生成写请求命令,进而在根据所述写请求命令以及QPI协议生成QPI读请求报文,以从本端获取写入数据,所述写请求命令携带写数据地址信息。
[0105]本端的RDMA模块发起写数据请求的同时会生成两个地址信息,一个是写数据地址信息,一个是写入数据存储地址。其中,所述写数据地址信息是所述写入数据在本端内存中的存储地址,写入数据存储地址是所述写入数据在对端内存中的存储地址。所述本端的RDMA模块会将所述写入数据存储地址封装在RDMA写请求报文之中发送给对端,以便对端根据所述写入数据存储地址将所述写入数据写入所述对端的内存单元中。需要说明的是,本端并不需要将所述写数据地址信息发送给对端,仅根据所述写数据地址信息获得所述写入数据即可。
[0106]通常,当本端进行RDMA操作,即发起读数据或写数据的操作,RDMA语义首先被映射为PCIE报文,然后再转化为PCIE总线事务向内存发起数据请求,由于PCIE总线为二级总线,导致本端发起的数据请求在较长延时后才能得到响应。QPI接口是CPU之间的互联总线,不同于PCIE总线(系统外设总线),QPI总线可以直接访.问内存。若是RDMA网卡通过QPI接口访问内存,就可以达到低延时、高带宽的效果。这样就需要根据QPI协议的要求,将写请求命令转换成QPI读请求报文,以便CPU可以快速接收数据请求并访问内存获得响应数据。另外,由于QPI接口可以直接访问CPU,因此数据的一致性不再需要CPU来解决而是交由RDMA来处理,具体地体现在RDMA装置会根据QPI协议,来正确发起读写请求。
[0107]302、所述本端的CPU根据所述QPI读请求报文,从所述写数据地址信息对应的内存单元中获取所述写入数据。
[0108]实际上,所述本端包括CPU和RDMA模块,所述CPU和所述RDMA模块之间通过QPI相连。在实现中,是本端的CPU根据所述QPI读请求报文访问内存获得所述写入数据,再将所述写入数据发送给本端的RDMA模块。
[0109]303、所述本端的RDMA模块根据所述写入数据,生成RDMA写请求报文并发送给所述对端的RDMA模块,所述RDMA写请求报文携带所述写入数据以及写入数据存储地址。
[0110]实际上,本端的RDMA模块将所述写入数据和写入数据存储地址,封装成RDMA写请求报文并将其发送至本端与对端之间的网络接口。以便对端的RDMA模块可以通过网络接口接收所述RDMA写请求报文并获得所述写入数据以及写入数据存储地址。另外,在所述本端的RDMA模块将所述RDMA写请求报文发送给对端的RDMA模块之后,所述本端的RDMA模块生成QPI中断报文,并将所述QPI中断报文发送给自身系统的CPU。所述QPI中断报文用于通知所述本端的CPU所述本端的RDMA模块已将所述写入数据发送给所述对端的RDMA模块。
[0111]本发明实施例还提供了一种远端直接内存访问实现方法,应用于内存访问系统,所述内存访问系统包括本端和对端,所述本端和所述对端包括各自的CPU和RDMA模块,所述CPU和所述RDMA模块之间通过QPI相连。如图4所示,所述方法包括以下步骤:
[0112]401、所述对端的RDMA模块接收来自所述本端的RDMA模块的RDMA写请求报文,所述RDMA写请求报文携带所述写入数据以及写入数据存储地址。
[0113]其中,所述写入数据为所述本端要写入所述对端的数据,所述写数据地址信息为所述写入数据在所述对端的存储地址,所述写入数据存储地址为所述写入数据在所述对端的内存中的存储地址。所述对端的RDMA模块首先解析所述RDMA写请求报文的报文头,确定所述本端的数据请求为写数据请求,并确定所述RDMA写请求响应报文对应的写数据请求。之后,对所述RDMA写请求报文的数据段进行解析获得所述写入数据和所述写入数据存储地址。
[0114]402、所述对端的RDMA模块根据QPI协议,将所述RDMA写请求报文转化成QPI写请求报文,所述QPI写请求报文携带所述写入数据以及所述写入数据存储地址。
[0115]所述对端的RDMA模块根据所述写入数据的数据大小确定所述QPI写请求报文的个数N。之后,再根据所述QPI协议要求生成N个所述QPI写请求报文。
[0116]403、所述对端的CPU根据所述QPI写请求报文,将所述写入数据写入所述写入数据存储地址对应的内存单元中。
[0117]所述对端包括CPU和RDMA模块,所述CPU和所述RDMA模块之间通过QPI相连。在实现中,是对端的CPU根据所述QPI写请求报文访问内存并将所述写入数据写入对端内存中所述写入数据存储地址对应的内存单元中。这样,就完成了一次RDMA写数据请求。
[0118]本发明实施例提供的远端直接内存访问实现方法,用于内存访问系统,所述内存访问系统包括本端和对端,所述本端和所述对端包括各自的中央处理器CPU和RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述对端的RDMA模块在接收到所述本端的RDMA模块发起的RDMA请求报文时,能够将RDMA请求报文转换为QPI数据请求,从而使得参与远端直接内存访问的对端的CPU能够快速从所述对端的RDMA模块获取QPI数据请求,避免了使用PCIE总线与CPU进行通信带来的时延,使得数据请求得到快速响应,能够有效解决现有技术中利用PCIE总线的RDMA网卡实现两个系统间的RDMA存在的延时较大的问题。
[0119]实施例3:
[0120]本发明实施例提供了一种RDMA实现方法,应用于内存访问系统,所述内存访问系统包括本端及对端,所述本端、对端包括CPU和RDMA模块,所述CPU和所述RDMA模块之间通过QPI相连。如图5所示,所述方法包括以下步骤:
[0121]501、所述本端的RDMA模块生成RDMA读请求报文,并将所述RDMA读请求报文发送给所述对端的RDMA模块。
[0122]本实施例提供RDMA中读数据的方法流程。本端的RDMA模块发起读数据请求的同时会生成两个地址信息,一个是读数据地址信息,一个是读取数据存储地址。其中,本端的RDMA模块会将所述读数据地址信息封装在RDMA读请求报文之中发送给对端的RDMA模块,以便对端根据所述读数据地址信息访问自身内存,获得本端需要读取的数据。本端并的RDMA模块不需要将所述读取数据存储地址发送给对端,只需要记录所述数据存储地址,以便在获得所述读取数据之后将所述读取数据存储在对应内存中。
[0123]当本端的RDMA模块需要读取对端内存中的数据时,首先会生成一个RDMA读请求报文,并将RDMA读请求报文发送给对端,以便对端将相应数据反馈给本端。其中,所述RDMA读请求报文携带读数据地址信息,所述读数据地址信息为读取数据在所述对端的存储地址,所述读取数据为所述本端需要读取的数据。
[0124]RDMA是致力于服务器端的高性能数据拷贝技术,它的使命是:将数据从一个系统快速移动到远程系统的存储器中,而不对操作系统造成任何影响,这样就降低了计算机处理负担,从而消除了外部存储器复制和文本交换操作。进而解放了内存带宽并减少了 CPU周期,使得应用系统的性能得到很大的改进。传统技术中,在两个系统(即本发明实施例中所述的本端和对端)之间进行数据拷贝时使用TCP/IP(Transmission Control Protocol,传输控制协议/Internet Protocol,网络互联协议)协议栈。TCP/IP协议栈是操作系统内核态的一部分,一般都需要CPU需要花费大量的时间处理协议,导致数据请求延时大。而采用RDMA协议进行数据交互时,旁路了 TCP/IP的协议栈,RDMA网卡(即本端的硬件)可以直接收到数据,再经过一层很简单的内核处理,就可以将接收到的数据传送给用户的应用程序。
[0125]本发明实施例中的本端以及对端的构架图如图6所示。图中虚线内的部分从左到右分别为本端和对端的RDMA系统,具体的实现方式可以是FPGA (Field ProgrammabIe GateArray,现场可编程逻辑门阵列)或ASIC (Appl ication Specific Integrated Circuit,专用集成电路)。通常将发起数据请求的设备当作本端,将远端的响应数据请求的设备当作对端,本端和对端之间通过网络进行通信。如图6所示,本端和对端各自有一个基于QPI接口的RDMA模块,两个RDMA模块分别和各自系统的CPU连接。我们可以认为本端和对端均为独立运行的计算机系统。但是这两个计算机系统通过图中所示的网络接口(即本端和对端内部的网卡)互联在一起,通过网络进行通信以及数据传输。本端和对端通过RDMA系统连接之后,就可以实现高带宽、低延时且CPU占用率低的互相通讯和数据传递了。示例的,本端的RDMA系统包括:QPI接口、CC(Cache Coherent,缓存一致性)引擎、适配器、RDMA引擎和网络接口。其中,QPI接口是CPU之间的互联总线,相对于PCIE总线(系统外设总线)而言,具有低延时、高带宽的优势。RDMA系统通过QPI接口和CPU进行通讯。CC引擎也可以认为是数据一致性引擎,由于RDMA系统挂在CPU内部的数据总线上,因此需要保证系统的数据一致性,即RDMA系统访问的数据和CPU的缓存以及内存的数据要保持一致。适配器主要是用于实现QPI协议与RDMA报文之间的转化。RDMA引擎,就是实现RDMA协议的功能单元,也是数据在本端及对端之间进行搬移的主要功能组件。最后,网络接口是本端与对端之间通讯的功能单元,可以实现数据封装包的传输。同样地,对端的RDMA系统由同样的组建构成,与本端的RDMA系统有相同的结构,在此不做赘述。
[0126]502、所述对端的RDMA模块接收所述RDMA读请求报文,并根据QPI协议,将所述RDMA读请求报文转化成QPI读请求报文。
[0127]这里,对端的RDMA模块从网络接口接收本端的RDMA模块发送的RDMA读请求报文,由于本发明提供的RDMA系统基于QPI总线来实现本端的数据请求,因此对端在接收本端发送的RDMA读请求报文之后需要利用适配器根据QPI协议将所述RDMA读请求报文转化成QPI读请求报文,才能保证本端的读数据请求快速被对端的CPU接收。对端的RDMA模块根据所述RDMA读请求报文生成QPI读请求报文,由于所述RDMA读请求报文携带所述读数据地址信息,因此所述QPI读请求报文也会携带所述读数据地址信息,即本端需要读取的数据在对端的存储地址。在具体实现中,RDMA模块通过QPI协议中的特定报文来实现读数据的请求。包括=RDMA模块会映射发起QPI协议中的RdCur (申请临时数据拷贝读请求)报文,该报文不在本端CPU目录侧记录数据,只用于数据拷贝,类似于发送邮件,只需要保证将邮件涉及数据发送出去。CPU侧收到RdCur报文之后,返回Data_I_Cmp (临时数据读请求响应)报文或者是,Data_I报文和Cmp报文,其中,Data_I_Cmp报文、Data_I报文和Cmp报文均为临时数据读请求响应报文,区别在于Data_I_Cmp报文包含数据和响应标记,Data_I报文只包含数据。这时在CPU的目录上不记录RDMA设备的ID。读取的数据存在于Data_I_Cmp报文或者是Data_I报文中。
[0128]503、所述对端的CPU根据所述QPI读请求报文,从所述读数据地址信息对应的内存单元中获取所述读取数据。
[0129]如图6可知,对端的RDMA系统与其CPU之间通过QPI接口互联,因此当对端将本端的RDMA读请求报文转化成QPI读请求报文之后,对端的CPU就接收到了本端的读数据请求,进而根据所述QPI读请求报文携带的读数据地址信息,访问对端内存的对应地址,就可以获得读取数据,即本端需要读取的数据。具体实现中:对端对收到的RDMA读请求报文进行解析,获得要在对端获取数据的地址(即读数据地址信息),同时根据QPI协议的要求生成对应的QPI读请求报文。所述对端的CPU根据QPI读请求报文访问自身内存,获得所述读取数据。[0130]504、所述对端的RDMA模块根据所述读取数据生成RDMA读请求响应报文。
[0131 ] 对端的CPU访问内存获得读取数据之后再通过QPI接口发送给对端的RDMA系统。在步骤503中,本端发起的RDMA读请求报文是被对端转化为QPI读请求报文发送给对端的CPU的,因此这里对端的RDMA模块获得的是QPI读请求响应数据,这样对端的RDMA模块还需要将所述QPI读请求响应数据封装成RDMA读请求响应报文,之后再将所述RDMA读请求响应报文通过网络接口发送给本端的RDMA模块。这里,所述QPI读请求响应数据即本实施例中所述的读取数据。
[0132]505、所述本端的RDMA模块根据QPI协议,将所述RDMA读请求响应报文转化成QPI写请求报文,所述QPI写请求报文携带所述读取数据。
[0133]其中,所述QPI写请求报文携带所述读取数据,所述读取数据即本端的RDMA读请求的响应数据。所述本端的RDMA模块对所述RDMA读请求响应报文的报文头进行解析,确定所述RDMA读请求报文对应的读数据请求。之后对所述RDMA读请求响应报文的数据段进行解析获得所述读取数据。再根据QPI协议以及所述读取数据成QPI写请求报文,以便本端的CPU根据所述QPI写请求报文将读取数据存储在自身内存。其中,所述本端的RDMA模块还会根据所述读取数据的数据大小确定所述QPI读请求报文的个数N,再根据所述QPI协议要求生成N个所述QPI读请求报文。还需要说明的是,由于所述本端的RDMA模块生成RDMA读请求报文之后会记录读取数据存储地址,即记录所述读取数据在所述本端的内存中存储地址,因此所述QPI写请求报文除了携带所述读取数据还可以携带所述读取数据存储地址,以便本端将读取数据存储在相应的内存单元中。
[0134]这里,本端的RDMA模块通过网络接口接收到的是RDMA读请求响应报文,为了将所述RDMA读请求响应报文携带的读取数据反馈给本端的CPU就必须根据QPI协议生成QPI写请求报文,才能使本端的CPU将所述RDMA读请求响应数据存储在本端的内存中。RDMA读请求响应数据为本发明实施例中所述的读取数据。
[0135]506、所述本端的CPU根据QPI写请求报文,将所述读取数据存储在所述本端的内
存单元中。
[0136]这里只有根据QPI写请求报文才能更新本端的内存,这是由于本发明实施例RDMA系统采用QPI总线决定的,具体原因以上说明已做出详细阐释,在此不做赘述。另外,还会根据预存储的所述读取数据在所述本端的内存中存储地址,即上述实施例中所述的读取数据存储地址,将所述读取数据存储在所述本端内存中所述读取数据存储地址对应的内存单元中。
[0137]507、所述本端的RDMA模块生成QPI中断报文,并将所述QPI中断报文发送给所述本端的CPU。
[0138]其中,所述QPI中断报文用于通知所述本端的CPU所述本端已将所述读取数据存储在所述本端的内存中。
[0139]本发明实施例提供的远端直接内存访问实现方法,用于内存访问系统,所述内存访问系统包括本端和对端,所述本端和所述对端包括各自的中央处理器CPU和RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述对端的RDMA模块在接收到所述本端的RDMA模块发起的RDMA请求报文时,能够将RDMA请求报文转换为QPI数据请求,从而使得参与远端直接内存访问的对端的CPU能够快速从所述对端的RDMA模块获取QPI数据请求,避免了使用PCIE总线与CPU进行通信带来的时延,使得数据请求得到快速响应,能够有效解决现有技术中利用PCIE总线的RDMA网卡实现两个系统间的RDMA存在的延时较大的问题。
[0140]实施例4:
[0141]本发明实施例提供了 一种RDMA实现方法,应用于内存访问系统,所述内存访问系统包括本端及对端,所述本端、对端包括CPU和RDMA模块,所述CPU和所述RDMA模块之间通过QPI相连。如图7所示,所述方法包括以下步骤:
[0142]701、所述本端的RDMA模块生成写请求命令,所述写请求命令携带写数据地址信
肩、O
[0143]本实施例提供RDMA写数据的方法流程。本端的RDMA模块发起写数据请求的同时也会生成两个地址信息,一个是写数据地址信息,一个是写入数据存储地址。所述写数据地址信息为写入数据在所述本端的存储地址,所述写入数据为所述本端要写入所述对端的数据。所述写入数据存储地址为所述本端要写入所述对端的数据在对端的存储地址。另外,本端的RDMA模块会将所述写入数据存储地址封装在报文之中发送给对端,以便对端根据所述写入数据存储地址访问自身内存,将本端发送的数据写入内存。本端的RDMA模块并不需要将写数据地址信息发送给对端,只需要存储所述写数据地址信息,以便本端的CPU根据写数据地址信息访问自身内存获得写入数据。
[0144]RDMA是致力于服务器端的高性能数据拷贝技术,它的使命是:将数据从一个系统快速移动到远程系统的存储器中,而不对操作系统造成任何影响,这样就降低了计算机处理负担,从而消除了外部存储器复制和文本交换操作。进而解放了内存带宽并减少了 CPU周期,使得应用系统的性能得到很大的改进。传统技术中,在两个系统(即本发明实施例中所述的本端和对端)之间进行数据拷贝时使用TCP/IP协议栈。TCP/IP协议栈是操作系统内核态的一部分,一般都需要CPU需要花费大量的时间处理协议,导致数据请求延时大。而采用RDMA协议进行数据交互时,旁路了 TCP/IP的协议栈,RDMA网卡(即本端的硬件)可以直接收到数据,再经过一层很简单的内核处理,就可以将接收到的数据传送给用户的应用程序。
[0145]本发明实施例中的本端以及对端的构架图如图6所示。图中虚线内的部分从左到右分别为本端和对端的RDMA系统,具体的实现方式可以是FPGA或ASIC。通常将本端的发起数据请求的设备当作本端,将远端的响应数据请求的设备当作对端,本端和对端之间通过网络进行通信。如图6所示,本端和对端各自有一个基于QPI接口的RDMA系统,两个RDMA系统分别和各自系统的CPU连接。我们可以认为本端和对端均为独立运行的计算机系统。但是这两个计算机系统通过图中所示的网络接口(即本端和对端内部的网卡)互联在一起,通过网络进行通信以及数据传输。本端和对端通过RDMA系统连接之后,就可以实现高带宽、低延时且CPU占用率低的互相通讯和数据传递了。示例的,本端的RDMA系统包括:QPI接口、CC(Cache Coherent,缓存一致性)引擎、适配器、RDMA引擎和网络接口。其中,QPI接口是CPU之间的互联总线,相对于PCIE总线(系统外设总线)而言,具有低延时、高带宽的优势。RDMA系统通过QPI接口和CPU进行通讯。CC引擎也可以认为是数据一致性引擎,由于RDMA系统挂在CPU内部的数据总线上,因此需要保证系统的数据一致性,即RDMA系统访问的数据和CPU的缓存以及内存的数据组要保持一致。适配器主要是用于实现QPI协议与RDMA报文之间的转化。RDMA引擎,就是实现RDMA协议的功能单元,也是数据在系统之间进行搬移的主要功能组件。最后,网络接口是本端与对端之间通讯的功能单元,可以实现数据封装包的传输。同样地,对端的RDMA系统由同样的组建构成,与本端的RDMA系统有相同的结构,在此不做赘述。
[0146]702、本端的RDMA模块根据QPI协议,生成QPI读请求报文,所述QPI读请求报文
携带写数据地址信息。
[0147]这里,由于QPI接口是CPU之间的互联总线,可以直接访问内存。本端的RDMA网卡通过QPI接口访问内存,这样就需要将所述RDMA写请求命令转换成QPI读请求报文,以便CPU可以快速接收数据请求并访问内存获得响应数据。
[0148]703、所述本端的CPU根据QPI读请求报文,从写数据地址信息对应的内存中获得所述写入数据。
[0149]这里的所述写数据地址信息是本端在发起写数据请求的时候预存储的,以便本端访问自身内存中所述写数据地址信息对应的内存单元,获得需要写入对端的数据。因此,所述本端根据所述QPI读请求报文携带的写数据地址信息访问内存的相应地址就可以获得写入数据,即本端需要写入对端的数据。这里是通过QPI读请求报文获得的写入数据,因此所述写入数据应为QPI读请求响应数据。
[0150]704、本端的RDMA模块根据所述写入数据,生成RDMA写请求报文并发送给所述对端的RDMA模块。
[0151]其中,所述RDMA写请求报文携带所述写入数据以及所述写入数据存储地址,还可以携带上述写入数据存储地址,以便对端将所述写入数据存储在对应内存中。
[0152]将步骤703获得的QPI读请求响应数据封装成RDMA写请求报文。再通过网络接口将RDMA写请求报文发送给所述对端的RDMA模块。
[0153]705、所述本端的RDMA模块生成QPI中断报文,并将所述QPI中断报文发送给所述本端的CPU。
[0154]在所述本端的RDMA模块将所述写入数据发送给所述对端的RDMA模块之后,所述本端会生成QPI中断报文,并将所述QPI中断报文发送给所述本端的CPU,以通知所述本端的CPU所述本端的RDMA模块已将所述写入数据发送给所述对端的RDMA模块。
[0155]706、所述对端的RDMA模块接收所述来自本端的RDMA模块的RDMA写请求报文。
[0156]其中,所述RDMA写请求报文携带所述写入数据以及所述写入数据存储地址。所述对端的RDMA模块通过网络接口接收本端的RDMA模块发送的RDMA写请求报文。
[0157]707、所述对端的RDMA模块根据QPI协议,将所述RDMA写请求报文转化成QPI写请求报文。
[0158]其中,所述QPI写请求报文携带所述写入数据以及所述写入数据存储地址。所述对端的RDMA模块解析所述RDMA写请求报文获得所述写入数据,并根据QPI协议生成QPI写请求报文。具体地,所述对端的RDMA模块根据所述写入数据的数据大小确定所述QPI写请求报文的个数N。之后,再根据所述QPI协议要求生成N个所述QPI写请求报文。
[0159]依照以上所述,对端的RDMA模块通过网络接口接收本端发送的RDMA写请求报文,由于所述对端的CPU也是通过QPI接口与RDMA系统互联,因此这里还需要将接收到的RDMA写请求报文进行解析,获得所述RDMA写请求报文携带的本端要写入对端的写入数据之后,还需要根据QPI协议以及写入数据生成QPI写请求报文,以便所述对端的CPU快速接收本端的数据请求,将所述写入数据写入对端的内存。
[0160]708、所述对端的CPU根据所述QPI写请求报文,将所述写入数据写入所述写入数据存储地址对应的内存单元。
[0161]对端的CPU会根据所述QPI写请求报文访问其内存,将所述QPI写请求报文携带的数据写入所述对端内存中,所述写入数据存储地址对应的内存单元中。这样,就完成了本端发起的RDMA写数据请求,将数据快速从本端搬移到了对端。
[0162]本发明实施例提供的远端直接内存访问实现方法,用于内存访问系统,所述内存访问系统包括本端和对端,所述本端和所述对端包括各自的中央处理器CPU和RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述对端的RDMA模块在接收到所述本端的RDMA模块发起的RDMA请求报文时,能够将RDMA请求报文转换为QPI数据请求,从而使得参与远端直接内存访问的对端的CPU能够快速从所述对端的RDMA模块获取QPI数据请求,避免了使用PCIE总线与CPU进行通信带来的时延,使得数据请求得到快速响应,能够有效解决现有技术中利用PCIE总线的RDMA网卡实现两个系统间的RDMA存在的延时较大的问题。
[0163]实施例5:
[0164]本发明实施例还提供了一种本端80,如图8所示,所述本端80包括:中央处理器CPU801和RDMA模块802。所述本端80可以用于实现本端发起的RDMA读数据请求,具体包括:
[0165]所述RDMA模块802,用于生成RDMA读请求报文,并将所述RDMA读请求报文发送给对端,所述RDMA读请求报文携带读数据地址信息,所述读数据地址信息为读取数据在所述对端的存储地址,所述读取数据为所述本端需要读取的数据。
[0166]所述RDMA模块802还用于,接收来自所述对端的RDMA模块的RDMA读请求响应报文,所述RDMA读请求响应报文携带所述读取数据,以及根据QPI协议,将所述RDMA读请求响应报文转化成QPI写请求报文,所述QPI写请求报文携带所述读取数据。
[0167]所述CPU801,用于根据所述QPI写请求报文,将所述读取数据存储在所述本端的内存单元中。
[0168]所述RDMA模块802具体用于,用于根据RDMA协议对所述RDMA读请求响应报文进行解析,获得所述读取数据,根据所述读取数据以及所述QPI协议,生成所述QPI写请求报文。
[0169]所述RDMA模块802还用于,在所述CPU将所述读取数据存储在所述数据存储地址对应的内存中之后,生成QPI中断报文,并将所述QPI中断报文发送给所述CPU801 ;所述QPI中断报文用于通知所述CPU801所述RDMA模块802已获得所述读取数据。
[0170]所述RDMA模块802用于,根据所述读取数据的数据大小确定所述QPI读请求报文的个数N,所述N为大于等于I的正整数;根据所述QPI协议要求生成N个所述QPI读请求报文。
[0171]所述RDMA模块还用于802,记录数据存储地址,所述数据存储地址为所述读取数据在所述本端的内存中存储地址。所述CPU801还用于,根据所述QPI写请求报文以及所述数据存储地址,将所述读取数据存储在所述数据存储地址对应的内存单元中。[0172]另外,所述本端80可以用于实现本端发起的RDMA写数据请求,具体包括:
[0173]所述RDMA模块802,用于根据QPI协议,生成QPI读请求报文,所述QPI读请求报文携带写数据地址信息,所述写数据地址信息为写入数据在所述本端的存储地址,所述写入数据为所述本端要写入所述对端的数据,以及根据所述CPU获得的所述写入数据,生成RDMA写请求报文并发送给所述对端的RDMA模块,所述RDMA写请求报文携带所述写入数据以及写入数据存储地址,所述写入数据存储地址为所述写入数据在所述对端的内存中的存储地址。
[0174]所述CPU801用于,用于根据所述QPI读请求报文,从所述写数据地址对应的内存单元中获取所述写入数据。
[0175]所述RDMA模块802还用于,在将所述RDMA写请求报文发送给所述对端之后,生成QPI中断报文,并将所述QPI中断报文发送给所述CPU ;所述QPI中断报文用于通知所述CPU所述本端已将所述写入数据发送给所述对端。
[0176]本发明实施例提供的实现远端直接内存访问的本端,用于内存访问系统,所述本端包括中央处理器CPU和RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,能够将RDMA请求报文转换为QPI数据请求,从而使得参与远端直接内存访问的对端的CPU能够快速从所述对端的RDMA模块获取QPI数据请求,避免了使用PCIE总线与CPU进行通信带来的时延,使得数据请求得到快速响应,能够有效解决现有技术中利用PCIE总线的RDMA网卡实现两个系统间的RDMA存在的延时较大的问题。
[0177]本发明实施例还提供了一种对端90,如图9所示,所述对端90包括:中央处理器CPU901和RDMA模块902。所述对端90可以用于实现本端发起的RDMA读数据请求,具体包括:
[0178]所述RDMA模块902,用于接收来自本端的RDMA模块的RDMA读请求报文,所述RDMA读请求报文携带读数据地址信息,其中,所述读数据地址信息为读取数据在所述对端的存储地址,所述读取数据为所述本端需要读取的数据;根据QPI协议要求将所述RDMA读请求报文转化成QPI读请求报文,所述QPI读请求报文携带所述读数据地址信息。
[0179]所述RDMA模块902还用于,根据所述CPU获取的所述读取数据生成RDMA读请求响应报文,将所述RDMA读请求响应报文发送给所述本端的RDMA模块。
[0180]所述CPU901,根据所述QPI读请求报文,从所述读数据地址信息对应的内存单元中获取所述读取数据。
[0181 ] 所述RDMA模块902具体用于,根据RDMA协议,对所述RDMA读请求报文进行解析,获得所述读数据地址信息,根据所述读数据地址信息以及所述QPI协议,生成所述QPI读请求报文。
[0182]另外,所述对端90可以用于实现本端发起的RDMA写数据请求,具体包括:
[0183]所述RDMA模块902用于,接收来自所述本端的RDMA模块的RDMA写请求报文,所述RDMA写请求报文携带所述写入数据以及写入数据存储地址,所述写入数据存储地址为所述写入数据在所述对端的内存中的存储地址。根据QPI协议将所述RDMA写请求报文转化成QPI写请求报文,所述QPI写请求报文携带所述写入数据以及写入数据存储地址。
[0184]所述CPU901用于,所述CPU用于根据所述QPI写请求报文,将所述写入数据写入所述写入数据存储地址对应的内存单元中。[0185]所述RDMA模块902具体用于根RDMA协议,对所述RDMA写请求报文进行解析,获得所述写入数据,根据所述写入数据以及所述QPI协议,生成所述QPI写请求报文。
[0186]所述RDMA模块902具体用于,根据所述写入数据的数据大小确定所述QPI写请求报文的个数N,所述N为大于等于I的正整数;根据所述QPI协议要求生成N个所述QPI写请求报文。
[0187]本发明实施例提供的实现远端直接内存访问的对端,用于内存访问系统,所述对端包括各自的中央处理器CPU和RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述对端的RDMA模块在接收到所述本端的RDMA模块发起的RDMA请求报文时,能够将RDMA请求报文转换为QPI数据请求,从而使得参与远端直接内存访问的对端的CPU能够快速从所述对端的RDMA模块获取QPI数据请求,避免了使用PCIE总线与CPU进行通信带来的时延,使得数据请求得到快速响应,能够有效解决现有技术中利用PCIE总线的RDMA网卡实现两个系统间的RDMA存在的延时较大的问题。
[0188]实施例6:
[0189]本发明实施例提供了一种实现远端直接内存访问的系统,用于实现本端发起的读数据的请求。所述系统包括对端、本端以及所述本端和所述对端之间用于通信的网络,所述本端为本发明实施例图8所述的本端;所述对端为本发明实施例图9所述的对端。所述本端、对端包括CPU和RDMA模块,所述CPU和所述RDMA模块之间通过QPI相连。
[0190]本发明实施例还提供了一种实现远端直接内存访问的系统,用于实现本端发起的写数据的请求。所述系统包括对端、本端以及所述本端和所述对端之间用于通信的网络。所述本端为本发明实施例图8所述的本端,所述对端为本发明实施例图9所述的对端。所述本端、对端包括CPU和RDMA模块,所述CPU和所述RDMA模块之间通过QPI相连。
[0191 ] 本发明实施例提供的实现远端直接内存访问的系统,包括本端和对端,所述本端和所述对端包括各自的中央处理器CPU和RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述对端的RDMA模块在接收到所述本端的RDMA模块发起的RDMA请求报文时,能够将RDMA请求报文转换为QPI数据请求,从而使得参与远端直接内存访问的对端的CPU能够快速从所述对端的RDMA模块获取QPI数据请求,避免了使用PCIE总线与CPU进行通信带来的时延,使得数据请求得到快速响应,能够有效解决现有技术中利用PCIE总线的RDMA网卡实现两个系统间的RDMA存在的延时较大的问题。
[0192]本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0193]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
【权利要求】
1.一种远端直接内存访问实现方法,用于内存访问系统,所述内存访问系统包括本端和对端,其特征在于,所述本端和所述对端包括各自的中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述方法包括: 所述本端的RDMA模块生成RDMA读请求报文,并将所述RDMA读请求报文发送给所述对端的RDMA模块,所述RDMA读请求报文携带读数据地址信息,所述读数据地址信息为读取数据在所述对端的存储地址,所述读取数据为所述本端需要读取的数据; 所述本端的RDMA模块接收来自所述对端的RDMA模块的RDMA读请求响应报文,所述RDMA读请求响应报文携带所述读取数据; 所述本端的RDMA模块根据QPI协议,将所述RDMA读请求响应报文转化成QPI写请求报文,所述QPI写请求报文携带所述读取数据; 所述本端的CPU根据所述QPI写请求报文,将所述读取数据存储在所述本端的内存单元中。
2.根据权利要求1所述的方法,其特征在于,所述本端的RDMA模块根据QPI协议,将所述RDMA读请求响应报文转化成QPI写请求报文,具体为, 所述本端的RDMA模块根据RDMA协议,对所述RDMA读请求响应报进行解析,获得所述读取数据; 所述本端的RDMA模块根据所述读取数据以及所述QPI协议,生成所述QPI写请求报文。
3.根据权利要求1所述的方法,其特征在于,所述本端的CPU根据所述QPI写请求报文,将所述读取数据存储在所述本端的内存单元中之后,所述方法还包括: 所述本端的RDMA模块生成QPI中断,并将所述QPI中断发送给所述本端的CPU,所述QPI中断用于通知所述本端的CPU所述本端的RDMA模块已获得所述读取数据。
4.一种远端直接内存访问实现方法,用于内存访问系统,所述内存访问系统包括本端和对端,其特征在于,所述本端和所述对端包括各自的中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述方法包括: 所述对端的RDMA模块接收来自所述本端的RDMA模块的RDMA读请求报文,所述RDMA读请求报文携带读数据地址信息,所述读数据地址信息为读取数据在所述对端的存储地址,所述读取数据为所述本端需要读取的数据; 所述对端的RDMA模块根据QPI协议,将所述RDMA读请求报文转化成QPI读请求报文,所述QPI读请求报文携带所述读数据地址信息; 所述对端的CPU根据所述QPI读请求报文,从所述读数据地址信息对应的内存单元中获取所述读取数据; 所述对端的RDMA模块根据所述读取数据生成RDMA读请求响应报文; 所述对端的RDMA模块将所述RDMA读请求响应报文发送给所述本端的RDMA模块。
5.根据权利要求4所述的方法,其特征在于,所述对端的RDMA模块根据QPI协议将所述RDMA读请求报文转化成QPI读请求报文,具体为, 所述对端的RDMA模块根据RDM A协议,对所述RDMA读请求报文进行解析,获得所述读数据地址信息; 所述对端的RDMA模块根据所述读数据地址信息以及所述QPI协议,生成所述QPI读请求报文。
6.—种远端直接内存访问实现方法,用于内存访问系统,所述内存访问系统包括本端和对端,其特征在于,所述本端和所述对端包括各自的中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述方法包括: 所述本端的RDMA模块根据QPI协议,生成QPI读请求报文,所述QPI读请求报文携带写数据地址信息,所述写数据地址信息为写入数据在所述本端的存储地址,所述写入数据为所述本端要写入所述对端的数据; 所述本端的CPU根据所述QPI读请求报文,从所述写数据地址信息对应的内存单元中获取所述写入数据; 所述本端的RDMA模块根据所述写入数据,生成RDMA写请求报文并发送给所述对端的RDMA模块,所述RDMA写请求报文携带所述写入数据以及写入数据存储地址;所述写入数据存储地址为所述写入数据在所述对端的内存中的存储地址。
7.根据权利要求6所述的方法,其特征在于,所述本端的RDMA模块根据所述写入数据,生成RDMA写请求报文并发送给所述对端的RDMA模块之后,所述方法还包括: 所述本端的RDMA模块生成QPI中断,并将所述QPI中断发送给所述本端的CPU,所述QPI中断用于通知所述本端的CPU所述本端的RDMA模块已将所述写入数据发送给所述对端的RDMA模块。
8.—种远端直接内存访问实现方法,用于内存访问系统,所述内存访问系统包括本端和对端,其特征在于,所述本端和所述对端包括各自的中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述方法包括: 所述对端的RDMA模块接收来自所述本端的RDMA模块的RDMA写请求报文,所述RDMA写请求报文携带写入数据以及写入数据存储地址;所述写入数据为所述本端要写入所述对端的数据,所述写入数据存储地址为所述写入数据在所述对端的内存中的存储地址; 所述对端的RDMA模块根据QPI协议,将所述RDMA写请求报文转化成QPI写请求报文,所述QPI写请求报文携带所述写入数据以及所述写入数据存储地址; 所述对端的CPU根据所述QPI写请求报文,将所述写入数据写入所述写入数据存储地址对应的内存单元中。
9.根据权利要求8所述的方法,其特征在于,所述对端的RDMA模块根据QPI协议,将所述RDMA写请求报文转化成QPI写请求报文具体为, 所述对端的RDMA模块根RDMA协议,对所述RDMA写请求报文进行解析,获得所述写入数据; 所述对端的RDMA模块根据所述写入数据以及所述QPI协议,生成所述QPI写请求报文。
10.一种实现远端直接内存访问的本端,其特征在于,所述本端包括中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连, 所述RDMA模块用于生成RDMA读请求报文,并将所述RDMA读请求报文发送给对端的RDMA模块,所述RDMA读请求报文携带读数据地址信息,所述读数据地址信息为读取数据在所述对端的存储地址,所 述读取数据为所述本端需要读取的数据,接收来自所述对端的RDMA模块的RDMA读请求响应报文,所述RDMA读请求响应报文携带所述读取数据,以及根据QPI协议,将所述RDMA读请求响应报文转化成QPI写请求报文,所述QPI写请求报文携带所述读取数据; 所述CPU用于根据所述QPI写请求报文,将所述读取数据存储在所述本端的内存单元中。
11.根据权利要求10所述的本端,其特征在于,所述RDMA模块具体用于根据RDMA协议对所述RDMA读请求响应报文进行解析,获得所述读取数据,根据所述读取数据以及所述QPI协议,生成所述QPI写请求报文。
12.根据权利要求10所述的本端,其特征在于,所述RDMA模块还用于,在所述本端的CPU根据所述QPI写请求报文,将所述读取数据存储在所述本端的内存单元中之后,生成QPI中断,并将所述QPI中断发送给所述本端的CPU,所述QPI中断用于通知所述本端的CPU所述本端的RDMA模块已获得所述读取数据。
13.一种实现远端直接内存访问的对端,其特征在于,所述对端包括中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连, 所述RDMA模块用于接收来自本端的RDMA模块的RDMA读请求报文,所述RDMA读请求报文携带读数据地址信息,所述读数据地址信息为读取数据在所述对端的存储地址,所述读取数据为所述本端需要读取的数据,根据QPI协议,将所述RDMA读请求报文转化成QPI读请求报文,所述QPI读请求报文携带所述读数据地址信息,所述RDMA模块还用于,根据所述CPU获取的所述读取数据生成RDMA读请求响应报文,将所述RDMA读请求响应报文发送给所述本端的RDMA模块; 所述CPU用于根据所述QPI读请求报文,从所述读数据地址信息对应的内存单元中获取所述读取数据。
14.根据权利要求13所述的对端,其特征在于,所述RDMA模块具体用于根据RDMA协议,对所述RDMA读请求报文进行解析,获得所述读数据地址信息,根据所述读数据地址信息以及所述QPI协议,生成所述QPI读请求报文。
15.一种实现远端直接内存访问的本端,其特征在于,所述本端包括中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连, 所述RDMA模块用于根据QPI协议,生成QPI读请求报文,所述QPI读请求报文携带写数据地址信息,所述写数据地址信息为写入数据在所述本端的存储地址,所述写入数据为所述本端要写入所述对端的数据,以及根据所述CPU获得的所述写入数据,生成RDMA写请求报文并发送给所述对端的RDMA模块,所述RDMA写请求报文携带所述写入数据以及写入数据存储地址;所述写入数据存储地址为所述写入数据在所述对端的内存中的存储地址; 所述CPU用于根据所述QPI读请求报文,从所述写数据地址信息对应的内存单元中获取所述写入数据。
16.根据权利要求15所述的本端,其特征在于,所述RDMA模块还用于,生成RDMA写请求报文并发送给所述对端的RDMA模块之后,生成QPI中断,并将所述QPI中断发送给所述本端的CPU,所述QPI中断用于通知所述本端的CPU所述本端的RDMA模块已将所述写入数据发送给所述对端的RDMA模块。
17.一种实现远端直接内存访问的对端,其特征在于,所述本端包括中央处理器CPU和远端直接内存访问RDMA模块,所述CPU和所述RDMA模块之间通过快速通路互联QPI相连,所述RDMA模块用于,接收来自所述本端的RDMA模块的RDMA写请求报文,所述RDMA写请求报文携带写入数据以及写入数据存储地址,根据QPI协议将所述RDMA写请求报文转化成QPI写请求报文,所述QPI写请求报文携带所述写入数据以及所述写入数据存储地址;所述写入数据为所述本端要写入所述对端的数据,所述写入数据存储地址为所述写入数据在所述对端的内存中的存储地址; 所述CPU用于根据所述QPI写请求报文,将所述写入数据所述写入数据存储地址对应的内存单元中。
18.根据权利要求17所述的对端,其特征在于,所述RDMA模块具体用于根RDMA协议,对所述RDMA写请求报文进行解析,获得所述写入数据,根据所述写入数据以及所述QPI协议,生成所述QPI写请求报文。
19.一种实现远端直接内存访问的系统,其特征在于,所述系统包括本端、对端以及所述本端和所述对端之间用于通信的网络, 所述本端为权利要求10-12所述的本端; 所述对端为权利要求13、14所述的对端。
20.一种实现远端直接内存访问的系统,其特征在于,所述系统包括对端、本端以及所述本端和所述对端之间用于通信的网络, 所述本端为权利要求15、16所述的本端; 所述对端为权利要求17、18所述的对端。
【文档编号】G06F13/28GK103902486SQ201410139261
【公开日】2014年7月2日 申请日期:2014年4月8日 优先权日:2014年4月8日
【发明者】陈昊, 俞柏峰, 徐建荣 申请人:华为技术有限公司