著录项信息
专利名称 | 一种内存访问方法、设备和系统 |
申请号 | CN201310247458.2 | 申请日期 | 2013-06-20 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2014-12-24 | 公开/公告号 | CN104239222A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F12/02 | IPC分类号 | G;0;6;F;1;2;/;0;2查看分类表>
|
申请人 | 华为技术有限公司;中国科学院计算技术研究所 | 申请人地址 | 广东省深圳市龙岗区坂田华为总部办公楼
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 华为技术有限公司,中国科学院计算技术研究所 | 当前权利人 | 华为技术有限公司,中国科学院计算技术研究所 |
发明人 | 李龙;张立新 |
代理机构 | 北京中博世达专利商标代理有限公司 | 代理人 | 申健 |
摘要
本发明实施例提供的一种内存访问方法、设备和系统,涉及计算机体系结构领域,解决了集群系统中内存资源的分配问题,并提高了集群内部通信效率。该方法包括:通过接收内存访问命令,判断该内存访问命令的访存地址是否为异地内存地址;如果该内存访问命令的访存地址为异地内存地址,则根据外部地址映射表查找外部地址映射表中访存地址对应的参数信息,获得访存地址所在的异地节点的标识;根据参数信息生成内存请求消息,并将内存请求消息发送至异地节点,以便通知异地节点根据内存请求消息访问异地内存获取请求数据完成内存访问并生成响应消息;通过通信模块接收并分析响应消息得到请求数据。本发明的实施例应用于计算机集群系统间内存访问技术。
1.一种内存访问方法,其特征在于,包括:
通过接收内存访问命令,判断所述内存访问命令的访存地址是否为异地内存地址;
如果所述内存访问命令的访存地址为异地内存地址,则根据外部地址映射表查找所述外部地址映射表中所述访存地址对应的参数信息,获得所述访存地址所在的异地节点的标识;所述外部地址映射表存储有异地节点内存地址及异地节点的标识,所述异地节点内存地址及异地节点的标识为请求节点内存空间不足时由所述请求节点请求异地节点发送至所述请求节点的;
根据所述参数信息生成内存请求消息,并将所述内存请求消息发送至所述异地节点,以便通知所述异地节点根据所述内存请求消息访问异地内存获取请求数据完成内存访问并生成响应消息,所述响应消息中包含所述内存访问命令所请求的请求数据;
通过通信模块接收并分析所述响应消息得到请求数据。
2.根据权利要求1所述的方法,其特征在于,所述通过接收内存访问命令,判断所述内存访问命令的访问地址是否为异地节点的内存地址,包括:
根据所述内存访问命令中的访问地址查询所述外部地址映射表中的本地起始地址;
如果在所述外部地址映射表中查询到与所述访问地址对应的异地节点的标识,则确定所述内存访问命令的访问地址为异地节点的内存地址;否则不是异地节点的内存地址。
3.根据权利要求1或2所述的方法,其特征在于,所述如果所述内存访问命令的访存地址为异地内存地址,则根据外部地址映射表查找所述外部地址映射表中所述访存地址对应的参数信息,获得所述访存地址所在的异地节点的标识,包括:
通过查找所述外部地址映射表得到所述内存访问命令中所述异地节点的访问内存的起始地址和所述异地节点的标识,并根据所述异地节点访问的内存地址计算至所述内存地址所在的所述内存的起始地址的偏移量。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当本地内存使用率超过阈值时,通过解析所述内存访问命令得到可提供空余内存空间的异地节点;
向所述异地节点发送内存请求消息,请求所述异地内存节点可提供的内存;
接收所述异地节点的内存请求响应消息,所述响应消息包含异地内存节点可提供的内存的起始地址和结束地址;
将所述异地节点的标识和异地节点的内存起始地址写入所述外部地址映射表。
5.根据权利要求1所述的方法,其特征在于,所述通过通信模块接收并分析所述响应消息得到请求数据,包括:
所述响应消息包括所述异地节点地址,请求节点地址,请求数据和响应消息序列号。
6.根据权利要求1所述的方法,其特征在于,所述外部地址映射表包括:本地起始地址,本地结束地址,异地起始地址及异地节点的标识。
7.根据权利要求1所述的方法,其特征在于,所述通信模块通过互联网络将至少一个请求节点与至少一个所述异地节点进行互联,构成内存网络。
8.一种内存访问方法,其特征在于,包括:
接收并解析内存请求消息,通过解析所述内存请求消息获取异地内存访问地址,使得根据所述异地内存访问地址获取请求数据;
封装所述请求数据为响应消息,并通过通信模块发送至请求节点;
在接收内存请求消息之前,所述方法还包括:接收来自所述请求节点的可提供内存的请求消息,并将包含可提供的内存的起始地址和结束地址的响应消息发送至所述请求节点。
9.根据权利要求8所述的方法,其特征在于,所述内存请求消息,包括:异地节点的地址,所述请求节点的地址,异地节点的内存段的起始地址,内存地址偏移量和所述请求消息的序列号。
10.根据权利要求8或9所述的方法,其特征在于,所述根据所述异地内存访问地址获取请求数据,包括:
通过解析所述内存请求消息得到所述请求节点请求所需内存段的起始地址以及内存地址偏移量,并根据所述内存段的起始地址和所述内存地址偏移量获取所述请求节点所需的内存数据。
11.一种请求节点,其特征在于,包括:
判断模块,用于通过接收内存访问命令,判断所述内存访问命令的访存地址是否为异地内存地址;
查询模块,用于如果所述内存访问命令的访存地址为异地内存地址,则根据外部地址映射表查找所述外部地址映射表中所述访存地址对应的参数信息,获得所述访存地址所在的异地节点的标识;所述外部地址映射表存储有异地节点内存地址及异地节点的标识,所述异地节点内存地址及异地节点的标识为请求节点内存空间不足时由所述请求节点请求异地节点发送至所述请求节点的;
通信模块,用于根据所述参数信息生成内存请求消息,并将所述内存请求消息发送至所述异地节点,以便通知所述异地节点根据所述内存请求消息访问异地内存获取请求数据完成内存访问并生成响应消息,所述响应消息中包含所述内存访问命令所请求的请求数据;
分析模块,用于通过所述通信模块接收并分析所述响应消息得到请求数据。
12.根据权利要求11所述的请求节点,其特征在于,所述判断模块包括:
查询子模块,用于根据所述内存访问命令中的访问地址查询所述外部地址映射表中的本地起始地址;
判断子模块,用于如果在所述外部地址映射表中查询到与所述访问地址对应的异地节点的标识,则确定所述内存访问命令的访问地址为异地节点的内存地址;否则不是异地节点的内存地址。
13.根据权利要求11或12所述的请求节点,其特征在于,所述判断模块还包括:
查询子模块,用于通过查找所述外部地址映射表得到所述内存访问命令中所述异地节点的访问内存的起始地址和所述异地节点的标识,并根据所述异地节点访问的内存地址计算至所述内存地址所在的所述内存的起始地址的偏移量。
14.根据权利要求11所述的请求节点,其特征在于,还包括:
所述分析模块,还用于当本地内存使用率超过阈值时,通过解析所述内存访问命令得到可提供空余内存空间的异地节点;
所述通信模块,还用于向所述异地节点发送内存请求消息,请求所述异地内存节点可提供的内存;
所述通信模块,还用于接收所述异地节点的内存请求响应消息,所述响应消息包含异地内存节点可提供的内存的起始地址和结束地址;
写入模块,用于将所述异地节点的标识和异地节点的内存起始地址写入所述外部地址映射表。
15.根据权利要求11所述的请求节点,其特征在于,所述响应消息,包括:所述异地节点地址,请求节点地址,请求数据和响应消息序列号。
16.根据权利要求11所述的请求节点,其特征在于,所述外部地址映射表包括:本地起始地址,本地结束地址,异地起始地址及异地节点的标识。
17.根据权利要求11所述的请求节点,其特征在于,所述通信模块通过互联网络将至少一个请求节点与至少一个所述异地节点进行互联,构成内存网络。
18.一种异地节点,其特征在于,包括:
分析模块,用于接收并解析内存请求消息,通过解析所述内存请求消息获取异地内存访问地址,使得根据所述异地内存访问地址获取请求数据;
封装模块,用于封装所述分析模块获取的所述请求数据为响应消息,并通过通信模块发送至请求节点;
通信模块,用于接收来自所述请求节点的可提供内存的请求消息,并将包含可提供的内存的起始地址和结束地址的响应消息发送至所述请求节点。
19.根据权利要求18所述的异地节点,其特征在于,所述内存请求消息,包括:所述异地节点的地址,所述请求节点的地址,所述异地节点的内存段的起始地址,内存地址偏移量和所述请求消息的序列号。
20.根据权利要求18或19所述的异地节点,其特征在于,
所述分析模块,具体用于通过解析所述内存请求消息得到所述请求节点请求所需内存段的起始地址以及内存地址偏移量,并根据所述内存段的起始地址和所述内存地址偏移量获取所述请求节点所需的内存数据。
21.一种集群通信系统,其特征在于,包括:至少一个请求节点和至少一个异地节点,其中,
所述至少一个请求节点为权利要求11~17任一所述的请求节点,所述至少一个异地节点为权利要求18~20任一所述的异地节点;
其中,当所述至少一个请求节点在作为请求节点时,也可以作为其他异地节点的请求节点;
或者,
当所述至少一个异地节点在作为异地节点时,也可以作为其他异地节点的请求节点。
22.根据权利要求21所述的集群通信系统,其特征在于,所述至少一个请求节点通过内部的通信模块与所述至少一个异地节点进行互联构成内存网络,以便在所述内存网络中进行集群通信系统范围的数据传输。
一种内存访问方法、设备和系统\n技术领域\n[0001] 本发明涉及计算机体系结构领域,尤其涉及一种内存访问方法、设备和系统。\n背景技术\n[0002] 计算机集群系统由数量众多的服务节点组成,这些节点通过软件与硬件之间的协同处理来完成特定的计算任务。在完成计算任务时计算机集群中不同节点担当的角色不同,从而有不同的资源需求,其中,在主从式集群系统中,主节点负责任务的分发,从节点负责计算,并将计算结果发至主节点。这里从节点具有较高的计算能力需求和内存需求,但是由于对于内存需求的不同往往主从节点间会发生内存分配不均,从而导致集群系统中资源利用的不均衡。\n[0003] 在现有解决内训需求问题上,现有技术提供了一种通过在最高内存区的内存条插槽中安装内存通信网卡的方式,即将内存通信网卡插入最高内存区的内存条插槽中,根据通信协议,用户预先将内存的最高内存区注册预留为计算机与网卡的共享区。这里当用户通过把数据写入共享区中时,内存通信网卡将自动将数据发送至对方内存通信网卡,并自动写入对方本地共享区中,直至对方计算机中央处理器CPU(Central Processing Unit)从共享区读取数据,从而实现计算机内存之间的直接通信。\n[0004] 发明人发现现有技术中至少存在如下问题:由于现有技术中提出了一种内存直接互联的通信方式,但是在实现的过程中仅实现了内存的直接互连通信,而且不适用于大规模集群的内存通信方式。在现有问题的基础上依旧存在集群系统中内存资源利用不均衡的问题,从而导致集群系统资源浪费。\n发明内容\n[0005] 本发明的实施例提供一种内存访问方法、设备和系统,解决了集群系统中内存资源的分配问题,并提高了集群内部通信效率。\n[0006] 为达到上述目的,本发明的实施例采用如下技术方案:\n[0007] 第一方面,提供一种内存访问方法,包括:\n[0008] 通过接收内存访问命令,判断所述内存访问命令的访存地址是否为异地内存地址;\n[0009] 如果所述内存访问命令的访存地址为异地内存地址,则根据外部地址映射表查找所述外部地址映射表中所述访存地址对应的参数信息,获得所述访存地址所在的异地节点的标识;所述外部地址映射表存储有异地节点内存地址及异地节点的标识;\n[0010] 根据所述参数信息生成内存请求消息,并将所述内存请求消息发送至所述异地节点,以便通知所述异地节点根据所述内存请求消息访问异地内存获取请求数据完成内存访问并生成响应消息,所述响应消息中包含所述内存访问命令所请求的请求数据;\n[0011] 通过通信模块接收并分析所述响应消息得到请求数据。\n[0012] 在第一种可能的实现方式中,结合第一方面具体包括,所述通过接收内存访问命令,判断所述内存访问命令的访问地址是否为异地节点的内存地址,包括:\n[0013] 根据所述内存访问命令中的访问地址查询所述外部地址映射表中的本地起始地址;\n[0014] 如果在所述外部地址映射表中查询到与所述访问地址对应的异地节点的标识,则确定所述内存访问命令的访问地址为异地节点的内存地址;否则不是异地节点的内存地址。\n[0015] 在第二种可能的实现方式中,结合第一方面或第一种可能的实现方式具体包括,所述如果所述内存访问命令的访存地址为异地内存地址,则根据外部地址映射表查找所述外部地址映射表中所述访存地址对应的参数信息,获得所述访存地址所在的异地节点的标识,包括:\n[0016] 通过查找所述外部地址映射表得到所述内存访问命令中所述异地节点的访问内存的起始地址和所述异地节点的标识,并根据所述异地节点访问的内存地址计算至所述内存地址所在的所述内存的起始地址的偏移量。\n[0017] 在第三种可能的实现方式中,结合第一方面具体包括,所述方法还包括:\n[0018] 当本地内存使用率超过阈值时,通过解析所述内存访问命令得到可提供空余内存空间的异地节点;\n[0019] 向所述异地节点发送内存请求消息,请求所述异地内存节点可提供的内存;\n[0020] 接收所述异地节点的内存请求响应消息,所述响应消息包含异地内存节点可提供的内存的起始地址和结束地址;\n[0021] 将所述异地节点的标识和异地节点的内存起始地址写入所述外部地址映射表。\n[0022] 在第四种可能的实现方式中,结合第一方面具体包括,所述通过通信模块接收并分析所述响应消息得到请求数据,包括:\n[0023] 所述响应消息包括所述异地节点地址,请求节点地址,请求数据和响应消息序列号。\n[0024] 在第五种可能的实现方式中,结合第一方面具体包括,所述外部地址映射表包括:\n本地起始地址,本地结束地址,异地起始地址及异地节点的标识。\n[0025] 在第六种可能的实现方式中,结合第一方面具体包括,所述通信模块通过互联网络将至少一个请求节点与至少一个所述异地节点进行互联,构成内存网络。\n[0026] 第二方面,提供一种内存访问方法,包括:\n[0027] 接收并解析内存请求消息,通过解析所述内存请求消息获取异地内存访问地址,使得根据所述异地内存访问地址获取请求数据;\n[0028] 封装所述请求数据为响应消息,并通过通信模块发送至所述请求节点。\n[0029] 在第一种可能的实现方式中,结合第二方面具体包括,所述内存请求消息,包括:\n所述异地节点的地址,所述请求节点的地址,所述异地节点的内存段的起始地址,内存地址偏移量和所述请求消息的序列号。\n[0030] 在第二种可能的实现方式中,结合第二方面或第一种可能的实现方式具体包括,所述根据所述异地内存访问地址获取请求数据,包括:\n[0031] 所述异地节点通过解析所述内存请求消息得到所述请求节点请求所需内存段的起始地址以及内存地址偏移量,并根据所述内存段的起始地址和所述内存地址偏移量获取所述请求节点所需的内存数据。\n[0032] 第三方面,提供一种请求节点,包括:\n[0033] 判断模块,用于通过接收内存访问命令,判断所述内存访问命令的访判断模块,用于通过接收内存访问命令,判断所述内存访问命令的访存地址是否为异地内存地址;\n[0034] 查询模块,用于如果所述内存访问命令的访存地址为异地内存地址,则根据外部地址映射表查找所述外部地址映射表中所述访存地址对应的参数信息,获得所述访存地址所在的异地节点的标识;所述外部地址映射表存储有异地节点内存地址及异地节点的标识;\n[0035] 通信模块,用于根据所述参数信息生成内存请求消息,并将所述内存请求消息发送至所述异地节点,以便通知所述异地节点根据所述内存请求消息访问异地内存获取请求数据完成内存访问并生成响应消息,所述响应消息中包含所述内存访问命令所请求的请求数据;\n[0036] 分析模块,用于通过所述通信模块接收并分析所述响应消息得到请求数据。\n[0037] 在第一种可能的实现方式中,结合第三方面具体包括,所述判断模块包括:\n[0038] 查询子模块,用于根据所述内存访问命令中的访问地址查询所述外部地址映射表中的本地起始地址;\n[0039] 判断子模块,用于如果在所述外部地址映射表中查询到与所述访问地址对应的异地节点的标识,则确定所述内存访问命令的访问地址为异地节点的内存地址;否则不是异地节点的内存地址。\n[0040] 在第二种可能的实现方式中,结合第三方面或第一种可能的实现方式具体包括,所述判断模块还包括:\n[0041] 查询子模块,用于通过查找所述外部地址映射表得到所述内存访问命令中所述异地节点的访问内存的起始地址和所述异地节点的标识,并根据所述异地节点访问的内存地址计算至所述内存地址所在的所述内存的起始地址的偏移量。\n[0042] 在第三种可能的实现方式中,结合第三方面具体包括,所述设备还包括:\n[0043] 所述分析模块,还用于当本地内存使用率超过阈值时,通过解析所述内存访问命令得到可提供空余内存空间的异地节点;\n[0044] 所述通信模块,还用于向所述异地节点发送内存请求消息,请求所述异地内存节点可提供的内存;\n[0045] 所述通信模块,还用于接收所述异地节点的内存请求响应消息,所述响应消息包含异地内存节点可提供的内存的起始地址和结束地址;\n[0046] 写入模块,用于将所述异地节点的标识和异地节点的内存起始地址写入所述外部地址映射表。\n[0047] 在第四种可能的实现方式中,结合第三方面具体包括,所述响应消息,包括:所述异地节点地址,请求节点地址,请求数据和响应消息序列号。\n[0048] 在第五种可能的实现方式中,结合第三方面具体包括,所述外部地址映射表包括:\n本地起始地址,本地结束地址,异地起始地址及异地节点的标识。\n[0049] 在第六种可能的实现方式中,结合第三方面具体包括,所述通信模块通过互联网络将至少一个请求节点与至少一个所述异地节点进行互联,构成内存网络。\n[0050] 第四方面,通过一种异地节点,包括:\n[0051] 分析模块,用于接收并解析所述内存请求消息,通过解析所述内存请求消息获取异地内存访问地址,使得根据所述异地内存访问地址获取请求数据;\n[0052] 封装模块,用于封装所述分析模块获取的所述请求数据为响应消息,并通过通信模块发送至所述请求节点。\n[0053] 在第一种可能的实现方式中,结合第四方面具体包括,所述内存请求消息,包括:\n所述异地节点的地址,所述请求节点的地址,所述异地节点的内存段的起始地址,内存地址偏移量和所述请求消息的序列号。\n[0054] 在第二种可能的实现方式中,结合第四方面或第一种可能的实现方式具体包括,所述分析模块,具体用于通过解析所述内存请求消息得到所述请求节点请求所需内存段的起始地址以及内存地址偏移量,并根据所述内存段的起始地址和所述内存地址偏移量获取所述请求节点所需的内存数据。\n[0055] 第五方面,提供一种集群通信系统,包括:至少一个请求节点和至少一个异地节点,其中,\n[0056] 所述至少一个请求节点为第三方面或第三方面中任一可能的实现方式中任一所述的请求节点,所述至少一个异地节点为第四方面或第四方面中任一种可能的实现方式中任一所述的异地节点;\n[0057] 其中,当所述至少一个请求节点在作为请求节点时,也可以作为其他异地节点的请求节点;\n[0058] 或者,\n[0059] 当所述至少一个异地节点在作为异地节点时,也可以作为其他异地节点的请求节点。\n[0060] 在第一种可能的实现方式中,结合第五方面具体包括,所述至少一个请求节点通过内部的通信模块与所述至少一个异地节点进行互联构成内存网络,以便在所述内存网络中进行集群通信系统范围的数据传输。\n[0061] 本发明实施例提供的内存访问方法、设备和系统,通过判断接收的内存访存命令的访存地址是否为异地节点的异地内存地址,若是异地节点的异地内存地址,则根据外部地址映射表查询接收的内存访存命令的异地内存地址所对应的的参数消息,进而能够从该异地节点获取部分内存数据以满足本地内存的数据需求,从而解决了集群系统中内存资源的分配问题,并提高了集群内部通信效率。\n附图说明\n[0062] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。\n[0063] 图1为本发明实施例提供的一种内存访问方法的流程示意图;\n[0064] 图2为本发明实施例提供的一种内存请求消息的结构示意图;\n[0065] 图3为本发明实施例提供的另一种内存访问方法的流程示意图;\n[0066] 图4为本发明实施例提供的一种响应消息的结构示意图;\n[0067] 图5为本发明实施例提供的又一种内存访问方法的流程示意图;\n[0068] 图6为本发明实施例提供的一种请求节点的结构示意图;\n[0069] 图7为本发明实施例提供的另一种请求节点的结构示意图;\n[0070] 图8为本发明实施例提供的又一种请求节点的结构示意图;\n[0071] 图9为本发明实施例提供的一种异地节点的结构示意图;\n[0072] 图10为本发明实施例提供的一种集群通信系统的结构示意图;\n[0073] 图11为本发明实施例提供的一种通信模块的结构示意图;\n[0074] 图12为本发明实施例提供的一种通信模块的内部功能结构示意图。\n具体实施方式\n[0075] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。\n[0076] 本发明实施例提供了一种内存访问方法,参照图1所示,具体步骤如下所示:\n[0077] 101、请求节点通过接收内存访问命令,判断该内存访问命令的访存地址是否为异地内存地址。\n[0078] 具体的,在请求节点通过接收访问内存命令之前,内存网络监控本地请求节点的内存利用率,若该请求节点的内存利用率超过预定阈值,通过接收的内存访问命令的访存地址判断是否为异地节点的访存地址,其中内存访问命令由本地请求节点的中央处理器CPU(Central Process Unit)发送,该内存访问命令用于指示请求节点中的内存控制器MC(Memory Controller)判断该内存访问命令中的访存地址为本地地址或是异地地址。\n[0079] 这里请求节点通过接收到的内存访问命令能够判断该内存访问命令的访存地址是本地内存地址或是异地内存地址,若是本地内存访问,请求节点可以直接通过内存系统获取访问本地内存数据;若是异地节点,请求节点能够根据外部地址映射表查找异地节点的内存信息。\n[0080] 其中,内存访问命令在计算机系统架构中请求节点部分一直会收到内存访问命令,在收到的内存访问命令中主要由本地内存和异地节点发送的内存访问消息组成,操作系统通过监测本地内存空间,以及接收异地节点的内存访问命令判断本地的请求节点是否需要从异地节点获取异地节点空闲的内存空间,以便当本地内存空间不足时通过异地节点提供异地空闲的内存空间供本地请求节点使用。\n[0081] 102、如果内存访问命令的访存地址为异地内存地址,则根据外部地址映射表查找外部地址映射表中访存地址对应的参数信息,获得访存地址所在的异地节点的标识。\n[0082] 其中,外部地址映射表存储有异地节点内存地址及异地节点的标识。\n[0083] 这里请求节点会根据查找本地的外部地址映射表,得到内存访问命令的访存地址的异地起始内存的起始地址start,内存地址偏移量offset(要访问的地址在该起始地址内存段的偏移)和异地节点的属主标识ID(IDentity,ID),其中,根据不同的网络环境外部地址映射表中的属主ID还可以为异地节点的网际互连协议IP(Internet Protocol)地址。\n[0084] 其中,在本发明实施例提供的请求节点中可以以计算机为例,这里外部地址映射表存储于计算机的内存控制器中(Memory Controller,MC)。\n[0085] 103、请求节点根据参数信息生成内存请求消息,并将内存请求消息发送至异地节点,以便通知异地节点根据内存请求消息访问异地内存获取请求数据完成内存访问并生成响应消息。\n[0086] 其中,该响应消息中包含内存访问命令所请求的请求数据。\n[0087] 这里请求节点通过查询外部地址映射表获取到异地节点能够提供的内存空间,此时根据异地节点的内存起始地址和属主标识发送内存请求消息,使得异地节点能够通过该内存请求消息获取请求的数据。\n[0088] 其中内存请求消息结构如图2所示,包含了内存请求消息将要发送至的目的地址dst,即异地节点的地址,以及请求节点的地址src,异地节点的内存段起始地址、内存地址偏移量和请求消息的序号。\n[0089] 104、请求节点通过通信模块接收并分析该响应消息得到请求数据。\n[0090] 这里请求节点在通过通信模块接收响应消息后,根据分析该响应消息获取请求数据。\n[0091] 本发明实施例提供的内存访问方法,通过判断接收的内存访存命令的访存地址是否为异地节点的异地内存地址,若是异地节点的异地内存地址,则根据外部地址映射表查询接收的内存访存命令的异地内存地址所对应的参数消息,进而能够从该异地节点获取部分内存数据以满足本地内存的数据需求,从而解决了集群系统中内存资源的分配问题,并提高了集群内部通信效率。\n[0092] 本发明实施例提供了一种内存访问方法,参照图3所示,具体步骤如下所示:\n[0093] 201、异地节点接收并解析内存请求消息,通过解析该内存请求消息获取异地内存访问地址,使得根据该异地内存访问地址获取请求数据。\n[0094] 这里异地节点通过通信模块接收到请求节点发送的内存请求消息后,对该内存请求消息进行解析,得到内存请求消息中的请求节点内存不足所需的内存段访问地址。\n[0095] 其中,异地节点通过内存请求消息中获取请求节点所需的内存访问地址,其中异地节点得到请求节点的地址src,内存段的起始地址和内存地址偏移量,并根据起始地址和内存地址偏移量计算得到请求节点的请求数据的内存地址从而得到请求数据。\n[0096] 202、异地节点封装该请求数据为响应消息,并通过通信模块发送至该请求节点。\n[0097] 这里异地节点通过将步骤201中计算得到的请求数据封装为响应消息,并将该响应消息通过通信模块发送至请求节点。\n[0098] 其中,异地节点向请求节点发送的响应消息结构如图4所示,响应消息包括目的地址dst(即请求节点的地址)、源地址src(即异地节点的地址)、序号(对应于请求节点发送的请求消息序号的响应消息的序号)和内存数据\n[0099] 本发明实施例提供的内存访问方法,通过判断接收的内存访存命令的访存地址是否为异地节点的异地内存地址,若是异地节点的异地内存地址,则根据外部地址映射表查询接收的内存访存命令的异地内存地址所对应的参数消息,进而能够从该异地节点获取部分内存数据以满足本地内存的数据需求,从而解决了集群系统中内存资源的分配问题,并提高了集群内部通信效率。\n[0100] 具体的,以下结合具体的实施例进行说明。本发明实施例提到的请求节点与异地节点在具体实施过程中设备结构相同,可以为移动通信设备中任一终端,例如私人计算机PC,笔记本电脑等具备内存的智能终端,其中由于内存模块上扩展了通信模块,使得在集群节点间的内存系统通过内存模块中的通信模块和下层的网络互连,构成内存网络,以便集群节点间能够在本地内存不足时,通过内存网络使得本地节点对异地节点实现内存“借用”。\n[0101] 可以在图1和图3的实施例的基础上,参照图5所示,本发明的实施例提供了一种内存访问方法,参照图5所示,为请求节点通过查询外部内存地址映射表请求异地节点内存数据的过程,具体步骤如下:\n[0102] 301、请求节点通过接收内存访问命令,判断该内存访问命令的访存地址是否为异地内存地址。\n[0103] 进一步的,请求节点根据内存访问命令中的访问地址查询外部地址映射表中的本地起始地址;\n[0104] 如果在外部地址映射表中查询到与访问地址对应的异地节点的标识,则确定内存访问命令的访问地址为异地节点的内存地址;否则不是异地节点的内存地址。\n[0105] 具体的,在请求节点通过接收访问内存命令之前,内存网络监控本地请求节点的内存利用率,若该请求节点的内存利用率超过预定阈值,通过接收的内存访问命令的访存地址判断是否为异地节点的访存地址,其中内存访问命令由本地请求节点的中央处理器CPU(Central Process Unit)发送,该内存访问命令用于指示请求节点中的内存控制器MC(Memory Controller)判断该内存访问命令中的访存地址为本地地址或是异地地址。\n[0106] 这里请求节点通过接收到的内存访问命令能够判断该内存访问命令的访存地址是本地内存地址或是异地内存地址,若是本地内存访问,请求节点可以直接通过内存系统获取访问本地内存数据;若是异地节点,请求节点能够根据外部地址映射表查找异地节点的内存信息。\n[0107] 其中,内存访问消息在计算机系统架构中请求节点侧一直会收到内存访问命令,该内存访问命令中主要由本地内存和异地节点发送的内存访问消息组成,操作系统通过监测本地内存空间,以及接收异地节点的内存访问命令判断本地的请求节点是否需要从异地节点获取异地节点空闲的内存空间。\n[0108] 302、如果内存访问命令的访存地址为异地内存地址,则根据外部地址映射表查找外部地址映射表中访存地址对应的参数信息,获得访存地址所在的异地节点的标识。\n[0109] 进一步的,通过查找外部地址映射表得到内存访问命令中异地节点的访问内存的起始地址和异地节点的标识,并根据异地节点访问的内存地址计算至内存地址所在的内存的起始地址的偏移量。\n[0110] 这里请求节点会根据查找本地的外部地址映射表,得到内存访问命令的访存地址的异地起始内存的起始地址start,内存地址偏移量offset(要访问的地址在该起始地址内存段的偏移)和异地节点的属主标识ID(IDentity,ID),其中,根据不同的网络环境外部地址映射表中的属主ID还可以为异地节点的网际互连协议IP(Internet Protocol)地址。\n[0111] 其中,在本发明实施例提供的请求节点中可以以计算机为例,这里外部地址映射表存储于计算机的内存控制器中(Memory Controller,MC)。\n[0112] 具体查询外部地址映射表如下,若异地节点要访问内存地址为6G(0x180000000)处的数据,则请求节点通过查找表1的外部地址映射表,得到异地起始地址为3G(0xC0000000),偏移量为0,属主ID为3的异地节点。\n[0113] 表1\n[0114]\n本地起始地址 本地结束地址 异地起始地址 属主id\n0x100000000 0x17FFFFFFF 0x80000000 2\n0x180000000 0x1BFFFFFFF 0xC0000000 3\n[0115] 303、请求节点根据该参数信息生成内存请求消息,并将该内存请求消息发送至异地节点,以便该异地节点根据内存请求消息访问异地内存获取请求数据并生成响应消息。\n[0116] 这里请求节点通过查询外部地址映射表获取到异地节点能够提供的内存空间,此时根据请求节点请求的异地节点中内存段的起始地址和属主标识发送内存请求消息,使得异地节点能够通过该内存请求消息获取请求的数据。\n[0117] 304、异地节点接收并解析该内存请求消息,通过解析该内存请求消息获取异地内存访问地址,使得根据该异地内存访问地址获取请求数据。\n[0118] 这里异地节点通过通信模块接收到请求节点发送的内存请求消息后,对该内存请求消息进行解析,得到内存请求消息中的请求节点内存不足所需的内存访问地址。\n[0119] 其中,异地节点通过内存请求消息中获取请求节点所需的内存访问地址,其中异地节点得到请求节点的地址src,内存段的起始地址和内存地址偏移量,并根据起始地址和内存地址偏移量计算得到请求节点的请求数据的内存地址从而得到请求数据。\n[0120] 305、异地节点封装该请求数据为响应消息,并通过通信模块发送至该请求节点。\n[0121] 这里异地节点通过将步骤304中计算得到的请求数据封装为响应消息,并将该响应消息通过通信模块发送至请求节点。\n[0122] 306、请求节点通过通信模块接收并分析该响应消息得到请求数据。\n[0123] 这里请求节点在通过通信模块接收响应消息后,根据分析该响应消息获取请求数据。\n[0124] 具体示例如表2和表3所示,这里表2和表3为外部地址映射表,其中表3为更新后的外部地址映射表。在外部地址映射表中包括本地起始地址、本地结束地址、异地起始地址和属主ID。\n[0125] 这里请求节点在请求内存数据过程中的内存参数信息为表2和表3中的参数变换所示,例如,集群操作系统间通过互相协商,确定异地节点B1,B2......Bn,为请求节点起始地址分别为C1,C2......Cn提供大小为S1,S2......Sn的地址空间,并分别映射到请求节点本地的起始地址M1,M2......Mn。其中,提供地址空间量的大小Si和提供内存空间的节点以及节点数目n均由集群操作系统协商确定。具体如表2和表3所示,请求节点通过查询表2将分配的内存空间更新至如表3所示。\n[0126] 其中,表2表示为:\n[0127]\n[0128] 通过集群操作系统协商异地节点为请求节点分配部分内存后表2更新后为表3,其中,其中表3表示为:\n[0129]\n[0130]\n[0131] 这里由于本地结束地址在更新后由于在计数方面是由0开始计数,故在计算地址时通过M1+S1-1确定本地结束地址的实际数值。\n[0132] 其中,具体的外部地址映射表更新如表4和表5所示,若当前请求节点的外部内存映射表如表4所示,通过集群操作系统间的互相协商,获得了ID为3的节点的起始地址为3G的1G大小空间,更新后,如表5所示。\n[0133] 表4\n[0134]\n本地起始地址 本地结束地址 异地起始地址 属主id\n0x100000000 0x17FFFFFFF 0x80000000 2\n[0135] 更新后,表5\n[0136]\n本地起始地址 本地结束地址 异地起始地址 属主id\n0x100000000 0x17FFFFFFF 0x80000000 2\n0x180000000 0x1BFFFFFFF 0xC0000000 3\n[0137] 可选的,在请求节点内存空间不足时,存在以下请求过程:\n[0138] a、当本地内存使用率超过阈值时,请求节点通过解析内存访问命令得到可提供空余内存空间的异地节点。\n[0139] 在请求节点向异地节点发送请求消息之前,计算机网络将通过监控发现请求节点中的内存空间不足,需要通过“借用”所在的计算机集群中其他节点的内存空间满足自身运行使用的需求。\n[0140] b、请求节点向异地节点发送内存请求消息,请求异地内存节点可提供的内存。\n[0141] 这里当请求节点通过解析内存访问消息获知存在某一异地节点具备空余内存能够提供内存调用时,请求节点此时向异地节点发送内存请求消息,以便异地节点通过该请求消息提供内存空间。具体步骤可以参照步骤303~306。\n[0142] c、请求节点接收异地节点的内存请求响应消息。\n[0143] 其中,响应消息包含异地内存节点可提供的内存的起始地址和结束地址。\n[0144] d、请求节点将异地节点的标识和异地节点的内存起始地址写入外部地址映射表。\n[0145] 这里步骤d具体参照步骤306所示。\n[0146] 本发明实施例提供的内存访问方法,通过判断接收的内存访问命令的访存地址是否为异地节点的内存地址,若是异地节点的内存地址,则根据外部地址映射表查询访存地址映射的参数消息,进而异地节点能够根据参数信息获取请求数据以满足本地内存的数据需求,从而解决了集群系统中内存资源的分配问题,并提高了集群内部通信效率。\n[0147] 本发明实施例提供一种请求节点4,该请求节点具体可以为移动通讯网络中任一种移动智能通讯终端,如手机、平板电脑、私人计算机PC等在移动通讯网络中任一能够实现内存访问方法的设备,在本发明的实施例中对请求节点的具体形式不做具体限制,以可以实现本发明的实施例所提供的上述任一内存访问方法为准,参照图6所示,包括:\n[0148] 判断模块41,用于通过接收内存访问命令,判断该内存访问命令的访存地址是否为异地内存地址;\n[0149] 查询模块42,用于如果内存访问命令的访存地址为异地内存地址,则根据外部地址映射表查找外部地址映射表中访存地址对应的参数信息,获得访存地址所在的异地节点的标识;该外部地址映射表存储有异地节点内存地址及异地节点的标识;\n[0150] 通信模块43,用于根据参数信息生成内存请求消息,并将内存请求消息发送至异地节点,以便通知异地节点根据内存请求消息访问异地内存获取请求数据完成内存访问并生成响应消息,该响应消息中包含内存访问命令所请求的请求数据;\n[0151] 分析模块44,用于通过该通信模块接收并分析该响应消息得到请求数据。\n[0152] 本发明实施例提供的请求节点,通过判断接收的内存访存命令的访存地址是否为异地节点的异地内存地址,若是异地节点的异地内存地址,则根据外部地址映射表查询接收的内存访存命令的异地内存地址所对应的参数消息,进而能够从该异地节点获取部分内存数据以满足本地内存的数据需求,从而解决了集群系统中内存资源的分配问题,并提高了集群内部通信效率。\n[0153] 可选的,参照图7所示,判断模块41包括:\n[0154] 查询子模块411,用于根据内存访问命令中的访问地址查询外部地址映射表中的本地起始地址;\n[0155] 判断子模块412,用于如果在外部地址映射表中查询到与访问地址对应的异地节点的标识,则确定内存访问命令的访问地址为异地节点的内存地址;否则不是异地节点的内存地址。\n[0156] 进一步的,参照图7所示,判断模块41还包括:\n[0157] 查询子模块411,用于通过查找外部地址映射表得到内存访问命令中异地节点的访问内存的起始地址和异地节点的标识,并根据异地节点访问的内存地址计算至内存地址所在的内存的起始地址的偏移量。\n[0158] 可选的,参照图8所示,请求节点4还包括:\n[0159] 分析模块44,还用于当本地内存使用率超过阈值时,通过解析内存访问命令得到可提供空余内存空间的异地节点;\n[0160] 通信模块43,还用于向异地节点发送内存请求消息,请求异地内存节点可提供的内存;\n[0161] 通信模块43,还用于接收异地节点的内存请求响应消息,该响应消息包含异地内存节点可提供的内存的起始地址和结束地址;\n[0162] 写入模块45,用于将异地节点的标识和异地节点的内存起始地址写入外部地址映射表。\n[0163] 可选的,响应消息,包括:异地节点地址,请求节点地址,请求数据和响应消息序列号。\n[0164] 可选的,外部地址映射表包括:本地起始地址,本地结束地址,异地起始地址及异地节点的标识。\n[0165] 可选的,通信模块通过互联网络将至少一个请求节点与至少一个异地节点进行互联,构成内存网络。\n[0166] 本发明实施例提供的请求节点,通过接收内存访问命令,并通过判断接收的内存访问命令的访存地址是否为异地节点的内存地址,若是异地节点的内存地址,则根据外部地址映射表查询该访存地址对应的参数消息,进而能够根据该参数信息,从异地节点获取请求的数据,从而解决了集群系统中内存资源的分配问题,并提高了集群内部通信效率。\n[0167] 本发明实施例提供一种异地节点5,该异地节点具体可以为移动通讯网络中任一种移动智能通讯终端,如手机、平板电脑、私人计算机PC等在移动通讯网络中任一能够实现内存访问方法的设备,在本发明的实施例中对异地节点的具体形式不做具体限制,以可以实现本发明的实施例所提供的上述任一内存访问方法为准,参照图9所示,包括:\n[0168] 分析模块51,用于接收并解析内存请求消息,通过解析该内存请求消息获取异地内存访问地址,使得根据该异地内存访问地址获取请求数据;\n[0169] 封装模块52,还用于封装该分析模块获取的请求数据为响应消息,并通过通信模块发送至请求节点。\n[0170] 本发明实施例提供的异地节点,通过判断接收的内存访存命令的访存地址是否为异地节点的异地内存地址,若是异地节点的异地内存地址,则根据外部地址映射表查询接收的内存访存命令的异地内存地址所对应的参数消息,进而能够从该异地节点获取部分内存数据以满足本地内存的数据需求,从而解决了集群系统中内存资源的分配问题,并提高了集群内部通信效率。\n[0171] 可选的,内存请求消息,包括:异地节点的地址,请求节点的地址,异地节点的内存段的起始地址,内存地址偏移量和请求消息的序列号。\n[0172] 进一步,可选的,分析模块51具体用于:\n[0173] 通过解析内存请求消息得到请求节点请求所需内存段的起始地址以及内存地址偏移量,并根据内存段的起始地址和内存地址偏移量获取请求节点所需的内存数据。\n[0174] 本发明实施例提供的异地节点,通过判断接收的访问内存命令的访存地址是否为异地节点的内存地址,若是异地节点的内存地址,则根据外部地址映射表查询访存地址对应参数消息,进而能够根据参数消息获取请求数据,从而解决了集群系统中内存资源的分配问题,并提高了集群内部通信效率。\n[0175] 本发明实施例提供一种集群通信系统6,参照图10所示,包括:至少一个请求节点\n61和至少一个异地节点62,其中,\n[0176] 该至少一个请求节点61为图6~图8所示的请求节点,该至少一个异地节点62为图\n9所示的异地节点。\n[0177] 其中,当至少一个请求节点在作为请求节点时,也可以作为其他异地节点的请求节点;\n[0178] 或者,\n[0179] 当至少一个异地节点在作为异地节点时,也可以作为其他异地节点的请求节点。\n[0180] 进一步的,至少一个请求节点通过内部的通信模块与至少一个异地节点进行互联构成内存网络,以便在该内存网络中进行集群通信系统范围的数据传输。\n[0181] 本发明扩展了传统的内存模块,在传统的内存模块的基础上,增加了网络通信逻辑,即本发明实施例提到的通信模块,以实现内存的互联通信,具体如图11所示。其中通信模块的内部功能如图12所示,这里通信模块中包括发送缓存、接收缓存、封包逻辑、解包逻辑以及发送和接收队列。\n[0182] 本发明实施例适用于关联计算机系统多种网络环境,例如以太网,无线宽带InfiniBand架构(InfiniBand架构是一种支持多并发链接的“转换线缆”技术)等集群大规模计算机系统。其中,通过增加的网络通信逻辑,实现了集群节点间的内存互相访问,这里通过集群节点间的内存互相访问实现了节点间的内存空间借用。\n[0183] 本发明实施例提供的集群通信系统,通过判断接收的内存访存命令的访存地址是否为异地节点的异地内存地址,若是异地节点的异地内存地址,则根据外部地址映射表查询接收的内存访存命令的异地内存地址所对应的参数消息,进而能够从该异地节点获取部分内存数据以满足本地内存的数据需求,从而解决了集群系统中内存资源的分配问题,并提高了集群内部通信效率。\n[0184] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
法律信息
- 2018-01-23
- 2015-01-14
实质审查的生效
IPC(主分类): G06F 12/02
专利申请号: 201310247458.2
申请日: 2013.06.20
- 2014-12-24
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2012-01-11
|
2011-07-05
| | |
2
| |
2011-03-30
|
2009-08-14
| | |
3
| |
2009-07-01
|
2007-12-26
| | |
4
| |
2006-10-25
|
2006-04-19
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |