CN104424105B - 一种内存数据的读写处理方法和装置 - Google Patents
一种内存数据的读写处理方法和装置 Download PDFInfo
- Publication number
- CN104424105B CN104424105B CN201310376301.XA CN201310376301A CN104424105B CN 104424105 B CN104424105 B CN 104424105B CN 201310376301 A CN201310376301 A CN 201310376301A CN 104424105 B CN104424105 B CN 104424105B
- Authority
- CN
- China
- Prior art keywords
- request
- bag
- sub
- destination node
- request bag
- 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.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
- G06F13/385—Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种内存数据的读写处理方法和装置,涉及计算机***技术领域,解决了现有技术中多个数据量较小的内存数据访存操作浪费较多的开销在数据请求包上,导致传输效率低下的问题。方法包括:源节点获取各个待发送请求包;解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同;将所述具有相同目的节点标识的至少两个待发送请求包分别作为子请求包,打包为一个合并请求包;将所述合并请求包发送给所述目的节点标识对应的目的节点,所述合并请求包用于指示所述目的节点对所述目的节点的内存数据进行读和/或写操作。本发明实施例应用于内存数据的读写处理过程中。
Description
技术领域
本发明涉及计算机***技术领域,尤其涉及一种内存数据的读写处理方法和装置。
背景技术
在多节点计算机***中,本地和远程节点之间的数据交互效率直接影响整个***的性能。远程直接内存访问(Remote Direct Memory Access,RDMA)是将内存数据从一个***快速移动到远程***存储器中,而不对操作***造成任何影响,例如在没有CPU干预的情况下,将一个节点的内存数据直接传送到另一个节点的物理内存中,进而降低了数据传输对处理部件的影响,提升***的性能。
在RDMA的读写操作中,内存与Cache(高速缓冲存储器)之间的数据交换粒度为一个Cache Line,大小为64Bytes(字节)或者128Bytes,如果将每一个Cache Line的数据打包成一个请求数据包发送出去,这种小规模的数据传递存在一定程度的链路带宽浪费,例如PCIE(Peripheral Component Interface Express,快捷外设互联标准)的数据包头可能具有16Bytes,而如果Payload(有效载荷)长度为16Bytes,则链路带宽的利用率仅有50%,因此多个数据量较小的远程数据访存操作会浪费较多的开销在数据请求包上,导致传输效率低下。
发明内容
本发明的实施例提供一种内存数据的读写处理方法和装置,提高了链路的利用效率。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,本发明提供了一种内存数据的读写处理方法,包括:
获取各个待发送请求包,所述待发送请求包包括:读请求包,和/或写请求包;
解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同;
将所述具有相同目的节点标识的至少两个待发送请求包分别作为子请求包,打包为一个合并请求包,所述合并请求包中包括公共包头和至少两个子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述合并包标识用于指示所述请求包为所述至少两个子请求包组合的合并包,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
将所述合并请求包发送给所述目的节点标识对应的目的节点,所述合并请求包用于指示所述目的节点对所述目的节点的内存数据进行读和/或写操作。
在第一方面的第一种可能的实现方式中,所述打包为一个合并请求包包括:
将所述合并包标识置为预定值,所述预定值指示所述请求包为所述至少两个子请求包组合的合并包;
获取子请求包的个数,将所述个数写入所述子请求包个数标识中。
结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同包括:
获取各个待发送请求包中携带的目的节点标识;
判断所述各个待发送请求包的目的节点标识是否相同;
所述打包为一个合并请求包包括:
提取所述子请求包中的目的节点标识,并将所述目的节点标识置于所述合并请求包的公共包头中。
结合第一方面或第一方面的第一种可能的实现方式,在第三种可能的实现方式中,所述解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同包括:
获取各个待发送请求包中携带的目的节点内存地址;
根据所述目的节点内存地址,在地址归属表中查找所述目的节点内存地址归属的目的节点标识,所述地址归属表为目的节点内存地址与目的节点标识的对应关系表;
判断所述各个待发送请求包的目的节点标识是否相同。
结合第一方面的第二种可能的实现方式或第三种可能的实现方式,在第四种可能的实现方式中,所述子请求包包括写请求子包和/或读请求子包,写请求子包包头中包括识别所述写请求子包的写请求标识,所述写请求子包中的写请求信息包括待写入所述目的节点的数据以及待写入的所述目的节点内存地址,读请求子包包头中包括识别所述读请求子包的读请求标识,所述读请求子包中的读请求信息包括待读取数据所处的所述目的节点内存地址,所述方法还包括:
接收所述目的节点发送的写请求响应消息,所述写请求响应消息中包含写请求成功的所述写请求子包对应的写请求标识;和/或,
接收所述目的节点发送的读请求响应消息,所述读请求响应消息中包含读请求成功的所述读请求子包对应的读请求标识,以及读取的有效载荷,所述有效载荷为所述读请求子包中远程内存地址对应的数据。
结合第一方面或第一方面的第一种可能的实现方式或第二种可能的实现方式或第三种可能的实现方式或第四种可能的实现方式,在第五种可能的实现方式中,所述解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同包括:
根据所述各个待发送请求包对应的目的节点标识,在路由表中查找所述目的节点标识对应的路由端口,所述路由表包含所述目的节点标识对应的路由端口,所述路由端口为所述待发送请求包到达所述目的节点的路径上的端口;
判断所述各个待发送请求包的路由端口是否相同。
第二方面,本发明提供一种内存数据的读写处理方法,包括:
接收请求包;
判断接收的请求包中是否携带合并包标识,所述合并包标识用于指示所述请求包为至少两个子请求包组合的合并请求包,所述子请求包包括:读请求子包,和/或写请求子包;
当所述请求包中携带合并包标识时,确定所述请求包为合并请求包,所述合并请求包中包括公共包头和子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
根据所述合并请求包中携带的子请求包个数标识和每个子请求包包头,提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包;
根据所述每个子请求包包头和子请求信息,处理对应的子请求包。
在第二方面的第一种可能的实现方式中,所述根据所述每个子请求包包头和子请求信息,处理对应的子请求包包括:
根据写请求子包包头中的写请求标识、所述写请求子包的写请求信息中的待写入数据以及待写入的目的节点内存地址,将所述待写入数据写入所述目的节点内存地址;和/或,
根据读请求子包包头中的读请求标识,以及所述读请求子包的读请求信息中的待读取数据所处的目的节点内存地址,在所述目的节点内存地址中读取所述待读取数据。
结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,在所述提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包之后,还包括:
将所述源节点标识写入每个子请求包的子请求包包头中,以便于所述目的节点向所述源节点发送响应消息。
结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述目的节点向所述源节点发送响应消息包括:
判断各个待发送的响应消息对应的源节点标识是否相同;
将具有相同源节点标识的所述待发送的响应消息作为子响应消息,打包为一个合并响应消息包,所述合并响应消息包中包括写请求子响应消息和/或读请求子响应消息;
将所述合并响应消息包发送给所述源节点标识对应的源节点。
在第二方面的第四种可能的实现方式中,当所述目的节点为路由端口时,在所述提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包之后,还包括:
提取所述合并请求包的公共包头中的源节点标识,写入每个子请求包的包头中。
第三方面,本发明提供一种内存数据的读写处理装置,包括:
获取单元,用于获取各个待发送请求包,所述待发送请求包包括:读请求包,和/或写请求包;
判断单元,用于解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同;
处理单元,用于将所述具有相同目的节点标识的至少两个待发送请求包分别作为子请求包,打包为一个合并请求包,所述合并请求包中包括公共包头和至少两个子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述合并包标识用于指示所述请求包为所述至少两个子请求包组合的合并包,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
发送单元,用于将所述合并请求包发送给所述目的节点标识对应的目的节点,所述合并请求包用于指示所述目的节点对所述目的节点的内存数据进行读和/或写操作。
在第三方面的第一种可能的实现方式中,所述处理单元包括:
第一标识模块,用于将所述合并包标识置为预定值,所述预定值指示所述请求包为所述至少两个子请求包组合的合并包;
第二标识模块,用于获取子请求包的个数,将所述个数写入所述子请求包个数标识中。
结合第三方面或第三方面的第一种可能的实现方式,在第二种可能的实现方式中,所述判断单元包括:
第一获取模块,用于获取各个待发送请求包中携带的目的节点标识;
第一判断模块,用于判断所述各个待发送请求包的目的节点标识是否相同;
所述处理单元还包括:
第三标识模块,用于提取所述子请求包中的目的节点标识,并将所述目的节点标识置于所述合并请求包的公共包头中。
结合第三方面或第三方面的第一种可能的实现方式,在第三种可能的实现方式中,所述判断单元包括:
第二获取模块,用于获取各个待发送请求包中携带的目的节点内存地址;
第一查找模块,用于根据所述目的节点内存地址,在地址归属表中查找所述目的节点内存地址归属的目的节点标识,所述地址归属表为目的节点内存地址与目的节点标识的对应关系表;
第二判断模块,用于判断所述各个待发送请求包的目的节点标识是否相同。
结合第三方面的第二种可能的实现方式或第三种可能的实现方式,在第四种可能的实现方式中,所述处理单元得到的所述合并请求包中包括的子请求包包括写请求子包和/或读请求子包,写请求子包包头中包括识别所述写请求子包的写请求标识,所述写请求子包中的写请求信息包括待写入所述目的节点的数据以及待写入的所述目的节点内存地址,读请求子包包头中包括识别所述读请求子包的读请求标识,所述读请求子包中的读请求信息包括待读取数据所处的所述目的节点内存地址,所述装置还包括:
接收单元,用于接收所述目的节点发送的写请求响应消息,所述写请求响应消息中包含写请求成功的所述写请求子包对应的写请求标识;和/或,用于接收所述目的节点发送的读请求响应消息,所述读请求响应消息中包含读请求成功的所述读请求子包对应的读请求标识,以及读取的有效载荷,所述有效载荷为所述读请求子包中远程内存地址对应的数据。
结合第三方面或第三方面的第一种可能的实现方式或第二种可能的实现方式或第三种可能的实现方式或第四种可能的实现方式,在第五种可能的实现方式中,所述判断单元还包括:
第二查找模块,用于根据所述各个待发送请求包对应的目的节点标识,在路由表中查找所述目的节点标识对应的路由端口,所述路由表包含所述目的节点标识对应的路由端口,所述路由端口为所述待发送请求包到达所述目的节点的路径上的端口;
第三判断模块,用于判断所述各个待发送请求包的路由端口是否相同。
第四方面,本发明提供一种内存数据的读写处理装置,包括:
接收单元,用于接收请求包;
判断单元,用于判断接收的请求包中是否携带合并包标识,所述合并包标识用于指示所述请求包为至少两个子请求包组合的合并请求包,所述子请求包包括:读请求子包,和/或写请求子包;
确定单元,用于当所述请求包中携带合并包标识时,确定所述请求包为合并请求包,所述合并请求包中包括公共包头和子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
提取单元,用于根据所述合并请求包中携带的子请求包个数标识和每个子请求包包头,提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包;
处理单元,用于根据所述每个子请求包包头和子请求信息,处理对应的子请求包。
在第四方面的第一种可能的实现方式中,所述处理单元包括:
第一处理模块,用于根据写请求子包包头中的写请求标识、所述写请求子包的写请求信息中的待写入数据以及待写入的目的节点内存地址,将所述待写入数据写入所述目的节点内存地址;
第二处理模块,用于根据读请求子包包头中的读请求标识,以及所述读请求子包的读请求信息中的待读取数据所处的目的节点内存地址,在所述目的节点内存地址中读取所述待读取数据。
结合第四方面的第一种可能的实现方式,在第二种可能的实现方式中,所述装置还包括:
标识写入单元,用于将所述源节点标识写入每个子请求包的子请求包包头中,以便于所述目的节点向所述源节点发送响应消息。
结合第四方面的第二种可能的实现方式,在第三种可能的实现方式中,所述判断单元,还用于判断各个待发送的响应消息对应的源节点标识是否相同;
所述处理单元,还用于将具有相同源节点标识的所述待发送的响应消息作为子响应消息,打包为一个合并响应消息包,所述合并响应消息包中包括写请求子响应消息和/或读请求子响应消息;
所述装置还包括:
发送单元,用于将所述合并响应消息包发送给所述源节点标识对应的源节点。
在第四方面的第四种可能的实现方式中,当所述目的节点为路由端口时,所述处理单元,还用于提取所述合并请求包的公共包头中的源节点标识,写入每个子请求包的包头中。
本发明实施例提供的一种内存数据的读写处理方法和装置,源节点获取各个待发送请求包,所述待发送请求包包括:读请求包,和/或写请求包,然后解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同,将所述具有相同目的节点标识的至少两个待发送请求包分别作为子请求包,打包为一个合并请求包,将所述合并请求包发送给所述目的节点标识对应的目的节点,所述合并请求包用于指示所述目的节点对所述目的节点的内存数据进行读和/或写操作。本发明实施例解决了现有技术中多个数据量较小的内存数据读写操作浪费较多的开销在数据请求包上,导致传输效率低下的问题,提高了链路的利用效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种内存数据的读写处理方法的流程图;
图2为一种读请求包格式的示意图;
图3为一种写请求包格式的示意图;
图4为另一种读请求包格式的示意图;
图5为另一种写请求包格式的示意图;
图6为本发明实施例提供的一种合并写请求包格式的示意图;
图7为本发明实施例提供的一种合并读请求包格式的示意图;
图8为本发明实施例提供的一种合并读写请求包格式的示意图;
图9为本发明实施例提供的另一种合并写请求包格式的示意图;
图10为本发明实施例提供的另一种合并读请求包格式的示意图;
图11为本发明实施例提供的另一种合并读写请求包格式的示意图;
图12为本发明实施例提供的另一种内存数据的读写处理方法的流程图;
图13为本发明实施例提供的又一种内存数据的读写处理方法的流程图;
图14为本发明实施例提供的一种内存数据的读写处理装置的结构图;
图15为本发明实施例提供的一种内存数据的读写处理装置中处理单元的结构图;
图16为本发明实施例提供的又一种内存数据的读写处理装置的结构图;
图17为本发明实施例提供的一种内存数据的读写处理装置中判断单元的结构图;
图18为本发明实施例提供的另一种内存数据的读写处理装置的结构图;
图19为本发明实施例提供的一种内存数据的读写处理装置中判断单元的结构图;
图20为本发明实施例提供的又另一种内存数据的读写处理装置的结构图;
图21为本发明实施例提供的又另一种内存数据的读写处理装置中处理单元的结构图;
图22为本发明实施例提供的再一种内存数据的读写处理装置的结构图;
图23为本发明实施例提供的再又一种内存数据的读写处理装置的结构图;
图24为本发明实施例提供的一种内存数据的读写处理装置的硬件结构图;
图25为本发明实施例提供的又一种内存数据的读写处理装置的硬件结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
当本地内存与远程内存进行数据交互时,对于数据量较小的内存数据读写操作会浪费较多的开销在数据请求包上,导致传输效率低下,本发明实施例提供一种内存数据的读写处理方法,将具有相同目的节点地址的请求进行合并,来提高链路的利用率,本发明实施例的方法的执行主体源节点可以是计算机节点(亦可称为计算节点),如图1所示,该方法包括以下步骤:
101、获取各个待发送请求包,所述待发送请求包包括:读请求包,和/或写请求包。
所述源节点获取的各个待发送请求包包括读请求包,和/或写请求包。
102、解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同。
其中,可以通过两种方式实现上述步骤102。
方式一:先获取各个待发送请求包中携带的目的节点标识,然后判断所述各个待发送请求包的目的节点标识是否相同。
在方式一中,在所述源节点向目的节点进行内存数据读写处理之前,参考现有技术中所述源节点向所述目的节点发送内存借用请求,所述目的节点根据自身内存的状态决定接受还是拒绝,当所述目的节点接受所述源节点的请求后,所述目的节点将分配的内存地址和地址长度发送给所述源节点,所述源节点为所述目的节点的这段内存地址分配本地内存地址,并建立地址映射表,所述地址映射表为本地内存地址与所述目的节点标识和所述目的节点的内存地址的映射列表。
当所述源节点向所述目的节点发送读或写请求包时,所述请求包中包括所述源节点标识、所述目的节点标识和所述目的节点的内存地址,其中所述目的节点标识和所述目的节点的内存地址,是由所述源节点在获取到携带有本地内存地址的请求之后,利用所述地址映射表,通过所述本地内存地址查找到的,如图2所示为待发送读请求包,图3所示为待发送写请求包。通过获取图2和/或图3所示的待发送请求包中携带的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同。
方式二:获取各个待发送请求包中携带的目的节点内存地址;根据所述目的节点内存地址,在地址归属表中查找所述目的节点内存地址归属的目的节点标识,所述地址归属表为目的节点内存地址与目的节点标识的对应关系表;判断所述各个待发送请求包的目的节点标识是否相同。
在方式二中,采用PCIE为例说明,所述待发送读请求包如图4所示,所述待发送写请求包如图5所示,其中,所述待发送读请求包和所述待发送写请求包中携带的地址为所述目的节点内存地址,在地址归属表中查找所述目的节点内存地址归属的目的节点标识,所述地址归属表为目的节点内存地址与目的节点标识的对应关系表,例如,在所述地址归属表中,当所述目的节点内存地址为0H1000-0H1fff时,对应的目的节点标识为1,所述目的节点内存地址为0H2000-0H2fff时,对应的目的节点标识为2,所述目的节点内存地址为0H3000-0H2fff时,对应的目的节点标识为3。当获取到所述待发送请求包中携带的目的节点内存地址后,根据上述地址归属表获取目的节点内存地址对应的目的节点标识。
例如,当所述待发送读请求包中携带的所述目的节点内存地址为0H1001,所述待发送写请求包中携带的所述目的节点内存地址为0H1ff0时,所述待发送读请求包和所述待发送写请求包均存在于所述目的节点标识为1中对应的目的节点内存地址范围内,因此所述待发送读请求包和所述待发送写请求包的目的节点标识相同。
103、将所述具有相同目的节点标识的至少两个待发送请求包分别作为子请求包,打包为一个合并请求包,所述合并请求包中包括公共包头和至少两个子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述合并包标识用于指示所述请求包为所述至少两个子请求包组合的合并包,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息。
在将子请求包打包成合并请求包时,在所述合并请求包中包括公共包头和子请求包,所述公共包头中包含合并包标识(Combine,C),用于指示所述请求包为所述至少两个子请求包组合的合并包,并将所述合并包标识置为预定值,所述预定值指示所述请求包为所述至少两个子请求包组合的合并包,例如C=“1”时表示请求包为合并请求包;包括子请求包个数标识(Combined Requests Number,CR NUM),用于指示所述合并请求包携带的子请求包的个数,在打包为合并请求包时,获取子请求包的个数,将所述个数写入所述子请求包个数标识中;还包括源节点标识(Requester ID),用于指示所述合并请求包发出的源节点,也就是本地源节点的标识,另外所述合并请求包的公共包头中还包含各个子请求包包头中的公共信息。所述合并请求包中的子请求包包含子请求包包头和子请求信息,所述子请求包包头包含所述子请求包的类型(Type)以及长度,其中长度具体为事物层包长度(Transaction Lay Packet,TLP length)。其中,类型用于区分所述子请求包是写请求子包还是读请求子包。
其中,可以将具有相同目的节点标识的写请求子包打包成一个合并写请求包,或者将具有相同目的节点标识的读请求子包打包成一个合并读请求包,或者为了进一步提高链路利用率,将具有相同目的节点标识的写请求子包和读请求子包打包成一个合并读写请求包,在这里不做限定。
通过上述步骤102中的方式一打包得到的合并请求包中,需要提取所述子请求包中的目的节点标识,并将所述目的节点标识置于所述合并请求包的公共包头中。如图6所示,为得到的合并写请求包,如图7所示,为得到的合并读请求包,如图8所示,为得到的合并读写请求包。
通过上述步骤102中的方式二打包得到的合并请求包中,如图9所示为得到的合并写请求包,如图10所示为得到的合并读请求包,如图11所示为得到的合并读写请求包。另外,通过方式二中得到的合并请求包中每个子请求包的包头中还包括请求编码,是所述源节点对子请求包的编码,是每个子请求包的唯一标识。
104、将所述合并请求包发送给所述目的节点标识对应的目的节点,所述合并请求包用于指示所述目的节点对所述目的节点的内存数据进行读和/或写操作。
本发明实施例提供的一种内存数据的读写处理方法,源节点获取各个待发送请求包,并解析所述各个待发送请求包的目的节点标识,判断所述各个待发送请求包的目的节点标识是否相同,然后将所述具有相同目的节点标识的至少两个待发送请求包分别作为子请求包,打包为一个合并请求包,最终将所述合并请求包发送给所述目的节点标识对应的目的节点,所述合并请求包用于指示所述目的节点对所述目的节点的内存数据进行读和/或写操作。本发明实施例解决了现有技术中多个数据量较小的内存数据访存操作浪费较多的开销在数据请求包上,导致传输效率低下的问题,提高了链路的利用效率。
本发明实施例还提供一种内存数据的读写处理方法,本发明实施例的方法的执行主体目的节点,可以为一远程计算机节点,如图12所示,该方法包括如下步骤:
1201、接收请求包;
1202、判断接收的请求包中是否携带合并包标识,所述合并包标识用于指示所述请求包为至少两个子请求包组合的合并请求包,所述子请求包包括:读请求子包,和/或写请求子包。
当所述目的节点接收到请求包时,先判断所述请求包中是否包含有合并包标识C,例如当判断C=“1”时,表示所述请求包为合并请求包。
1203、当所述请求包中携带合并包标识时,确定所述请求包为合并请求包,所述合并请求包中包括公共包头和子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
1204、根据所述合并请求包中携带的子请求包个数标识和每个子请求包包头,提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包。
当确定接收的请求包为合并请求包时,所述合并请求包的公共包头中除了包含有合并包标识,还包含子请求包个数标识和源节点标识,其中子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,源节点标识用于指示所述合并请求包发出的源节点。在每个子请求包中包含子请求包包头和子请求信息。
通过所述合并请求包中携带的子请求包个数标识和每个子请求包包头,提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包,其中,可以利用子请求包个数标识和每个子请求包包头中的类型和长度,或者利用子请求包个数标识和每个子请求包包头中的格式、类型和长度,提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包。
1205、根据所述每个子请求包包头和子请求信息,处理对应的子请求包。
其中,由于所述合并请求包中可能包含有写请求子包和/或读请求子包,可以根据子请求包包头中的格式和/或类型进行区分写请求子包和读请求子包,从而将不同请求的写请求子包和读请求子包进行不同的处理。
参考现有技术中,对于子写请求,根据所述写请求子包中携带的所述目的节点内存地址和有效载荷,将所述有效载荷写入所述目的节点内存地址上;对于子读请求,根据所述读请求子包中携带的所述目的节点内存地址,读取所述目的节点内存地址上的内容,并返回给所述源节点。
本发明实施例提供的一种内存数据的读写处理方法,目的节点判断接收的请求包中是否携带合并包标识,当所述请求包中携带合并包标识时,确定所述请求包为合并请求包,然后根据所述合并请求包中携带的子请求包个数标识和每个子请求包包头,提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包,最终根据所述每个子请求包包头和子请求信息,处理对应的子请求包。本发明实施例解决了现有技术中多个数据量较小的内存数据访存操作浪费较多的开销在数据请求包上,导致传输效率低下的问题,提高了链路的利用效率。
本发明实施例可以应用于RDMA中,将一计算节点的内存数据中具有相同目的节点的待发送请求包进行打包合并,一起发送给所述目的节点对应的远程计算节点,具体是本地Cache将请求发送给本地内存控制器,进行打包合并处理,然后发送给远程内存控制器进行拆包处理,将得到的请求发送给远程Cache。本实施例以PCIE为例进行说明,图4为标准PCIE中读请求包格式,图5为写请求包格式,其中格式和类型用来区分所述请求包为读请求包还是写请求包,事物层包长度用于表示所述请求包长度,源节点标识用于指示发送所述请求包的源节点,读请求包中的地址表示所述读请求包将要读取的内存数据的地址,所述写请求包中的地址表示所述写请求包中将携带的有效载荷,要写入的内存地址,其他字段的含义可以参考现有技术中PCIE的包格式。下面以上述应用场景为例来详细介绍一种内存数据的读写处理方法,如图13所示,该方法包括以下步骤:
1301、源节点获取各个待发送请求包,所述待发送请求包包括:读请求包,和/或写请求包;
1302、所述源节点解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同。
获取各个待发送请求包中携带的目的节点内存地址;根据所述目的节点内存地址,在地址归属表中查找所述目的节点内存地址归属的目的节点标识,所述地址归属表为目的节点内存地址与目的节点标识的对应关系表;判断所述各个待发送请求包的目的节点标识是否相同。
所述待发送读请求包如图4所示,所述待发送写请求包如图5所示,其中,所述待发送读请求包和所述待发送写请求包中携带的地址为所述目的节点内存地址,在地址归属表中查找所述目的节点内存地址归属的目的节点标识,所述地址归属表为目的节点内存地址与目的节点标识的对应关系表,例如,在所述地址归属表中,当所述目的节点内存地址为0H1000-0H1fff时,对应的目的节点标识为1,所述目的节点内存地址为0H2000-0H2fff时,对应的目的节点标识为2,所述目的节点内存地址为0H3000-0H2fff时,对应的目的节点标识为3。当获取到所述待发送请求包中携带的目的节点内存地址后,根据上述地址归属表获取目的节点内存地址对应的目的节点标识。
例如,当所述待发送读请求包中携带的所述目的节点内存地址为0H1001,所述待发送写请求包中携带的所述目的节点内存地址为0H1ff0时,所述待发送读请求包和所述待发送写请求包均存在于所述目的节点标识为1中对应的目的节点内存地址范围内,因此所述待发送读请求包和所述待发送写请求包的目的节点标识相同。
1303、所述源节点将所述具有相同目的节点标识的至少两个待发送请求包分别作为子请求包,打包为一个合并请求包,所述合并请求包中包括公共包头和至少两个子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述合并包标识用于指示所述请求包为所述至少两个子请求包组合的合并包,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息。
其中,可以将具有相同目的节点标识的写请求子包打包成一个合并写请求包,或者将具有相同目的节点标识的读请求子包打包成一个合并读请求包,或者为了进一步提高链路利用率,将具有相同目的节点标识的写请求子包和读请求子包打包成一个合并读写请求包,所以所述合并请求包中包括写请求子包和/或读请求子包。
在将子请求包打包成合并请求包时,在所述合并请求包中包括公共包头和子请求包,所述公共包头中包含合并包标识(Combine,C),用于指示所述请求包为多个子请求包组合的合并请求包,例如C=“1”时表示请求包为合并请求包;包括子请求包个数标识(Combined Requests Number,CR NUM),用于指示所述合并请求包携带的子请求包的个数,还包括源节点标识(Requester ID),用于指示所述合并请求包发出的源节点,也就是本地源节点的标识,另外所述合并请求包的公共包头中还包含各个子请求包包头中的公共信息。所述合并请求包中的子请求包包含子请求包包头和子请求信息,所述子请求包包头包含所述子请求包的格式(Fmt),类型(Type)以及长度,其中长度具体为事物层包长度(Transaction Lay Packet,TLP length)。其中,格式和类型用于区分所述子请求包是写请求子包还是读请求子包。
另外,每个子请求包的包头中还包括请求编码,是所述源节点对子请求包的编码,是每个子请求包的唯一标识,以便所述源节点在接收到所述目的节点返回的响应消息时,根据所述响应消息中携带的请求编码来确定所述子请求的完成情况。
具体如图10所示,将两个读请求子包合并得到合并读请求包,图中的合并包标识和子请求包个数标识是新添加的额外信息,其中所述子请求包个数标识长度为4比特,可以指示所述合并读请求包中包含的读请求子包的数目为16个。PCIE中本来就包含有请求编码(也就是标记)字段,长度为8比特,在所述合并读请求包中该字段的高4比特是共用的,第0-3比特用来区分不同的读请求子包,可以区分16个读请求子包,与所述子请求包个数标识字段表示的个数相匹配。其中,通信分类(TC)、污染保留位(EP)、属性(Attr)和源节点标识(Requester ID)属于所述合并读请求包中的公共包头;格式(Fmt)、类型(Type)、是否有ECRC(TD)、事物层包长度(TLP length)、请求编码(Request Coding)、最后字节对齐(LastDW BE)和首位字节对齐(1st DW BE)属于读请求子包包头,上述字段的含义可以参考现有技术中PCIE中读请求包格式的。
如图9所示,将两个写请求子包合并得到合并写请求包,所述合并写请求包中包含字段的含义与图10所示的合并读请求包中包含字段的含义类似,只是每个写请求子包中还包含有将要写入目的节点的有效载荷。
为了进一步提高链路利用率,可以将相同目的节点标识的写请求子包和读请求子包打包成一个合并请求包,如图11所示。
对于上述合并请求包中的子请求,要按照所述子请求的发送先后顺序进行打包合并。
1304、所述源节点将所述合并请求包发送给所述目的节点标识对应的目的节点,所述合并请求包用于指示所述目的节点对所述目的节点的内存数据进行读和/或写操作。
1305、所述目的节点接收请求包;
1306、所述目的节点判断接收的请求包中是否携带合并包标识,所述合并包标识用于指示所述请求包为至少两个子请求包组合的合并请求包,所述子请求包包括:读请求子包,和/或写请求子包。
当所述目的节点接收到请求包时,先判断所述请求包中是否包含有合并包标识C,例如当判断C=“1”时,表示所述请求包为合并请求包。
1307、当所述请求包中携带合并包标识时,确定所述请求包为合并请求包,所述合并请求包中包括公共包头和子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
1308、根据所述合并请求包中携带的子请求包个数标识和每个子请求包包头,提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包。
当判断所述请求包为合并请求包时,根据所述子请求包个数标识,以及每个子请求包的格式、类型以及长度,获取每个子请求包。另外,由于所述合并请求包中可能包含有写请求子包和/或读请求子包,可以根据子请求包包头中的格式和类型进行区分写请求子包和读请求子包,从而将不同请求的写请求子包和读请求子包进行不同的处理。
1309、根据所述每个子请求包包头和子请求信息,处理对应的子请求包。
根据写请求子包包头中的写请求标识、所述写请求子包的写请求信息中的待写入数据以及待写入的目的节点内存地址,将所述待写入数据写入所述目的节点内存地址;和/或,根据读请求子包包头中的读请求标识,以及所述读请求子包的读请求信息中的待读取数据所处的目的节点内存地址,在所述目的节点内存地址中读取所述待读取数据。
进一步地,为了所述目的节点对子请求包进行处理之后,便于向所述源节点发送响应消息,将所述源节点标识写入每个子请求包的子请求包包头中,另外也可将所述合并请求包中的公共包头的其他信息写入每个子请求包的子请求包包头中,使得每个子请求包转换成合并之前的格式。
另外,所述目的节点在对子请求处理之后,可以向所述源节点返回响应消息,以告知所述源节点每个子请求的完成情况。可以通过以下两种方式进行反馈:
方式一:
所述目的节点将处理后的子请求包的响应消息分别发送出去:
获取所述写请求子包中的所述源节点标识;
向所述源节点标识对应的源节点发送写请求响应消息,所述写请求响应消息中包含写请求成功的所述写请求子包对应的写请求标识。
其中,当所述写请求子包为非推送式写请求时,需要所述目的节点向所述源节点发送反馈,或者可以要求完成写请求的写请求子包,均向所述源节点发送响应消息。
所述源节点接收所述目的节点发送的写请求响应消息,所述写请求响应消息中包含写请求成功的所述写请求子包对应的写请求标识。
参考现有技术中,所述源节点在接收到写请求响应消息之后,根据携带的写请求标识,与发送出去的写请求子包中的写请求标识进行对比,可以得到哪些写请求子包在所述目的节点成功写入,哪些写请求子包没有写入,对于没有写请求成功的请求包可以再次发送。
和/或,
所述目的节点获取所述读请求子包中的所述源节点标识;
向所述源节点标识对应的源节点发送读请求响应消息,所述读请求响应消息中包含读请求成功的所述读请求子包对应的请求编码,以及获取的有效载荷,所述有效载荷为所述子读请求获取的数据。
所述源节点接收所述目的节点发送的读请求响应消息,所述读请求响应消息中包含读请求成功的所述读请求子包对应的读请求标识,以及获取的有效载荷,所述有效载荷为所述子读请求获取的数据。
所述读请求子包中的有效载荷为所述目的节点根据所述读请求子包中的远程内存地址获取到的数据,所述目的节点将成功获取到有效载荷的子读请求对应的读请求响应消息发送给所述源节点,所述源节点在接收到所述有效载荷后,根据发送所述读请求子包时,记载的本端哪些地址需要读取数据,按照所述读请求标识将对应的有效载荷读回到相应地址即可。
方式二:
判断各个待发送的响应消息对应的源节点标识是否相同;
将具有相同源节点标识的所述待发送的响应消息作为子响应消息,打包为一个合并响应消息包,所述合并响应消息包中包括写请求子响应消息和/或读请求子响应消息;
将所述合并响应消息包发送给所述源节点标识对应的源节点。
所述源节点在获取到所述合并响应消息包后,根据该包中的写请求标识和/或读请求标识获取对应的响应消息,获取之后的处理方式与方式一中描述的相同,此处不再赘述。
本发明实施例中的方法,也可以应用于***中的多个端口之间的数据传输,根据所述各个待发送请求包对应的目的节点标识,在路由表中查找所述目的节点标识对应的路由端口,所述路由表包含所述目的节点标识对应的路由端口,所述路由端口为所述待发送请求包到达所述目的节点的路径上的端口,判断所述各个待发送请求包的路由端口是否相同,将具有相同路由端口的待发送请求包进行合并,得到合并请求包,并将所述合并请求包发送给所述路由端口。所述路由端口接收到所述合并请求包之后,进行拆包操作,提取所述合并请求包的公共包头中的源节点标识,写入每个子请求包的包头中,然后继续后面的转发操作。
本发明实施例提供一种内存数据的读写处理装置14,所述内存数据的读写处理装置14可以存在于计算节点中,也可以就是一个计算节点,如图14所示,所述装置包括获取单元141、判断单元142、处理单元143和发送单元144。
其中,获取单元141,用于获取各个待发送请求包,所述待发送请求包包括:读请求包,和/或写请求包;
判断单元142,用于解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同;
处理单元143,用于将所述具有相同目的节点标识的至少两个待发送请求包分别作为子请求包,打包为一个合并请求包,所述合并请求包中包括公共包头和至少两个子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述合并包标识用于指示所述请求包为所述至少两个子请求包组合的合并包,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
发送单元144,用于将所述合并请求包发送给所述目的节点标识对应的目的节点,所述合并请求包用于指示所述目的节点对所述目的节点的内存数据进行读和/或写操作。
本发明实施例提供的一种内存数据的读写处理装置,获取各个待发送请求包,并解析所述各个待发送请求包的目的节点标识,判断所述各个待发送请求包的目的节点标识是否相同,然后将所述具有相同目的节点标识的至少两个待发送请求包分别作为子请求包,打包为一个合并请求包,最终将所述合并请求包发送给所述目的节点标识对应的目的节点,所述合并请求包用于指示所述目的节点对所述目的节点的内存数据进行读和/或写操作。本发明实施例解决了现有技术中多个数据量较小的远程数据访存操作浪费较多的开销在数据请求包上,导致传输效率低下的问题,提高了链路的利用效率。
可选的,如图15所示,所述处理单元包括:
第一标识模块151,用于将所述合并包标识置为预定值,所述预定值指示所述请求包为所述至少两个子请求包组合的合并包;
第二标识模块152,用于获取子请求包的个数,将所述个数写入所述子请求包个数标识中。
可选的,如图16所示,所述判断单元包括:
第一获取模块161,用于获取各个待发送请求包中携带的目的节点标识;
第一判断模块162,用于判断所述各个待发送请求包的目的节点标识是否相同;
所述处理单元还包括:
第三标识模块163,用于提取所述子请求包中的目的节点标识,并将所述目的节点标识置于所述合并请求包的公共包头中。
可选的,如图17所示,所述判断单元包括:
第二获取模块171,用于获取各个待发送请求包中携带的目的节点内存地址;
第一查找模块172,用于根据所述目的节点内存地址,在地址归属表中查找所述目的节点内存地址归属的目的节点标识,所述地址归属表为目的节点内存地址与目的节点标识的对应关系表;
第二判断模块173,用于判断所述各个待发送请求包的目的节点标识是否相同。
可选的,所述处理单元得到的所述合并请求包中包括的子请求包包括写请求子包和/或读请求子包,写请求子包包头中包括识别所述写请求子包的写请求标识,所述写请求子包中的写请求信息包括待写入所述目的节点的数据以及待写入的所述目的节点内存地址,读请求子包包头中包括识别所述读请求子包的读请求标识,所述读请求子包中的读请求信息包括待读取数据所处的所述目的节点内存地址,如图18所示,所述装置还包括:
接收单元181,用于接收所述目的节点发送的写请求响应消息,所述写请求响应消息中包含写请求成功的所述写请求子包对应的写请求标识;和/或,用于接收所述目的节点发送的读请求响应消息,所述读请求响应消息中包含读请求成功的所述读请求子包对应的读请求标识,以及读取的有效载荷,所述有效载荷为所述读请求子包中远程内存地址对应的数据。
可选的,如图19所示,所述判断单元还包括:
第二查找模块191,用于根据所述各个待发送请求包对应的目的节点标识,在路由表中查找所述目的节点标识对应的路由端口,所述路由表包含所述目的节点标识对应的路由端口,所述路由端口为所述待发送请求包到达所述目的节点的路径上的端口;
第三判断模块192,用于判断所述各个待发送请求包的路由端口是否相同。
相应地,本发明实施例还提供一种内存数据的读写处理装置20,所述内存数据的读写处理装置20可以存在于计算节点中,也可以就是一个计算节点,如图20所示,所述装置包括接收单元201、判断单元202、确定单元203、提取单元204和处理单元205。
接收单元201,用于接收请求包;
判断单元202,用于判断接收的请求包中是否携带合并包标识,所述合并包标识用于指示所述请求包为至少两个子请求包组合的合并请求包,所述子请求包包括:读请求子包,和/或写请求子包;
确定单元203,用于当所述请求包中携带合并包标识时,确定所述请求包为合并请求包,所述合并请求包中包括公共包头和子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
提取单元204,用于根据所述合并请求包中携带的子请求包个数标识和每个子请求包包头,提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包;
处理单元205,用于根据所述每个子请求包包头和子请求信息,处理对应的子请求包。
本发明实施例提供的一种内存数据的读写处理装置,判断接收的请求包中是否携带合并包标识,当所述请求包中携带合并包标识时,确定所述请求包为合并请求包,然后根据所述合并请求包中携带的子请求包个数标识和每个子请求包包头,提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包,最终根据所述每个子请求包包头和子请求信息,处理对应的子请求包。本发明实施例解决了现有技术中多个数据量较小的远程数据访存操作浪费较多的开销在数据请求包上,导致传输效率低下的问题,提高了链路的利用效率。
可选的,如图21所示,所述处理单元包括:
第一处理模块211,用于根据写请求子包包头中的写请求标识、所述写请求子包的写请求信息中的待写入数据以及待写入的目的节点内存地址,将所述待写入数据写入所述目的节点内存地址;
第二处理模块212,用于根据读请求子包包头中的读请求标识,以及所述读请求子包的读请求信息中的待读取数据所处的目的节点内存地址,在所述目的节点内存地址中读取所述待读取数据。
可选的,如图22所示,所述装置还包括:
标识写入单元221,用于将所述源节点标识写入每个子请求包的子请求包包头中,以便于所述目的节点向所述源节点发送响应消息。
可选的,所述判断单元,还用于判断各个待发送的响应消息对应的源节点标识是否相同;
所述处理单元,还用于将具有相同源节点标识的所述待发送的响应消息作为子响应消息,打包为一个合并响应消息包,所述合并响应消息包中包括写请求子响应消息和/或读请求子响应消息;
如图23所示,所述装置还包括:
发送单元231,用于将所述合并响应消息包发送给所述源节点标识对应的源节点。
可选的,当所述目的节点为路由端口时,所述处理单元,还用于提取所述合并请求包的公共包头中的源节点标识,写入每个子请求包的包头中。
上述装置14和装置20的操作过程,参见上述内存数据的读写处理方法的处理过程。
上述图14至图19所示的内存数据的读写处理装置可基于计算机或者其他网络设备的硬件结构来实现,如图24所示,内存数据的读写处理装置24的硬件结构包括存储器241、收发器242、处理器243和总线244。
其中,处理器243、存储器241和收发器242通过总线244连接。
存储器241可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器241可以存储操作***和其他应用程序的指令以及应用数据。存储器241中存储的指令由处理器243来运行执行。
本发明实施例中存储器241可用于存储实现图14至图19所示实施例中各功能单元的指令。
收发器242用来实现内存数据的读写处理装置24与其他设备的通信。
本发明实施例中,收发器242用于发送合并请求包和接收响应消息。
处理器243可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application SpecificIntegrated Circuit,ASIC),或者一个或多个集成电路,用于执行相关程序。
本发明实施例中,处理器243用于执行存储器241中的指令,具体执行:
获取各个待发送请求包,所述待发送请求包包括:读请求包,和/或写请求包;
解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同;
将所述具有相同目的节点标识的至少两个待发送请求包分别作为子请求包,打包为一个合并请求包,所述合并请求包中包括公共包头和至少两个子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述合并包标识用于指示所述请求包为所述至少两个子请求包组合的合并包,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
将所述合并请求包通过收发器242发送给所述目的节点标识对应的目的节点,所述合并请求包用于指示所述目的节点对所述目的节点的内存数据进行读和/或写操作。
本发明实施例提供的一种内存数据的读写处理装置,获取各个待发送请求包,并解析所述各个待发送请求包的目的节点标识,判断所述各个待发送请求包的目的节点标识是否相同,然后将所述具有相同目的节点标识的至少两个待发送请求包分别作为子请求包,打包为一个合并请求包,最终将所述合并请求包发送给所述目的节点标识对应的目的节点,所述合并请求包用于指示所述目的节点对所述目的节点的内存数据进行读和/或写操作。本发明实施例解决了现有技术中多个数据量较小的远程数据访存操作浪费较多的开销在数据请求包上,导致传输效率低下的问题,提高了链路的利用效率。
其中,处理器243中的具体处理过程可参考方法实施例部分以及图14至图19所示的装置实施例部分,这里不再赘述。
总线244可包括一通路,在内存数据的读写处理装置各个部件(例如处理器243、存储器241和收发器242)之间传送信息。
上述图20至图23所示的内存数据的读写处理装置均可基于计算机的硬件结构来实现,如图25所示,内存数据的读写处理装置25的硬件结构包括存储器251、收发器252,处理器253和总线254。
其中,处理器253、存储器251和收发器252通过总线254通信连接。
存储器251可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器251可以存储操作***和其他应用程序的指令以及应用数据。存储器251中存储的指令由处理器253来运行执行。
本发明实施例中存储器251可用于存储实现图20至图23所示实施例中各功能单元的指令。
收发器252用来实现内存数据的读写处理装置25与其他设备之间的通信。
本发明实施例中,收发器252用于接收合并请求包和发送响应消息。
处理器253可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),或者一个或多个集成电路,用于执行相关程序。
本发明实施例中,处理器253用于执行存储器251中的指令,具体执行:
通过收发器252接收请求包;
判断接收的请求包中是否携带合并包标识,所述合并包标识用于指示所述请求包为至少两个子请求包组合的合并请求包,所述子请求包包括:读请求子包,和/或写请求子包;
当所述请求包中携带合并包标识时,确定所述请求包为合并请求包,所述合并请求包中包括公共包头和子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
根据所述合并请求包中携带的子请求包个数标识和每个子请求包包头,提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包;
根据所述每个子请求包包头和子请求信息,处理对应的子请求包。
本发明实施例提供的一种内存数据的读写处理装置,判断接收的请求包中是否携带合并包标识,当所述请求包中携带合并包标识时,确定所述请求包为合并请求包,然后根据所述合并请求包中携带的子请求包个数标识和每个子请求包包头,提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包,最终根据所述每个子请求包包头和子请求信息,处理对应的子请求包。本发明实施例解决了现有技术中多个数据量较小的远程数据访存操作浪费较多的开销在数据请求包上,导致传输效率低下的问题,提高了链路的利用效率。
其中,处理器253中的具体处理过程可参考方法实施例部分以及图20至图23所示的装置实施例部分,这里不再赘述。
总线254可包括一通路,在内存数据的读写处理装置各个部件(例如处理器253、存储器251和收发器252)之间传送信息。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的***,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (22)
1.一种内存数据的读写处理方法,其特征在于,包括:
获取各个待发送请求包,所述待发送请求包包括:读请求包,和/或写请求包;
解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同;
将所述具有相同目的节点标识的至少两个待发送请求包分别作为子请求包,打包为一个合并请求包,所述合并请求包中包括公共包头和至少两个子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述合并包标识用于指示所述请求包为所述至少两个子请求包组合的合并包,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
将所述合并请求包发送给所述目的节点标识对应的目的节点,所述合并请求包用于指示所述目的节点对所述目的节点的内存数据进行读和/或写操作。
2.根据权利要求1所述的内存数据的读写处理方法,其特征在于,所述打包为一个合并请求包包括:
将所述合并包标识置为预定值,所述预定值指示所述请求包为所述至少两个子请求包组合的合并包;
获取子请求包的个数,将所述个数写入所述子请求包个数标识中。
3.根据权利要求1或2所述的内存数据的读写处理方法,其特征在于,所述解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同包括:
获取各个待发送请求包中携带的目的节点标识;
判断所述各个待发送请求包的目的节点标识是否相同;
所述打包为一个合并请求包包括:
提取所述子请求包中的目的节点标识,并将所述目的节点标识置于所述合并请求包的公共包头中。
4.根据权利要求1或2所述的内存数据的读写处理方法,其特征在于,所述解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同包括:
获取各个待发送请求包中携带的目的节点内存地址;
根据所述目的节点内存地址,在地址归属表中查找所述目的节点内存地址归属的目的节点标识,所述地址归属表为目的节点内存地址与目的节点标识的对应关系表;
判断所述各个待发送请求包的目的节点标识是否相同。
5.根据权利要求3所述的内存数据的读写处理方法,其特征在于,所述子请求包包括写请求子包和/或读请求子包,写请求子包包头中包括识别所述写请求子包的写请求标识,所述写请求子包中的写请求信息包括待写入所述目的节点的数据以及待写入的所述目的节点内存地址,读请求子包包头中包括识别所述读请求子包的读请求标识,所述读请求子包中的读请求信息包括待读取数据所处的所述目的节点内存地址,所述方法还包括:
接收所述目的节点发送的写请求响应消息,所述写请求响应消息中包含写请求成功的所述写请求子包对应的写请求标识;和/或,
接收所述目的节点发送的读请求响应消息,所述读请求响应消息中包含读请求成功的所述读请求子包对应的读请求标识,以及读取的有效载荷,所述有效载荷为所述读请求子包中远程内存地址对应的数据。
6.根据权利要求1、2、5任一项所述的内存数据的读写处理方法,其特征在于,所述解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同包括:
根据所述各个待发送请求包对应的目的节点标识,在路由表中查找所述目的节点标识对应的路由端口,所述路由表包含所述目的节点标识对应的路由端口,所述路由端口为所述待发送请求包到达所述目的节点的路径上的端口;
判断所述各个待发送请求包的路由端口是否相同。
7.一种内存数据的读写处理方法,其特征在于,包括:
接收请求包;
判断接收的请求包中是否携带合并包标识,所述合并包标识用于指示所述请求包为至少两个子请求包组合的合并请求包,所述子请求包包括:读请求子包,和/或写请求子包;
当所述请求包中携带合并包标识时,确定所述请求包为合并请求包,所述合并请求包中包括公共包头和子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
根据所述合并请求包中携带的子请求包个数标识和每个子请求包包头,提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包;
根据所述每个子请求包包头和子请求信息,处理对应的子请求包。
8.根据权利要求7所述的内存数据的读写处理方法,其特征在于,所述根据所述每个子请求包包头和子请求信息,处理对应的子请求包包括:
根据写请求子包包头中的写请求标识、所述写请求子包的写请求信息中的待写入数据以及待写入的目的节点内存地址,将所述待写入数据写入所述目的节点内存地址;和/或,
根据读请求子包包头中的读请求标识,以及所述读请求子包的读请求信息中的待读取数据所处的目的节点内存地址,在所述目的节点内存地址中读取所述待读取数据。
9.根据权利要求8所述的内存数据的读写处理方法,其特征在于,在所述提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包之后,还包括:
将所述源节点标识写入每个子请求包的子请求包包头中,以便于所述目的节点向所述源节点发送响应消息。
10.根据权利要求9所述的内存数据的读写处理方法,其特征在于,所述目的节点向所述源节点发送响应消息包括:
判断各个待发送的响应消息对应的源节点标识是否相同;
将具有相同源节点标识的所述待发送的响应消息作为子响应消息,打包为一个合并响应消息包,所述合并响应消息包中包括写请求子响应消息和/或读请求子响应消息;
将所述合并响应消息包发送给所述源节点标识对应的源节点。
11.根据权利要求7所述的内存数据的读写处理方法,其特征在于,当目的节点为路由端口时,在所述提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包之后,还包括:
提取所述合并请求包的公共包头中的源节点标识,写入每个子请求包的包头中。
12.一种内存数据的读写处理装置,其特征在于,包括:
获取单元,用于获取各个待发送请求包,所述待发送请求包包括:读请求包,和/或写请求包;
判断单元,用于解析所述各个待发送请求包的目的节点标识,并判断所述各个待发送请求包的目的节点标识是否相同;
处理单元,用于将所述具有相同目的节点标识的至少两个待发送请求包分别作为子请求包,打包为一个合并请求包,所述合并请求包中包括公共包头和至少两个子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述合并包标识用于指示所述请求包为所述至少两个子请求包组合的合并包,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
发送单元,用于将所述合并请求包发送给所述目的节点标识对应的目的节点,所述合并请求包用于指示所述目的节点对所述目的节点的内存数据进行读和/或写操作。
13.根据权利要求12所述的内存数据的读写处理装置,其特征在于,所述处理单元包括:
第一标识模块,用于将所述合并包标识置为预定值,所述预定值指示所述请求包为所述至少两个子请求包组合的合并包;
第二标识模块,用于获取子请求包的个数,将所述个数写入所述子请求包个数标识中。
14.根据权利要求12或13所述的内存数据的读写处理装置,其特征在于,
所述判断单元包括:
第一获取模块,用于获取各个待发送请求包中携带的目的节点标识;
第一判断模块,用于判断所述各个待发送请求包的目的节点标识是否相同;
所述处理单元还包括:
第三标识模块,用于提取所述子请求包中的目的节点标识,并将所述目的节点标识置于所述合并请求包的公共包头中。
15.根据权利要求12或13所述的内存数据的读写处理装置,其特征在于,所述判断单元包括:
第二获取模块,用于获取各个待发送请求包中携带的目的节点内存地址;
第一查找模块,用于根据所述目的节点内存地址,在地址归属表中查找所述目的节点内存地址归属的目的节点标识,所述地址归属表为目的节点内存地址与目的节点标识的对应关系表;
第二判断模块,用于判断所述各个待发送请求包的目的节点标识是否相同。
16.根据权利要求14所述的内存数据的读写处理装置,其特征在于,所述处理单元得到的所述合并请求包中包括的子请求包包括写请求子包和/或读请求子包,写请求子包包头中包括识别所述写请求子包的写请求标识,所述写请求子包中的写请求信息包括待写入所述目的节点的数据以及待写入的所述目的节点内存地址,读请求子包包头中包括识别所述读请求子包的读请求标识,所述读请求子包中的读请求信息包括待读取数据所处的所述目的节点内存地址,所述装置还包括:
接收单元,用于接收所述目的节点发送的写请求响应消息,所述写请求响应消息中包含写请求成功的所述写请求子包对应的写请求标识;和/或,用于接收所述目的节点发送的读请求响应消息,所述读请求响应消息中包含读请求成功的所述读请求子包对应的读请求标识,以及读取的有效载荷,所述有效载荷为所述读请求子包中远程内存地址对应的数据。
17.根据权利要求12、13、16任一项所述的内存数据的读写处理装置,其特征在于,所述判断单元还包括:
第二查找模块,用于根据所述各个待发送请求包对应的目的节点标识,在路由表中查找所述目的节点标识对应的路由端口,所述路由表包含所述目的节点标识对应的路由端口,所述路由端口为所述待发送请求包到达所述目的节点的路径上的端口;
第三判断模块,用于判断所述各个待发送请求包的路由端口是否相同。
18.一种内存数据的读写处理装置,其特征在于,包括:
接收单元,用于接收请求包;
判断单元,用于判断接收的请求包中是否携带合并包标识,所述合并包标识用于指示所述请求包为至少两个子请求包组合的合并请求包,所述子请求包包括:读请求子包,和/或写请求子包;
确定单元,用于当所述请求包中携带合并包标识时,确定所述请求包为合并请求包,所述合并请求包中包括公共包头和子请求包,所述公共包头中包含合并包标识、子请求包个数标识和源节点标识,所述子请求包个数标识用于指示所述合并请求包携带的子请求包的个数,所述子请求包包含子请求包包头和子请求信息;
提取单元,用于根据所述合并请求包中携带的子请求包个数标识和每个子请求包包头,提取所述合并请求包中与所述子请求包个数标识对应个数的子请求包;
处理单元,用于根据所述每个子请求包包头和子请求信息,处理对应的子请求包。
19.根据权利要求18所述的内存数据的读写处理装置,其特征在于,所述处理单元包括:
第一处理模块,用于根据写请求子包包头中的写请求标识、所述写请求子包的写请求信息中的待写入数据以及待写入的目的节点内存地址,将所述待写入数据写入所述目的节点内存地址;
第二处理模块,用于根据读请求子包包头中的读请求标识,以及所述读请求子包的读请求信息中的待读取数据所处的目的节点内存地址,在所述目的节点内存地址中读取所述待读取数据。
20.根据权利要求19所述的内存数据的读写处理装置,其特征在于,所述装置还包括:
标识写入单元,用于将所述源节点标识写入每个子请求包的子请求包包头中,以便于所述目的节点向所述源节点发送响应消息。
21.根据权利要求20所述的内存数据的读写处理装置,其特征在于,
所述判断单元,还用于判断各个待发送的响应消息对应的源节点标识是否相同;
所述处理单元,还用于将具有相同源节点标识的所述待发送的响应消息作为子响应消息,打包为一个合并响应消息包,所述合并响应消息包中包括写请求子响应消息和/或读请求子响应消息;
所述装置还包括:
发送单元,用于将所述合并响应消息包发送给所述源节点标识对应的源节点。
22.根据权利要求18所述的内存数据的读写处理装置,其特征在于,当目的节点为路由端口时,所述处理单元,还用于提取所述合并请求包的公共包头中的源节点标识,写入每个子请求包的包头中。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310376301.XA CN104424105B (zh) | 2013-08-26 | 2013-08-26 | 一种内存数据的读写处理方法和装置 |
PCT/CN2014/083873 WO2015027806A1 (zh) | 2013-08-26 | 2014-08-07 | 一种内存数据的读写处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310376301.XA CN104424105B (zh) | 2013-08-26 | 2013-08-26 | 一种内存数据的读写处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104424105A CN104424105A (zh) | 2015-03-18 |
CN104424105B true CN104424105B (zh) | 2017-08-25 |
Family
ID=52585534
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310376301.XA Expired - Fee Related CN104424105B (zh) | 2013-08-26 | 2013-08-26 | 一种内存数据的读写处理方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN104424105B (zh) |
WO (1) | WO2015027806A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105117230B (zh) * | 2015-08-31 | 2018-08-10 | 深圳神州数码云科数据技术有限公司 | 一种双端任务处理方法 |
CN108984132A (zh) * | 2018-08-24 | 2018-12-11 | 郑州云海信息技术有限公司 | 一种基于持久性内存文件***的io调度方法及装置 |
CN110865769B (zh) * | 2018-08-28 | 2023-06-20 | 阿里巴巴集团控股有限公司 | 处理读/写请求的方法、网络存储***及电子设备 |
CN110166341B (zh) * | 2019-07-01 | 2021-08-17 | 联想(北京)有限公司 | 一种服务器、服务器集群及通信方法 |
CN110677220B (zh) * | 2019-09-09 | 2022-06-14 | 无锡江南计算技术研究所 | 一种基于多轨冗余应答的rdma消息机制及其实现装置 |
CN111294264B (zh) * | 2020-02-17 | 2021-12-24 | 北京和利时***集成有限公司 | 一种基于Modbus TCP协议的通信方法及装置 |
CN113010186B (zh) * | 2021-02-05 | 2023-03-21 | 武汉联特科技股份有限公司 | 一种应用于光模块的固件和应用数据整合方法及*** |
CN113535083A (zh) * | 2021-06-08 | 2021-10-22 | 平头哥(上海)半导体技术有限公司 | 用于打包存储访问请求的计算机***和由计算机实现的方法 |
CN113485950A (zh) * | 2021-06-22 | 2021-10-08 | 上海天数智芯半导体有限公司 | 一种合并发送PCIe存储器写请求的***及方法 |
CN117749751A (zh) * | 2022-09-15 | 2024-03-22 | 中兴通讯股份有限公司 | 消息处理方法、电子设备和计算机可读存储介质 |
CN116028232B (zh) * | 2023-02-27 | 2023-07-14 | 浪潮电子信息产业股份有限公司 | 跨机柜服务器内存池化方法、装置、设备、服务器及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6735679B1 (en) * | 1998-07-08 | 2004-05-11 | Broadcom Corporation | Apparatus and method for optimizing access to memory |
CN102609378A (zh) * | 2012-01-18 | 2012-07-25 | 中国科学院计算技术研究所 | 一种消息式内存访问装置及其访问方法 |
CN102831018A (zh) * | 2011-06-15 | 2012-12-19 | 塔塔咨询服务有限公司 | 低延迟先进先出消息交换*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8249072B2 (en) * | 2009-03-12 | 2012-08-21 | Oracle America, Inc. | Scalable interface for connecting multiple computer systems which performs parallel MPI header matching |
CN102387206A (zh) * | 2011-10-20 | 2012-03-21 | 镇江睿泰信息科技有限公司 | 一种Web服务并发请求合成方法及*** |
-
2013
- 2013-08-26 CN CN201310376301.XA patent/CN104424105B/zh not_active Expired - Fee Related
-
2014
- 2014-08-07 WO PCT/CN2014/083873 patent/WO2015027806A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6735679B1 (en) * | 1998-07-08 | 2004-05-11 | Broadcom Corporation | Apparatus and method for optimizing access to memory |
CN102831018A (zh) * | 2011-06-15 | 2012-12-19 | 塔塔咨询服务有限公司 | 低延迟先进先出消息交换*** |
CN102609378A (zh) * | 2012-01-18 | 2012-07-25 | 中国科学院计算技术研究所 | 一种消息式内存访问装置及其访问方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104424105A (zh) | 2015-03-18 |
WO2015027806A1 (zh) | 2015-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104424105B (zh) | 一种内存数据的读写处理方法和装置 | |
CN102195874B (zh) | 数据分组的预提取 | |
CN107634915A (zh) | 数据传输方法、装置及储存介质 | |
CN107347205B (zh) | 一种网络切片选择方法、装置及*** | |
CN105704252B (zh) | 低功耗蓝牙设备数据传输方法及装置 | |
CN108255614A (zh) | 一种基于微服务架构的接口调用***及方法 | |
CN114039875B (zh) | 一种基于eBPF技术的数据采集方法、装置及*** | |
CN104796863B (zh) | 信息转发、车辆多跳通信方法及*** | |
CN104601645B (zh) | 一种数据包处理方法及装置 | |
CN103577469B (zh) | 数据库连接复用方法和装置 | |
CN103533090A (zh) | 单个物理网口模拟为多个逻辑网口的映射方法与装置 | |
CN104219159B (zh) | 基于虚拟局域网的虚拟接口进行链路聚合方法和装置 | |
CN104252416B (zh) | 一种加速器以及数据处理方法 | |
CN104038550B (zh) | 数据通信方法及其装置、存储*** | |
CN105630727B (zh) | 多SoC节点之间的访问方法、装置和*** | |
CN109982384A (zh) | 报文转发方法、装置、网络设备及介质 | |
CN106027397A (zh) | 一种星型拓展的分布式测量设备网络通信方法 | |
CN110059026A (zh) | 一种目录处理方法、装置及存储*** | |
CN103558995B (zh) | 一种存储控制芯片及磁盘报文传输方法 | |
CN107643938A (zh) | 数据传输方法、装置及存储介质 | |
CN107809387A (zh) | 一种报文传输的方法、设备及网络*** | |
CN102694717B (zh) | 在pcie总线上传输报文的方法、设备和*** | |
CN108011801A (zh) | 数据传输的方法、设备、装置及*** | |
CN104363269B (zh) | 一种通过fc链路传输、接收nas数据的方法及装置 | |
CN106059927A (zh) | 一种星型结构的有限级联自动重构网络路由设备及其网络 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170825 Termination date: 20200826 |