一种访问共享内存的方法和装置制造方法

文档序号:7775151阅读:195来源:国知局
一种访问共享内存的方法和装置制造方法
【专利摘要】本发明公开了一种访问共享内存的方法和装置,属于计算机领域。该方法包括:获取目的节点和所述目的节点对应的共享内存的标识,所述目的节点为共享内存映射表中的一个节点的标识对应的节点,所述共享内存映射表用于存储节点的标识与共享内存的标识的对应关系;调用远程直接内存访问RDMA的应用程序编程接口API;通过所述API对所述目的节点上的所述共享内存的标识对应的共享内存进行读写操作。该装置包括:第一获取模块、调用模块和访问模块。本发明中访问节点可以直接从共享内存映射表中获取目的节点的标识和共享内存的标识,简化了访问共享内存的处理过程;并且,通过调用API对共享内存进行读写操作,不需要消耗系统资源,提高了共享内存的读写性能。
【专利说明】一种访问共享内存的方法和装置
【技术领域】
[0001]本发明涉及计算机领域,特别涉及一种访问共享内存的方法和装置。
【背景技术】
[0002]在服务器集群中,共享内存是指可以被服务器集群中的不同节点服务器访问的大容量内存,当节点服务器本地内存不足时,节点服务器可以访问共享内存,对共享内存进行读写操作。
[0003]现有技术中提供了一种访问共享内存的方法,可以为:在计算机集群中,选取一个代理服务器,代理服务器对集群中的共享内存进行管理。当集群中某个节点服务器的内存不足时,节点服务器发送调用请求给代理服务器,该调用请求携带节点服务器的标识;代理服务器接收节点服务器发送的调用请求,并根据该调用请求为节点服务器分配共享内存,发送分配的共享内存的标识给节点服务器。节点服务器根据共享内存的标识远程调用共享内存;并根据读写算法对该调用的共享内存进行读写操作。
[0004]在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
[0005]当节点服务器本地内存不足时,需要发送请求给代理服务器,由代理服务器分配共享内存,操作复杂;并且,节点服务器远程调用共享内存的过程消耗大量系统资源,降低系统性能。

【发明内容】

[0006]为了解决现有技术的问题,本发明提供了一种访问共享内存的方法和装置。所述技术方案如下:
[0007]第一方面,本发明提供了一种访问共享内存的方法,所述方法包括:
[0008]获取目的节点和所述目的节点对应的共享内存的标识,所述目的节点为共享内存映射表中的一个节点的标识对应的节点,所述共享内存映射表用于存储节点的标识与共享内存的标识的对应关系;
[0009]调用远程直接内存访问RDMA的应用程序编程接口 API ;
[0010]通过所述API对所述目的节点上的所述共享内存的标识对应的共享内存进行读
写操作。
[0011]结合第一方面,在第一方面的第一种可能的实现方式中,所述通过所述API对所述目的节点上的所述共享内存的标识对应的共享内存进行读写操作,包括:
[0012]通过所述API发送所述共享内存的标识和待写入的数据给所述目的节点,使所述目的节点根据所述共享内存的标识将所述待写入的数据写入所述共享内存的标识对应的共享内存中。
[0013]结合第一方面,在第一方面的第二种可能的实现方式中,所述通过所述API对所述目的节点上的所述共享内存的标识对应的共享内存进行读写操作,包括:
[0014]通过所述API发送所述共享内存的标识和待读出的数据的标识给所述目的节点,使所述目的节点根据所述共享内存的标识和所述待读出的数据的标识从所述共享内存的标识对应的共享内存中获取所述待读出的数据;
[0015]接收所述目的节点发送的所述待读出的数据。
[0016]结合第一方面,在第一方面的第三种可能的实现方式中,所述获取目的节点和所述目的节点对应的共享内存的标识,包括:
[0017]获取所述共享内存映射表;
[0018]从所述共享内存映射表中选择一个节点的标识作为所述目的节点的标识;
[0019]根据所述目的节点的标识获取所述目的节点;
[0020]根据所述目的节点的标识从所述共享内存映射表中获取与所述目的节点的标识对应的所述共享内存的标识。
[0021]结合第一方面,在第一方面的第四种可能的实现方式中,所述获取目的节点和所述目的节点对应的共享内存的标识之前,所述方法还包括:
[0022]将自身节点的标识和所述自身节点的标识对应的共享内存的标识的对应关系保存在所述共享内存映射表中。
[0023]结合第一方面,在第一方面的第五种可能的实现方式中,所述获取目的节点和所述目的节点对应的共享内存的标识之前,所述方法还包括:
[0024]发送注册请求给代理节点,所述注册请求携带自身节点的标识和所述自身节点的标识对应的共享内存的标识,使所述代理节点将所述自身节点的标识和所述自身节点的标识对应的共孚内存的标识的对应关系保存在所述共孚内存映射表中。
[0025]结合第一方面的第三种可能,在第一方面的第六种可能的实现方式中,所述获取所述共享内存映射表,包括:
[0026]从本地已存储的数据库中获取所述共享内存映射表;或者,
[0027]发送第一获取请求给代理节点,所述第一获取请求携带自身节点的标识;接收所述代理节点根据所述自身节点的标识发送的所述共享内存映射表。
[0028]结合第一方面的第六种可能,在第一方面的第七种可能的实现方式中,所述发送第一获取请求给代理节点之后,所述方法还包括:
[0029]判断在第一预设时间内是否接收到所述代理节点发送的所述共享内存映射表;
[0030]如果否,发送第二获取请求给备份代理节点,所述第二获取请求携带所述自身节点的标识,所述备份代理节点为所述代理节点的备份节点;
[0031]接收所述备份代理节点根据所述自身节点的标识发送的所述共享内存映射表。
[0032]结合第一方面的第三种可能,在第一方面的第八种可能的实现方式中,所述方法还包括:
[0033]每隔第二预设时间获取所述共享内存映射表;
[0034]将本地已存储的所述共享内存映射表更新为所述获取的共享内存映射表。
[0035]第二方面,本发明提供了一种访问共享内存的装置,所述装置包括:
[0036]第一获取模块,用于获取目的节点和所述目的节点对应的共享内存的标识,所述目的节点为共享内存映射表中的一个节点的标识对应的节点,所述共享内存映射表用于存储节点的标识与共孚内存的标识的对应关系;
[0037]调用模块,用于调用远程直接内存访问RDMA的应用程序编程接口 API ;[0038]访问模块,用于通过所述API对所述目的节点上的所述共享内存的标识对应的共孚内存进行读与操作。
[0039]结合第二方面,在第二方面的第一种可能的实现方式中,所述访问模块,包括:
[0040]第一发送单元,用于通过所述API发送所述共享内存的标识和待写入的数据给所述目的节点,使所述目的节点根据所述共享内存的标识将所述待写入的数据写入所述共享内存的标识对应的共享内存中。
[0041]结合第二方面,在第二方面的第二种可能的实现方式中,所述访问模块,包括:
[0042]第二发送单元,用于通过所述API发送所述共享内存的标识和待读出的数据的标识给所述目的节点,使所述目的节点根据所述共享内存的标识和所述待读出的数据的标识从所述共享内存的标识对应的共享内存中获取所述待读出的数据;
[0043]接收单元,用于接收所述目的节点发送的所述待读出的数据。
[0044]结合第二方面,在第二方面的第三种可能的实现方式中,所述第一获取模块,包括:
[0045]第一获取单元,用于获取所述共享内存映射表;
[0046]选择单元,用于从所述共享内存映射表中选择一个节点的标识作为所述目的节点的标识;
[0047]第二获取单元,用于根据所述目的节点的标识获取所述目的节点;
[0048]第三获取单元,用于根据所述目的节点的标识从所述共享内存映射表中获取与所述目的节点的标识对应的所述共享内存的标识。
[0049]结合第二方面,在第二方面的第四种可能的实现方式中,所述装置还包括:
[0050]保存模块,用于将自身节点的标识和所述自身节点的标识对应的共享内存的标识的对应关系保存在所述共享内存映射表中。
[0051]结合第二方面,在第二方面的第五种可能的实现方式中,所述装置还包括:
[0052]第一发送模块,用于发送注册请求给代理节点,所述注册请求携带自身节点的标识和所述自身节点的标识对应的共享内存的标识,使所述代理节点将所述自身节点的标识和所述自身节点的标识对应的共孚内存的标识的对应关系保存在所述共孚内存映射表中。
[0053]结合第二方面的第三种可能,在第二方面的第六种可能的实现方式中,所述第一获取单元,用于从本地已存储的数据库中获取所述共享内存映射表;或者,所述第一获取单元,用于发送第一获取请求给代理节点,所述第一获取请求携带自身节点的标识;接收所述代理节点根据所述自身节点的标识发送的所述共享内存映射表。
[0054]结合第二方面的第六种可能,在第二方面的第七种可能的实现方式中,所述装置还包括:
[0055]判断模块,用于判断在第一预设时间内是否接收到所述代理节点发送的所述共享内存映射表;
[0056]如果否,第二发送模块,用于发送第二获取请求给备份代理节点,所述第二获取请求携带所述自身节点的标识,所述备份代理节点为所述代理节点的备份节点;
[0057]接收模块,用于接收所述备份代理节点根据所述自身节点的标识发送的所述共享内存映射表。
[0058]结合第二方面的第三种可能,在第二方面的第八种可能的实现方式中,所述装置还包括:
[0059]第二获取模块,用于每隔第二预设时间获取所述共享内存映射表;
[0060]更新模块,用于将本地已存储的所述共享内存映射表更新为所述获取的共享内存映射表。
[0061]第三方面,本发明提供了一种访问共享内存的装置,所述装置包括:存储器和处理器,所述存储器存储程序代码,所述处理器用于调用所述存储器中的程序代码执行如第一方面提供的访问共享内存的方法。
[0062]在本发明实施例中,访问节点从共享内存映射表中获取目的节点的标识和共享内存的标识,不需要代理节点分配共享内存,简化了访问共享内存的处理过程;并且,访问节点通过调用API对共享内存进行读写操作,不需要消耗系统资源,提高了共享内存的读写性能。
【专利附图】

【附图说明】
[0063]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0064]图1是本发明实施例1提供的一种访问共享内存的方法流程图;
[0065]图2是本发明实施例2提供的一种访问共享内存的方法流程图;
[0066]图3是本发明实施例3提供的一种访问共享内存的装置结构示意图;
[0067]图4是本发明实施例4提供的一种访问共享内存的另一装置结构示意图。
【具体实施方式】
[0068]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0069]实施例1
[0070]本发明实施例提供了 一种访问共享内存的方法。参见图1,其中,该方法包括:
[0071]101:获取目的节点和目的节点对应的共享内存的标识,目的节点为共享内存映射表中的一个节点的标识对应的节点,共享内存映射表用于存储节点的标识与共享内存的标识的对应关系;
[0072]102:调用 RDMA (Remote Direct Memory Access,远程直接内存访问)的 API(Application Programming Interface,应用程序编程接口);
[0073]103:通过API对目的节点上的共享内存的标识对应的共享内存进行读写操作。
[0074]在本发明实施例中,访问节点从共享内存映射表中获取目的节点的标识和共享内存的标识,不需要代理节点分配共享内存,简化了访问共享内存的处理过程;并且,访问节点通过调用API对共享内存进行读写操作,不需要消耗系统资源,提高了共享内存的读写性能。
[0075]实施例2
[0076]本发明实施例提供了一种访问共享内存的方法。参见图2,其中,该方法包括:[0077]201:访问节点将节点的标识和共孚内存的标识的对应关系保存在共孚内存映射表中;
[0078]其中,访问节点为服务器集群中的任一节点,用于访问服务器集群中目的节点的共享内存的节点;目的节点为共享内存映射表一个节点的标识对应的节点,目的节点为被访问节点。
[0079]其中,共享内存映射表位于共享内存管理组件中;共享内存管理组件用于对共享内存进行管理,且一个服务器集群中存在一个或多个共享内存管理组件。当服务器集群中存在一个共享内存管理组件时,该共享内存管理组件部署在代理节点中,代理节点为服务器集群中任一节点;当服务器集群中存在多个共享内存管理组件时,共享内存管理组件可以部署在服务器集群中包括的每个节点上。
[0080]其中,如果访问节点上没有安装共享内存管理组件,服务器集群中仅代理节点上安装共孚内存管理组件时,访问节点将节点的标识和共孚内存的标识的对应关系保存在共享内存映射表中的操作,可以为:
[0081 ] 访问节点发送注册请求给代理节点,该注册请求携带访问节点的标识和访问节点的标识对应的共享内存的标识,代理节点接收访问节点发送的注册请求,并根据注册请求获取访问节点的标识和共享内存的标识,将访问节点的标识和访问节点的标识对应的共享内存的标识的对应关系保存在共享内存映射表中。
[0082]其中,如果访问节点上安装共享内存管理组件时,访问节点将节点的标识和共享内存的标识的对应关系保存在共享内存映射表中的操作,可以为:
[0083]访问节点发送第一注册请求给本节点的共享内存管理组件,该第一注册请求携带访问节点的标识和访问节点上的共享内存的标识;共享内存管理组件接收访问节点发送的第一注册请求,并根据第一注册请求获取访问节点的标识和共享内存的标识,将访问节点的标识和共孚内存的标识的对应关系保存在共孚内存映射表中。
[0084]其中,将访问节点的标识和共享内存的标识的对应关系保存在共享内存映射表中的操作,可以为:
[0085]将访问节点的标识和共享内存的标识的对应关系编码为64bit数据,64bit数据中包括的高16bit数据为访问节点的标识;64bit数据中包括的低48bit数据为共享内存的标识。
[0086]其中,需要说明的是,注册请求携带访问节点的标识和访问节点的标识对应的共享内存的标识,注册请求中还可以携带共享内存的起始地址和长度。第一注册请求携带节点的标识和节点上的共享内存的标识,第一注册请求中还可以携带共享内存的起始地址和长度。
[0087]其中,服务器集群中每个节点均将节点的标识和节点上的共享内存的标识的对应关系保存在共享内存映射表中。
[0088]其中,在步骤201之前,需要按照服务器集群中各节点的基础设施要求进行系统安装和配置,本发明提供的访问共享内存的方法,依赖于这些配置。
[0089]其中,系统配置包括:RDMA能力的链路层、操作系统层、驱动层和协议栈层。
[0090]其中,RDMA能力的链路层主要由具有RDMA能力的硬件网络接口卡提供;例如,无线带宽 inf iniband 网络接口 HCA (Host Channel Adapter,主机通道适配器)、RoCE (RDMAover Converged Ethernet,基于融合以太网的RDMA)网络接口卡或者iWARP (InternetWide-Area RDMA Protocol,广域因特网上的RDMA协议)网络接口卡。
[0091]其中,操作系统层主要提供操作系统平台。
[0092]其中,驱动层主要针对硬件网络接口卡提供底层设备驱动;例如,可以采用开源OFED (OpenFabrics Enterprise Distribution, OpenFabrics 企业发行版),其中已包含的主流RDMA网络接口卡的驱动。
[0093]其中,协议栈层主要针对RDMA操作,提供协议处理;例如,可以采用开源的OFED发布版。
[0094]202:访问节点获取目的节点和目的节点对应的共享内存的标识;
[0095]其中,目的节点为共享内存映射表中的一个节点的标识对应的节点;共享内存映射表用于存储节点的标识与共孚内存的标识的对应关系。
[0096]其中,当访问节点的内存不足时,访问节点需要访问共享内存。访问节点访问共享内存时,获取需要访问的目的节点和目的节点对应的共享内存的标识。
[0097]其中,访问节点获取目的节点和目的节点对应的共享内存的标识的操作,可以为:
[0098]访问节点获取共享内存映射表,从共享内存映射表中选择一个节点的标识作为目的节点的标识;访问节点根据目的节点的标识获取目的节点;并根据目的节点的标识从共孚内存映射表中获取与目的节点的标识对应的共孚内存的标识。
[0099]其中,需要说明的是,访问节点中实现存储有目的节点的标识和目的节点的对应关系,根据目的节点的标识可以从目的节点的标识和目的节点的对应关系中获取与目的节点的标识对应的目的节点。
[0100]其中,从共享内存映射表中选择一个节点的标识作为目的节点的标识,根据目的节点的标识从共享内存映射表中获取共享内存的标识的操作,可以为:
[0101]从共享内存映射表中选择一个64bit数据,解析64bit数据包括的高16bit数据,得到目的节点的标识,解析64bit数据包括的低48bit数据,得到共享内存的标识。
[0102]其中,如果访问节点上安装共享内存管理组件时,访问节点获取共享内存映射表的操作,可以为:
[0103]从本地已存储的数据库中获取共享内存映射表。
[0104]其中,如果访问节点上没有安装共享内存管理组件,服务器集群中仅代理节点上安装共享内存管理组件时,访问节点获取共享内存映射表的操作,可以为:
[0105]访问节点发送第一获取请求给代理节点,该第一获取请求携带访问节点的标识;代理节点接收访问节点发送的第一获取请求,并根据该第一获取请求获取访问节点的标识;代理节点根据访问节点的标识发送共享内存映射表给访问节点;访问节点接收代理节点根据访问节点的标识发送的共享内存映射表。
[0106]其中,访问节点发送第一获取请求给代理节点之后,启动定时器,并判断在第一预设时间内是否接收到代理节点发送的共享内存映射表;如果在第一预设时间内没有接收到代理节点发送的共享内存映射表时,访问节点发送第二获取请求给备份代理节点,该第二获取请求携带访问节点的标识,备份代理节点接收访问节点发送的第二获取请求,并根据第二获取请求获取访问节点的标识;备份代理节点根据访问节点的标识发送共享内存映射表给访问节点;访问节点接收备份代理节点根据访问节点的标识发送的共享内存映射表。
[0107]进一步地,访问节点在第一预设时间内接收到代理节点发送的共享内存映射表时,访问节点不发送第二获取请求给备份代理节点。
[0108]其中,需要说明的是,备份代理节点为服务器集群中除代理节点之外的任一节点;且备份代理节点为代理节点的备份节点;备份节点中存储有和代理节点相同的数据库,即备份代理节点中存储有和代理节点相同的共享内存映射表。第一预设时间可以根据系统需要进行设置并更改,在本发明实施例中对第一预设时间不作具体限定。
[0109]其中,在本发明实施例中,设置备份代理节点,当代理节点宕机时,可以发送第二获取请求给备份代理节点,以获取共享内存映射表,从而能够保证系统的可靠性。
[0110]203:访问节点调用RDMA的API ;
[0111]其中,RDMA是一种网卡技术,可以通过网络将数据直接传入另一台服务器的某一块内存区域,并且,在数据传输过程中不需要消耗服务器的处理能力。
[0112]204:访问节点通过API对目的节点上的共享内存的标识对应的共享内存进行读写操作;
[0113]其中,访问节点通过API对目的节点上的共享内存的标识对应的共享内存进行写操作,可以为:
[0114]访问节点通过API发送共享内存的标识和待写入的数据给目的节点,目的节点接收访问节点通过API发送的共享内存的标识和待写入的数据,并根据共享内存的标识将待写入的数据写入共享内存的标识对应的共享内存中。
[0115]其中,访问节点通过API对目的节点上的共享内存的标识对应的共享内存进行读操作,可以为:
[0116]访问节点通过API发送共享内存的标识和待读出的数据的标识给目的节点,目的节点接收访问节点发送的共享内存的标识和待读出的数据的标识,并根据共享内存的标识和待读出的数据的标识从共享内存的标识对应的共享内存中获取待读出的数据。目的节点发送待读出的数据给访问节点,访问节点接收目的节点发送的待读出的数据。
[0117]其中,需要说明的是,访问节点通过调用API对共享内存进行读写操作,不需要消耗系统资源,能够降低系统性能,提高共享内存的读写性能。
[0118]其中,访问节点通过API对目的节点上的共享内存的标识对应的共享内存进行读写操作之后,发送响应消息给本节点的共享内存管理组件或者代理节点,该响应消息携带访问节点的标识。
[0119]其中,如果访问节点上没有安装共享内存管理组件时,访问节点通过API对目的节点上的共享内存的标识对应的共享内存进行读写操作之后,访问节点发送第一响应消息给代理节点,该第一响应消息携带目的节点的标识;代理节点接收访问节点发送的第一响应消息,并根据第一响应消息获取目的节点的标识。代理节点根据目的节点的标识将共享内存映射表中目的节点的标识与共享内存的标识的对应关系删除。
[0120]其中,如果访问节点上安装共享内存管理组件时,访问节点通过API对目的节点上的共享内存的标识对应的共享内存进行读写操作之后,访问节点发送第二响应消息给本节点的共享内存管理组件,该第二响应消息携带目的节点的标识;共享内存管理组件接收访问节点发送的第二响应消息,并根据第二响应消息获取目的节点的标识。共享内存管理组件根据目的节点的标识将共享内存映射表中目的节点的标识与共享内存的标识的对应关系删除。
[0121]其中,访问节点通过API对目的节点上的共享内存的标识对应的共享内存进行读写操作之后,将目的节点的标识与共享内存的标识的对应关系删除,能够保证服务器集群中共享内存与共享内存映射表中的共享内存一致。
[0122]205:访问节点每隔第二预设时间获取共享内存映射表,将本地已存储的共享内存映射表更新为获取的共享内存映射表。
[0123]其中,访问节点每隔第二预设时间更新一次共享内存映射表,能够保证数据的一致性,并保证获取共享内存的准确性。
[0124]其中,需要说明的是,访问节点获取共享内存映射表的操作和步骤202中获取共享内存映射表的步骤相同,在此不再赘述。第二预设时间可以根据系统需要进行设置并更改,在本发明实施例中,对第二预设时间不作具体限定。
[0125]在本发明实施例中,访问节点从共享内存映射表中获取目的节点的标识和共享内存的标识,不需要代理节点分配共享内存,简化了访问共享内存的处理过程;并且,访问节点通过调用API对共享内存进行读写操作,不需要消耗系统资源,提高了共享内存的读写性能。
[0126]实施例3
[0127]本发明实施例提供了一种访问共享内存的装置。参见图3,其中,该装置包括:
[0128]第一获取模块301,用于获取目的节点和目的节点对应的共享内存的标识,目的节点为共享内存映射表中的一个节点的标识对应的节点,共享内存映射表用于存储节点的标识与共孚内存的标识的对应关系;
[0129]调用模块302,用于调用远程直接内存访问RDMA的应用程序编程接口 API ;
[0130]访问模块303,用于通过API对目的节点上的共享内存的标识对应的共享内存进行读写操作。
[0131 ] 进一步地,访问模块303,包括:
[0132]第一发送单元,用于通过API发送共享内存的标识和待写入的数据给目的节点,使目的节点根据共享内存的标识将待写入的数据写入共享内存的标识对应的共享内存中。
[0133]进一步地,访问模块303,包括:
[0134]第二发送单元,用于通过API发送共享内存的标识和待读出的数据的标识给目的节点,使目的节点根据共享内存的标识和待读出的数据的标识从共享内存的标识对应的共享内存中获取待读出的数据;
[0135]接收单元,用于接收目的节点发送的待读出的数据。
[0136]进一步地,第一获取模块301,包括:
[0137]第一获取单元,用于获取共享内存映射表;
[0138]选择单元,用于从共享内存映射表中选择一个节点的标识作为目的节点的标识;
[0139]第二获取单元,用于根据目的节点的标识获取目的节点;
[0140]第三获取单元,用于根据目的节点的标识从共享内存映射表中获取与目的节点的标识对应的共享内存的标识。
[0141]进一步地,该装置还包括:[0142]保存模块,用于将自身节点的标识和自身节点的标识对应的共享内存的标识的对应关系保存在共享内存映射表中。
[0143]进一步地,该装置还包括:
[0144]第一发送模块,用于发送注册请求给代理节点,注册请求携带自身节点的标识和自身节点的标识对应的共享内存的标识,使代理节点将自身节点的标识和自身节点的标识对应的共享内存的标识的对应关系保存在共享内存映射表中。
[0145]进一步地,第一获取单元,用于从本地已存储的数据库中获取共享内存映射表;或者,第一获取单元,用于发送第一获取请求给代理节点,第一获取请求携带自身节点的标识;接收代理节点根据自身节点的标识发送的共享内存映射表。
[0146]进一步地,该装置还包括:
[0147]判断模块,用于判断在第一预设时间内是否接收到代理节点发送的共享内存映射表;
[0148]如果否,第二发送模块,用于发送第二获取请求给备份代理节点,第二获取请求携带自身节点的标识,备份代理节点为代理节点的备份节点;
[0149]接收模块,用于接收备份代理节点根据自身节点的标识发送的共享内存映射表。
[0150]进一步地,该装置还包括:
[0151]第二获取模块,用于每隔第二预设时间获取共享内存映射表;
[0152]更新模块,用于将本地已存储的共享内存映射表更新为获取的共享内存映射表。
[0153]在本发明实施例中,访问节点从共享内存映射表中获取目的节点的标识和共享内存的标识,不需要代理节点分配共享内存,简化了访问共享内存的处理过程;并且,访问节点通过调用API对共享内存进行读写操作,不需要消耗系统资源,提高了共享内存的读写性能。
[0154]实施例4
[0155]本发明实施例提供了一种访问共享内存的装置。参见图4,其中,该装置包括:存储器401和处理器402,该存储器401存储程序代码,该处理器402用于调用存储器中的程序代码执行如下访问共享内存的方法:
[0156]获取目的节点和目的节点对应的共享内存的标识,目的节点为共享内存映射表中的一个节点的标识对应的节点,共享内存映射表用于存储节点的标识与共享内存的标识的对应关系;
[0157]调用远程直接内存访问RDMA的应用程序编程接口 API ;
[0158]通过API对目的节点上的共享内存的标识对应的共享内存进行读写操作。
[0159]进一步地,通过API对目的节点上的共享内存的标识对应的共享内存进行读写操作,包括:
[0160]通过API发送共享内存的标识和待写入的数据给目的节点,使目的节点根据共享内存的标识将待写入的数据写入共享内存的标识对应的共享内存中。
[0161]进一步地,通过API对目的节点上的共享内存的标识对应的共享内存进行读写操作,包括:
[0162]通过API发送共享内存的标识和待读出的数据的标识给目的节点,使目的节点根据共享内存的标识和待读出的数据的标识从共享内存的标识对应的共享内存中获取待读出的数据;
[0163]接收目的节点发送的待读出的数据。
[0164]进一步地,获取目的节点和目的节点对应的共享内存的标识,包括:
[0165]获取共享内存映射表;
[0166]从共享内存映射表中选择一个节点的标识作为目的节点的标识;
[0167]根据目的节点的标识获取目的节点;
[0168]根据目的节点的标识从共享内存映射表中获取与目的节点的标识对应的共享内存的标识。
[0169]进一步地,获取目的节点和目的节点对应的共享内存的标识之前,方法还包括:
[0170]将自身节点的标识和自身节点的标识对应的共孚内存的标识的对应关系保存在共享内存映射表中。
[0171]进一步地,获取目的节点和目的节点对应的共享内存的标识之前,该方法还包括:
[0172]发送注册请求给代理节点,注册请求携带自身节点的标识和自身节点的标识对应的共享内存的标识,使代理节点将自身节点的标识和自身节点的标识对应的共享内存的标识的对应关系保存在共享内存映射表中。
[0173]进一步地,获取共享内存映射表,包括:
[0174]从本地已存储的数据库中获取共享内存映射表;或者,
[0175]发送第一获取请求给代理节点,第一获取请求携带自身节点的标识;接收代理节点根据自身节点的标识发送的共享内存映射表。
[0176]进一步地,发送第一获取请求给代理节点之后,该方法还包括:
[0177]判断在第一预设时间内是否接收到代理节点发送的共享内存映射表;
[0178]如果否,发送第二获取请求给备份代理节点,第二获取请求携带自身节点的标识,备份代理节点为代理节点的备份节点;
[0179]接收备份代理节点根据自身节点的标识发送的共享内存映射表。
[0180]进一步地,该方法还包括:
[0181]每隔第二预设时间获取共享内存映射表;
[0182]将本地已存储的共享内存映射表更新为获取的共享内存映射表。
[0183]在本发明实施例中,访问节点从共享内存映射表中获取目的节点的标识和共享内存的标识,不需要代理节点分配共享内存,简化了访问共享内存的处理过程;并且,访问节点通过调用API对共享内存进行读写操作,不需要消耗系统资源,提高了共享内存的读写性能。
[0184]需要说明的是:上述实施例提供的访问共享内存的装置在访问共享内存时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的访问共享内存的装置与访问共享内存的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
[0185]本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0186] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种访问共享内存的方法,其特征在于,所述方法包括: 获取目的节点和所述目的节点对应的共享内存的标识,所述目的节点为共享内存映射表中的一个节点的标识对应的节点,所述共享内存映射表用于存储节点的标识与共享内存的标识的对应关系; 调用远程直接内存访问RDMA的应用程序编程接口 API ; 通过所述API对所述目的节点上的所述共享内存的标识对应的共享内存进行读写操作。
2.如权利要求1所述的方法,其特征在于,所述通过所述API对所述目的节点上的所述共享内存的标识对应的共享内存进行读写操作,包括: 通过所述API发送所述共享内存的标识和待写入的数据给所述目的节点,使所述目的节点根据所述共享内存的标识将所述待写入的数据写入所述共享内存的标识对应的共享内存中。
3.如权利要求1所述的方法,其特征在于,所述通过所述API对所述目的节点上的所述共享内存的标识对应的共享内存进行读写操作,包括: 通过所述API发送所述共享内存的标识和待读出的数据的标识给所述目的节点,使所述目的节点根据所述共享内存的标识和所述待读出的数据的标识从所述共享内存的标识对应的共享内存中获取所述待读出的数据; 接收所述目的节点发送的所述待读出的数据。
4.如权利要求1所述的方法,其特征在于,所述获取目的节点和所述目的节点对应的共享内存的标识,包括: 获取所述共享内存映射表; 从所述共享内存映射表中选择一个节点的标识作为所述目的节点的标识; 根据所述目的节点的标识获取所述目的节点; 根据所述目的节点的标识从所述共享内存映射表中获取与所述目的节点的标识对应的所述共享内存的标识。
5.如权利要求1所述的方法,其特征在于,所述获取目的节点和所述目的节点对应的共享内存的标识之前,所述方法还包括: 将自身节点的标识和所述自身节点的标识对应的共孚内存的标识的对应关系保存在所述共享内存映射表中。
6.如权利要求1所述的方法,其特征在于,所述获取目的节点和所述目的节点对应的共享内存的标识之前,所述方法还包括: 发送注册请求给代理节点,所述注册请求携带自身节点的标识和所述自身节点的标识对应的共享内存的标识,使所述代理节点将所述自身节点的标识和所述自身节点的标识对应的共孚内存的标识的对应关系保存在所述共孚内存映射表中。
7.如权利要求4所述的方法,其特征在于,所述获取所述共享内存映射表,包括: 从本地已存储的数据库中获取所述共享内存映射表;或者, 发送第一获取请求给代理节点,所述第一获取请求携带自身节点的标识;接收所述代理节点根据所述自身节点的标识发送的所述共享内存映射表。
8.如权利要求7所述的方法,其特征在于,所述发送第一获取请求给代理节点之后,所述方法还包括: 判断在第一预设时间内是否接收到所述代理节点发送的所述共享内存映射表; 如果否,发送第二获取请求给备份代理节点,所述第二获取请求携带所述自身节点的标识,所述备份代理节点为所述代理节点的备份节点; 接收所述备份代理节点根据所述自身节点的标识发送的所述共享内存映射表。
9.如权利要求4所述的方法,其特征在于,所述方法还包括: 每隔第二预设时间获取所述共享内存映射表; 将本地已存储的所述共享内存映射表更新为所述获取的共享内存映射表。
10.一种访问共享内存的装置,其特征在于,所述装置包括: 第一获取模块,用于获取目的节点和所述目的节点对应的共享内存的标识,所述目的节点为共享内存映射表中的一个节点的标识对应的节点,所述共享内存映射表用于存储节点的标识与共孚内存的标识的对应关系; 调用模块,用于调用远程直接内存访问RDMA的应用程序编程接口 API ; 访问模块,用于通过所述API对所述目的节点上的所述共享内存的标识对应的共享内存进行读写操作。
11.如权利要求10所述的装置,其特征在于,所述访问模块,包括: 第一发送单元,用于通过所述API发送所述共享内存的标识和待写入的数据给所述目的节点,使所述目的节点根据所述共享内存的标识将所述待写入的数据写入所述共享内存的标识对应的共享内存中。
12.如权利要求10所述的装置,其特征在于,所述访问模块,包括: 第二发送单元,用于通过所述API发送所述共享内存的标识和待读出的数据的标识给所述目的节点,使所述目的节点根据所述共享内存的标识和所述待读出的数据的标识从所述共享内存的标识对应的共享内存中获取所述待读出的数据; 接收单元,用于接收所述目的节点发送的所述待读出的数据。
13.如权利要求10所述的装置,其特征在于,所述第一获取模块,包括: 第一获取单兀,用于获取所述共享内存映射表; 选择单元,用于从所述共享内存映射表中选择一个节点的标识作为所述目的节点的标识; 第二获取单元,用于根据所述目的节点的标识获取所述目的节点; 第三获取单元,用于根据所述目的节点的标识从所述共享内存映射表中获取与所述目的节点的标识对应的所述共享内存的标识。
14.如权利要求10所述的装置,其特征在于,所述装置还包括: 保存模块,用于将自身节点的标识和所述自身节点的标识对应的共享内存的标识的对应关系保存在所述共享内存映射表中。
15.如权利要求10所述的装置,其特征在于,所述装置还包括: 第一发送模块,用于发送注册请求给代理节点,所述注册请求携带自身节点的标识和所述自身节点的标识对应的共享内存的标识,使所述代理节点将所述自身节点的标识和所述自身节点的标识对应的共孚内存的标识的对应关系保存在所述共孚内存映射表中。
16.如权利要求13所述的装置,其特征在于,所述第一获取单元,用于从本地已存储的数据库中获取所述共享内存映射表;或者,所述第一获取单元,用于发送第一获取请求给代理节点,所述第一获取请求携带自身节点的标识;接收所述代理节点根据所述自身节点的标识发送的所述共享内存映射表。
17.如权利要求16所述的装置,其特征在于,所述装置还包括: 判断模块,用于判断在第一预设时间内是否接收到所述代理节点发送的所述共享内存映射表; 如果否,第二发送模块,用于发送第二获取请求给备份代理节点,所述第二获取请求携带所述自身节点的标识,所述备份代理节点为所述代理节点的备份节点; 接收模块,用于接收所述备份代理节点根据所述自身节点的标识发送的所述共享内存映射表。
18.如权利要求13所述的装置,其特征在于,所述装置还包括: 第二获取模块,用于每隔第二预设时间获取所述共享内存映射表; 更新模块,用于将本地已存储的所述共享内存映射表更新为所述获取的共享内存映射表。
19.一种访问共享内存的装置,其特征在于,所述装置包括:存储器和处理器,所述存储器存储程序代码,所述处理器用于调用所述存储器中的程序代码执行如权利要求1-9任一所述的访问共享内存的方法`。
【文档编号】H04L29/06GK103607428SQ201310529433
【公开日】2014年2月26日 申请日期:2013年10月30日 优先权日:2013年10月30日
【发明者】杨帅, 袁学文 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1