本发明实施例涉及计算机技术,尤其涉及一种远程内存访问方法、装置和系统。
背景技术:
远程内存访问方法包括远程直接内存存取(Remote Direct Memory Access,简称:RDMA)访问方法和载入-存储(Load-Store)访问方法,其中,RDMA访问方法中RDMA控制器从中央处理器(Central Processing Unit,简称:CPU)完全接管对总线的控制,内存数据交换不经过CPU,而直接在本地内存和远端内存之间进行传输,以中断方式向CPU报告传送操作的结束。Load-Store访问方法是CPU直接从寄存器读取或者向寄存器写入内存数据,Load用于把远端内存中的数据载入到本地寄存器中;Store用于把本地寄存器中的数据存储到远端内存。根据两种远程内存的访问方法的特点可以得出,Load-Store适用于少量的数据存取,对延时非常敏感,而RDMA适用于大块数据迁移,对带宽要求高。
然而,随着互联网应用的飞速发展,它们对计算机系统的内存容量要求越来越高,而受限于物理空间和总线能力,在本地扩大内存容量变得非常困难,因此业界开始研究如何利用远端内存,这样对互联系统的延时要求也越来越严格。现有技术中,高性能的串行输入输出(Input Output,简称:IO)总线高速外设部件互连(Peripheral Component Interconnect Express,以下简称:PCIe)已经取代传统的并行接口,成为主流I/O总线技术,PCIe通过虚通路技术来提高服务质量(Quality of Service,简称:QOS),软件为根据事务的传输要求为每个事务分配传输类别(Transport category,简称:TC),每个TC映射到端口的某一虚通道(Virtual channel,简称:VC)上,不同的VC在PCI Express线路结构中具有不同的优先级,从而为不同传输要求的事务提供不同的服务,使它们获得所要求的带宽和等待时间,保证服务质量。PCIe的这些特性为将内存访问向远端迁移提供了基本的技术支撑。
然而,采用现有技术的方法,仅在事务层降低了延时,无法保证像Load-Store内存访问这类对时延非常敏感的数据流端到端的低延时需求,通常如果一次Load-Store内存访问的延时过长可能导致应用程序挂死甚至整个CPU瘫痪。
技术实现要素:
本发明实施例提供一种远程内存访问方法、装置和系统,以降低通过Load-Store访问远程内存的延时。
第一方面,本发明提供一种远程内存访问方法,包括:
载入存储Load-Store发送引擎将第一数据包和所述第一数据包的描述符发送到传输层,所述第一数据包的描述符中包含第一标识,所述第一标识用于标识所述第一数据包来自于所述Load-Store发送引擎;
传输层根据所述第一标识,将所述第一数据包和所述第一数据包的描述符优先发送到数据链路层;
所述数据链路层根据所述第一标识和所述第一数据包,生成第二数据包,所述第二数据包中包含所述第一标识;
所述数据链路层将所述第二数据包发送到物理层进行传输。
结合第一方面,在第一方面的第一种可能的实现方式中,所述传输层根据所述第一标识,将所述第一数据包和所述第一数据包的描述符优先发送到数据链路层,包括:
所述传输层根据所述第一标识,将所述第一数据包优先发送到数据链路层的第一缓存器中,所述第一缓存器用于存储来自于所述Load-Store发送引擎的数据包;
所述数据链路层根据所述第一标识和所述第一数据包,生成第二数据包,包括:
所述数据链路层优先将所述第一缓存器中的第一数据包,根据所述第一标识和所述第一数据包,生成第二数据包;
所述数据链路层将所述第二数据包发送到物理层进行传输,包括:
所述数据链路层优先将所述第一缓存器中的第二数据包发送到物理层。
结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述方法还包括:
所述物理层根据所述第二数据包中的第一标识将所述第二数据包发送到对应优先级的虚通路进行传输。
第二方面,本发明提供一种远程内存访问方法,包括:
数据链路层从物理层接收第二数据包,所述第二数据包中包含第一标识,所述第一标识用于标识所述第二数据包在传输层将被发送到载入存储Load-Store接收引擎;
所述数据链路层将所述第二数据包发送到传输层;
所述传输层根据所述第一标识,优先将所述第二数据包发送到所述Load-Store接收引擎。
结合第二方面,在第二方面的第一种可能的实现方式中,所述第一标识还用于标识将所述第二数据包转发到第二缓存器中;
所述数据链路层从物理层接收第二数据包,包括:
所述数据链路层根据所述第一标识,将所述第二数据包存储在第二缓存器中,所述第二缓存器用于存储向所述Load-Store接收引擎发送的数据包;
所述数据链路层将所述第二数据包发送到传输层,包括:
所述数据链路层优先将所述第二缓存器中的第二数据包发送到传输层。
结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述数据链路层从物理层接收第二数据包之前,还包括:
所述物理层根据接收所述第二数据包的虚通路的优先级将所述第二数据包发送到数据链路层。
第三方面,本发明提供一种远程内存访问装置,包括:
载入存储Load-Store发送引擎,用于将第一数据包和所述第一数据包的描述符发送到传输层模块,所述第一数据包的描述符中包含第一标识,所述第一标识用于标识所述第一数据包来自于所述Load-Store发送引擎;
所述传输层模块,用于根据所述第一标识,将所述第一数据包和所述第一数据包的描述符优先发送到数据链路层模块;
所述数据链路层模块,用于根据所述第一标识和所述第一数据包,生成第二数据包,所述第二数据包中包含所述第一标识;
所述数据链路层模块,还用于将所述第二数据包发送到物理层进行传输。
结合第三方面,在第三方面的第一种可能的实现方式中,所述传输层模块具体用于根据所述第一标识,将所述第一数据包优先发送到数据链路层的第一缓存器中,所述第一缓存器用于存储来自于所述Load-Store发送引擎的数据包;
所述数据链路层模块具体用于优先将所述第一缓存器中的第一数据包,根据所述第一标识和所述第一数据包,生成第二数据包;
所述数据链路层模块具体用于优先将所述第一缓存器中的第二数据包发送到物理层模块。
结合第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,所述装置还包括:
物理层模块,用于根据所述第二数据包中的第一标识将所述第二数据包发送到对应优先级的虚通路进行传输。
第四方面,本发明提供一种远程内存访问装置,包括:
数据链路层模块,用于从物理层接收第二数据包,所述第二数据包中包含第一标识,所述第一标识用于标识所述第二数据包在传输层将被发送到载入存储Load-Store接收引擎;
所述数据链路层模块,还用于将所述第二数据包发送到传输层模块;
所述传输层模块,用于根据所述第一标识,优先将所述第二数据包发送到所述Load-Store接收引擎。
结合第四方面,在第四方面的第一种可能的实现方式中,所述第一标识还用于标识将所述第二数据包转发到第二缓存器中;
所述数据链路层模块具体用于根据所述第一标识,将所述第二数据包存储在第二缓存器中,所述第二缓存器用于存储向所述Load-Store接收引擎发送的数据包;
所述数据链路层模块具体用于优先将所述第二缓存器中的第二数据包发送到传输层。
结合第四方面的第一种可能的实现方式,在第四方面的第二种可能的实现方式中,所述装置还包括:
物理层模块,用于根据接收所述第二数据包的虚通路的优先级将所述第二数据包发送到数据链路层。
第五方面,本发明提供一种远程内存访问系统,包括:如第三方面的任一种可能的实现方式所述的远程内存访问装置,和,如第四方面的任一种可能的实现方式所述的远程内存访问装置。
本发明实施例提供的远程内存访问方法、装置和系统,通过Load-Store发送引擎在第一数据包的描述符中设置第一标识,并将所述第一数据包和所述第一数据包的描述符发送到传输层,所述第一标识用于标识所述数据包来自于所述Load-Store发送引擎;传输层根据所述第一标识,将第一数据包和所述第一数据包的描述符优先发送到数据链路层;所述数据链路层根据第一标识和第一数据包,生成第二数据包,第二数据包中包含第一标识,并将第二数据包发送到物理层进行传输。由于Load-Store发送引擎在第一数据包的描述符中设置第一标识,传输层根据所述第一标识,将第一数据包和所述第一数据包的描述符优先发送到数据链路层;从而,使得来自Load-Store发送引擎的数据包能够优先得到处理,从而,降低Load-Store内存访问的延时。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的应用场景示意图;
图2为本发明内存资源控制器和高速串行通信链路的组成示意图;
图3为本发明远程内存访问方法实施例一的流程示意图;
图4为本发明远程内存访问方法实施例二的流程示意图;
图5为本发明远程内存访问方法实施例三的流程示意图;
图6为本发明远程内存访问方法实施例四的流程示意图;
图7为本发明远程内存访问方法实施例五的流程示意图;
图8为本发明远程内存访问装置实施例一的结构示意图;
图9为本发明远程内存访问装置实施例二的结构示意图;
图10为本发明远程内存访问系统实施例的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明主要应用于数据中心本地节点和远程节点之间进行内存访问的场景,本地节点和远程节点之间通过高速串行通信接口通信,本地节点通常是指计算节点,远程节点通常是指内存节点。本地节点和远程节点也可以均是计算节点,对此,本发明不作限制。
本发明的应用场景示意图如图1所示,图1为本发明的应用场景示意图,本地节点包含多个CPU,本地存储器、内存资源控制器和高速串行通信链路,多个CPU、本地存储器和内存资源控制器之间通过系统总线进行通信,本地节点可以通过内存资源控制器和高速串行通信链路发起对远程节点内存的访问请求。远程节点包含内存区(如DDR3)、内存资源控制器和高速串行通信链路。其中内存资源控制器用于实现该节点的内存管理和处理来自远端的内存访问请求,高速串行通信链路用于本地节点和远程节点间的通信和数据传输,物理层一般采用特定的编码技术如64/66比特(bit)在光纤或者电缆上传输。
本发明主要针对内存资源控制器和高速串行通信链路进行了改进,以降低Load-Store内存访问方法的延时。
图2为本发明内存资源控制器和高速串行通信链路的组成示意图,如图2所示,内存资源控制器包括Load-Store发送引擎和RDMA发送引擎,以及包括Load-Store接收引擎和RDMA接收引擎,高速串行通信链路包括:传输层、数据链路层和物理层,其中,本地节点的内存资源控制器仅示出了Load-Store发送引擎和RDMA发送引擎,远程节点的内存资源控制器仅示出了Load-Store接收引擎和RDMA接收引擎。
结合图1和图2下面以具体地实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图3为本发明远程内存访问方法实施例一的流程示意图,如图3所示,本实施例由本地节点执行,本实施例的方法如下:
S301:Load-Store发送引擎将第一数据包和所述第一数据包的描述符发送到传输层。
其中,第一数据包的描述符中包含第一标识,第一标识用于标识所述第一数据包来自于所述Load-Store发送引擎。
S302:传输层根据第一标识,将第一数据包和第一数据包的描述符优先发送到数据链路层。
传输层负责将Load-Store发送引擎或RDMA发送引擎发送的数据包转发到数据链路层,本发明通过第一标识确定哪些数据包是来自Load-Store发送引擎的数据包,并优先发送来自Load-Store发送引擎的数据包。
在数据链路层,可以在数据包的包头通过一比特来携带第一标识信息,例如,当用于表示第一标识的比特为“1”,则认为该数据包来自Load-Store发送引擎,当用于标识第一标识的比特为“0”,则认为该数据包来自非Load-Store发送引擎,例如:来自RDMA发送引擎。
S303:数据链路层根据所述第一标识和所述第一数据包,生成第二数据包。
其中,所述第二数据包中包含所述第一标识。
数据链路层从第一数据包的描述符中确定第一标识,根据第一标识和第一数据包生成第二数据包,第一标识在第二数据包的包头中,可以通过1比特进行标识,第二数据包的数据部分为第一数据包。
S304:数据链路层将所述第二数据包发送到物理层进行传输。
本实施例中,由于Load-Store发送引擎在第一数据包的描述符中设置第一标识,传输层根据所述第一标识,将第一数据包和所述第一数据包的描述符优先发送到数据链路层;从而,使得来自Load-Store发送引擎的数据包能够优先得到处理,从而,降低Load-Store内存访问的延时。
在上述实施例的基础上,为了进一步地降低Load-Store内存访问方法的延时,本发明还提供实施例二,图4为本发明远程内存访问方法实施例二的流程示意图,如图4所示,本实施例由本地节点执行,本实施例的方法如下:
S401:Load-Store发送引擎将第一数据包和所述第一数据包的描述符发送到传输层。
S402:传输层根据所述第一标识,将所述第一数据包优先发送到数据链路层的第一缓存器中。
其中,第一缓存器用于存储来自于Load-Store发送引擎的数据包。
即在数据链路层设置专用的缓存器,用于存储来自于Load-Store发送引擎的数据包。
S403:数据链路层优先将所述第一缓存器中的第一数据包,根据所述第一标识和所述第一数据包,生成第二数据包。
S404:数据链路层优先将所述第一缓存器中的第二数据包发送到物理层。
数据链路层在向物理层发送数据包时,优先查询第一缓存器中是否有数据包等待发送,若有,则优先发送第一缓存器中的数据包,若无,则按照调度规则,发送其他的数据包。
本实施例中,通过在数据链路层设置用于存储来自于Load-Store发送引擎的数据包的第一缓存器,数据链路层优先将第一缓存器中的数据包发送到物理层,从而,进一步地降低Load-Store内存访问的延时。
图5是在图4所示实施例的基础上,进一步地降低Load-Store内存访问的延时,图5为本发明远程内存访问方法实施例三的流程示意图,如图5所示,本实施例由本地节点执行,本实施例的方法如下:
S501:Load-Store发送引擎将第一数据包和所述第一数据包的描述符发送到传输层。
S502:传输层根据所述第一标识,将所述第一数据包优先发送到数据链路层的第一缓存器中。
本步骤参见图4的步骤S402的详细描述,此处不再赘述。
S503:数据链路层优先将所述第一缓存器中的第一数据包,根据所述第一标识和所述第一数据包,生成第二数据包。
S504:数据链路层优先将所述第一缓存器中的第二数据包发送到物理层。
S505:物理层根据第二数据包中的第一标识将所述第二数据包发送到对应优先级的虚通路进行传输。
为虚通道分配优先级,携带第一标识的数据包对应的优先级通常为高优先级的虚通道或专用虚通道。
本实施例,通过物理层根据第一标识将所述数据包发送到对应优先级的虚通路进行传输。从而,使得来自Load-Store发送引擎的数据包能够通过高优先级的虚通道传输,进一步地降低Load-Store内存访问的延时。
图6为本发明远程内存访问方法实施例四的流程示意图,如图6所示,本实施例由远程节点执行,本实施例的方法如下:
S601:数据链路层从物理层接收第二数据包,所述第二数据包中包含第一标识。
其中,第一标识用于标识所述第二数据包在传输层将被发送到载入存储Load-Store接收引擎。
第一标识可以在数据包的包头通过一比特来表示,例如,当用于表示第一标识的比特为“1”,则认为该数据包向Load-Store接收引擎发送,当用于标识第一标识的比特为“0”,则认为该数据包向非Load-Store接收引擎发送,例如:向RDMA接收引擎发送。
S602:数据链路层将所述第二数据包发送到传输层。
S603:传输层根据所述第一标识,优先将所述第二数据包发送到所述Load-Store接收引擎。
传输层负责将从数据链路层接收到的数据包转发到Load-Store接收引擎或RDMA接收引擎,本发明通过第一标识确定哪些数据包是向Load-Store接收引擎发送的数据包,并优先将向Load-Store接收引擎发送的数据包转发到Load-Store接收引擎。
本实施例中,由于第一标识能够标识数据包在传输层将被发送到Load-Store接收引擎发送的数据包,传输层根据第一标识,优先将数据包发送到Load-Store接收引擎,使得来向Load-Store接收引擎发送的数据包能够优先得到处理,从而,降低Load-Store内存访问的延时。
图7是在图6所示实施例的基础上,为了进一步地降低Load-Store内存访问方法的延时,图7为本发明远程内存访问方法实施例五的流程示意图,如图7所示,本实施例的方法由远程节点执行,本实施例的方法如下:
S701:数据链路层根据所述第一标识,将所述第二数据包存储在第二缓存器中。
其中,第二缓存器用于存储向所述Load-Store接收引擎发送的数据包。
第一标识还用于标识将所述第二数据包转发到第二缓存器中。
即在数据链路层设置专用的缓存器,用于存储向Load-Store接收引擎发送的数据包。
S702:数据链路层优先将所述第二缓存器中的第二数据包发送到传输层。
数据链路层向传输层转发数据包时,优先转发第二缓存器中的数据包,只有在第二缓存器中无数据时,才根据调度规则,转发其他的数据包。
S703:传输层根据第一标识,优先将数据包发送到Load-Store接收引擎。
本实施例中,由于在数据链路层设置专用的缓存器,用于存储向Load-Store接收引擎发送的数据包,数据链路层根据所述第一标识,将所述数据包存储在第二缓存器中,数据链路层优先将所述第二缓存器中的数据包发送到传输层。从而,进一步地降低Load-Store内存访问的延时。
在上述实施例中,为了进一步地降低Load-Store内存访问的延时。所述数据链路层从物理层接收数据包之前,还包括:物理层根据接收所述第二数据包的虚通路的优先级将所述第二数据包发送到数据链路层。
本发明上述各实施例,在整个通信通道上所有环节都有机制来优先保证Load-Store内存访问消息的传输和处理,从而降低了Load-Store远程内存访问的延时,提高了Load-Store远程内存访问的服务质量,并提高了CPU的利用率。
图8为本发明远程内存访问装置实施例一的结构示意图,本实施例的装置可以部署在本地节点中,本实施例的装置包括Load-Store发送引擎801、传输层模块802和数据链路层模块803,其中,载入存储Load-Store发送引擎801用于将第一数据包和所述第一数据包的描述符发送到传输层模块,所述第一数据包的描述符中包含第一标识,所述第一标识用于标识所述第一数据包来自于所述Load-Store发送引擎;所述传输层模块802用于根据所述第一标识,将所述第一数据包和所述第一数据包的描述符优先发送到数据链路层模块;所述数据链路层模块803用于根据所述第一标识和所述第一数据包,生成第二数据包,所述第二数据包中包含所述第一标识;所述数据链路层模块,还用于将所述第二数据包发送到物理层进行传输。
本实施例的装置,对应的可用于执行图3所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
在上述实施例中,所述传输层模块802具体用于根据所述第一标识,将所述第一数据包优先发送到数据链路层的第一缓存器中,所述第一缓存器用于存储来自于所述Load-Store发送引擎的数据包;
所述数据链路层模块803具体用于优先将所述第一缓存器中的第一数据包,根据所述第一标识和所述第一数据包,生成第二数据包;
所述数据链路层模块803具体用于优先将所述第一缓存器中的第二数据包发送到物理层模块。
本实施例的装置,对应的可用于执行图4所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
在上述实施例中,物理层模块804用于根据所述第二数据包中的第一标识将所述第二数据包发送到对应优先级的虚通路进行传输。
图9为本发明远程内存访问装置实施例二的结构示意图,本实施例的装置部署在远程节点中,本实施例的装置包括数据链路层模块901和传输层模块902,其中,数据链路层模块901用于从物理层接收第二数据包,所述第二数据包中包含第一标识,所述第一标识用于标识所述第二数据包在传输层将被发送到载入存储Load-Store接收引擎;所述数据链路层模块901还用于将所述第二数据包发送到传输层模块;所述传输层模块902用于根据所述第一标识,优先将所述第二数据包发送到所述Load-Store接收引擎。
本实施例的装置对应的可用于执行图6所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
在上述实施例中,所述第一标识还用于标识将所述第二数据包转发到第二缓存器中;
所述数据链路层模块901具体用于根据所述第一标识,将所述第二数据包存储在第二缓存器中,所述第二缓存器用于存储向所述Load-Store接收引擎发送的数据包;所述数据链路层模块901具体用于优先将所述第二缓存器中的第二数据包发送到传输层。
本实施例的装置对应的可用于执行图7所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
在上述实施例中,还包括:物理层模块903用于根据接收所述第二数据包的虚通路的优先级将所述第二数据包发送到数据链路层。
图10为本发明远程内存访问系统实施例的结构示意图,包括如图8所述的远程内存访问装置1001,和,如图9所述的远程内存访问装置1002。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。