发明内容
本发明实施例提供一种实现内存镜像的方法及装置,以提高内存镜像的灵活性。
第一方面,提供一种实现内存镜像的方法,包括:
获取第一事物流;
解析所述第一事物流的事物类型以及目标地址;
若所述目标地址属于预先配置的镜像地址中的主地址,且所述事务类型为写事务,则在预先配置的镜像地址中,确定与所述主地址匹配的备地址;
在所述主地址与所述备地址之间实现内存镜像。
结合第一方面,在第一种实现方式中,预先配置的镜像地址中的备地址为空闲的内存地址。
结合第一方面或者第一方面的第一种实现方式,在第二种实现方式中,在所述主地址与所述备地址之间实现内存镜像,包括:
获取所述第一事物流的数据内容;
复制所述数据内容;
封装复制得到的数据内容与所述备地址,形成目标地址指向所述备地址的第二事物流;
发送所述第一事物流至与所述主地址对应的内存,并发送所述第二事物流至与所述备地址对应的内存;
在所述主地址与所述备地址之间实现内存镜像。
结合第一方面的上述任一种实现方式,在第三种实现方式中,在所述主地址与所述备地址之间实现内存镜像之后,所述方法还包括:
在对主地址对应的内存访问出现异常的情况下,互换所述主地址与所述备地址,实现镜像倒换。
第二方面,提供一种实现内存镜像的装置,包括:
获取单元,用于获取第一事物流;
解析单元,用于解析所述获取单元获取的所述第一事物流的事物类型以及目标地址;
判断单元,用于判断所述解析单元解析得到的目标地址是否属于预先配置的镜像地址中的主地址;
确定单元,用于在所述判断单元判断的结果为所述目标地址属于预先配置的镜像地址中的主地址,且所述事务类型为写事务的情况下,在预先配置的镜像地址中确定与所述主地址匹配的备地址;
镜像单元,用于在所述确定单元确定的所述主地址与所述备地址之间实现内存镜像。
结合第二方面,在第一种实现方式中,所述装置还包括:
配置单元,用于预先配置镜像地址;
其中,预先配置的镜像地址中的备地址为空闲的内存地址。
结合第二方面或者第二方面的第一种实现方式,在第二种实现方式中,所述镜像单元,具体用于按如下方式在所述主地址与所述备地址之间实现内存镜像:
获取所述第一事物流的数据内容;
复制所述数据内容;
封装复制得到的数据内容与所述备地址,形成目标地址指向所述备用地址的第二事物流;
发送所述第一事物流至与所述主地址对应的内存,并发送所述第二事物流至与所述备地址对应的内存;
在所述主地址与所述备地址之间实现内存镜像。
结合第二方面的上述任一种实现方式,在第三种实现方式中,所述装置还包括倒换单元,其中:
所述倒换单元,用于在所述主地址与所述备地址之间实现内存镜像之后,在对主地址对应的内存访问出现异常的情况下,互换所述主地址与所述备地址,进行镜像倒换。
本发明实施例提供的实现内存镜像的方法及装置,解析获取到的事物流的事物类型以及目标地址,若解析到的目标地址属于预先配置的镜像地址中的主地址,且解析到的事务类型为写事务,则在预先配置的镜像地址中确定与主地址匹配的备地址,最终在主地址与备地址之间实现内存镜像,即本发明实施例提供的通过匹配内存地址的方式建立内存镜像的最小粒度为内存地址,并不是以内存设备的整个地址范围区间作为建立镜像的最小粒度的,故相对在内存设备之间建立镜像的实现方式,灵活性更高。
附图说明
图1A为本发明实施例提供的实现内存镜像的方法流程图;
图1B为本发明实施例提供的在地址区间实现内存镜像的方法流程图;
图2为本发明实施例提供的确定备地址的过程示意图;
图3为本发明实施例提供的实现镜像功能的泳道图;
图4A为建立内存镜像前对内存地址区间的访问过程示意图;
图4B为建立内存镜像后对内存地址区间的访问过程示意图;
图5A为采用本发明实施例提供的内存镜像方法实现写报文的泳道图;
图5B为采用本发明实施例提供的内存镜像方法实现写报文的又一泳道图;
图6为本发明实施例提供的再一实现内存镜像的方法流程图;
图7为本发明实施例提供的判断主地址对应的内存访问是否出现异常的泳道图;
图8A为本发明实施例提供的进行镜像倒换过程中更换主备地址的过程示意图;
图8B为本发明实施例提供的进行镜像倒换后的示意图;
图9A为本发明实施例提供的进行镜像倒换过程中更换主备地址的又一过程示意图;
图9B为本发明实施例提供的进行镜像倒换后的又一示意图;
图10A为本发明实施例提供的实现内存镜像的装置构成示意图;
图10B为本发明实施例提供的又一实现内存镜像的装置构成示意图;
图10C为本发明实施例提供的再一实现内存镜像的装置构成示意图;
图11为本发明实施例提供的实现内存镜像的设备构成示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的实现内存镜像的方法,可应用于多路处理器互联的场景,也可应用于一个处理器有多个内存的场景,例如本发明实施例提供的实现内存镜像的方法可应用于具有若干个处理器,以及若干个内存,并且每个处理器都可以直接通过物理地址访问到每个内存的缓存一致性网络,在缓存一致性网络中,CA(CacheAgent,缓存代理)和HA(HomeAgent,本地代理)通过缓存一致性总线相互连接。
图1A所示为本发明实施例提供的实现内存镜像的方法流程图,图1A所示方法的执行主体可以是能够实现相应镜像功能的部件,该实现镜像功能的部件可以是独立的部件,也可以是集成在相应代理的内部的部件,例如可以是集成在地址代理设备(HA)内部的部件,本发明实施例为描述方便,以下将实现内存镜像的部件称为镜像功能模块。如图1A所示,本发明实施例提供的实现内存镜像的方法包括:
S101:获取第一事物流。
S102:解析第一事物流的事物类型以及目标地址。
本发明实施例中可根据第一事物流中的报文内容解析出第一事务流的目标地址以及第一事物流的事务类型,其中,第一事务流的事务类型包括读事务和写事务,第一事物流的目标地址指向特定内存地址。
本发明实施例提供的实现内存镜像的方法主要针对写事务,即若解析到的事务类型为写事务,则继续执行S103,否则,直接将第一事物流发送至与解析到的目标地址对应的内存中。
S103:若解析到的目标地址属于预先配置的镜像地址中的主地址,且解析到的事务类型为写事务,则在预先配置的镜像地址中,确定与所述主地址匹配的备地址。
本发明实施例中为实现内存镜像,需预先配置镜像地址,该预先配置的镜像地址包括主地址以及与主地址匹配的备地址。本发明实施例中进行镜像地址配置过程中,可选取一段地址空间作为主地址,并修改所有处理器的系统地址解码配置,使得镜像功能模块可以获取到发往主地址的事物流。本发明实施例中直接配置与主地址匹配的备地址,也可以配置主地址与备地址之间的地址差,以确定备地址。
可选的,本发明实施例中可预先配置空闲的内存地址作为镜像地址中与主地址匹配的备地址,该空闲的内存地址例如可以是不被操作系统以及操作系统上的应用软件操作的内存地址。例如对于NUMA(Non-UniformMemoryAccess,非统一访问内存)系统,将各个NUMA节点的内核态内存均作为主用内存,在系统启动时预留一个较大的内存作为备用内存,将各个主用内存地址区间与该备用内存不同的内存地址区间进行镜像,这样做可以增强对内核态内存的保护。如图2所示为NUMA中有4个NUMA节点分配了内核态内存的情形,所有内核态内存都进行了镜像保护。图2中,四对主地址进行镜像的备地址都位于同一空闲的内存上,并且四个备地址彼此相连,形成连续的地址,有利于防火墙或者BIOS(BasicInputOutputSystem,基本输入输出系统)进行进一步的内存保护,例如内存清洗等。当然本发明实施例只是以内核态内存进行镜像保护为例进行说明,并不引以为限,例如对于用户态数据中的重要数据,比如数据库数据,也可以依据实际的内存分配情况应用本发明实施例提供的内存镜像实现方式进行内存镜像保护。
可选的,本发明实施例在配置镜像地址的备地址过程中,可配置与主地址位于同一节点、且空闲的内存地址作为镜像地址中的备地址,以减少访问延时,提升镜像性能。例如可以将图2中每个NUMA节点中的内核态内存直接和本节点中的另一空闲的地址区间作为镜像。
当然本发明实施例中为提高镜像倒换过程中进行内存的热插拔,可配置与主地址位于不同节点、且空闲的内存地址作为镜像地址中的备地址。
需要说明的是,本发明实施例中预先配置的镜像地址中可包括一对匹配的主地址与备地址,也可包括多对匹配的主地址与备地址。
S104:在解析的主地址与获取的备地址之间实现内存镜像。
解析到的目标地址属于预先配置的镜像地址中的主地址,且解析到的事务类型为写事务,则在预先配置的镜像地址中,确定与所述主地址匹配的备地址,并在主地址与备地址之间实现内存镜像。
可选的,本发明实施例S104中在主地址与备地址之间实现内存镜像的过程可采用如图1B所示的方法实现流程,如图1B所示,包括:
S1041:获取第一事物流的数据内容。
S1042:复制第一事物流的数据内容。
S1043:封装复制得到的数据内容与备地址,形成目标地址指向备地址的第二事物流。
S1044:发送第一事物流至与主地址对应的内存,并发送第二事物流至与备地址对应的内存,在主地址与备地址之间实现内存镜像。
图3所示为本发明实施例提供的镜像功能模块内部泳道图,镜像功能模块接收外部发送到其内部的事物流,并对接收到的事物流判断是否为主地址的写事务,若不是主地址的写事务,则直接将该事务发给对应的目标地址;若为主地址的写事务,则复制主地址的写事务,按照协议重新组包形成目标地址指向备地址的写事务,并将主地址的写事务发给主地址,将重新组包得到的指向备地址的写事务,发给备地址。
本发明实施例以下将结合实际应用对上述实施例中涉及的实现内存镜像的方法进行详细说明。
本发明实施例中以缓存一致性网络为例进行说明,假设该缓存一致性网络中的逻辑部件包括两个处理器以及四个内存地址区间。图4A所示为两个处理器以及四个内存地址区间之间的逻辑部件图,四个内存地址区间一般对应四个HA(HA理解为紧邻内存,CA理解为紧邻处理器,在图4A中HA和CA均未画出)。图4A中表示预备将内存地址区间1和内存地址区间3组建镜像,但尚未实施的情形下对内存地址区间1的访问过程示意图,图4A中的箭头表示处理器对内存地址区间1的访问过程,处理器在访问内存地址区间1的时候,可以将报文通过源地址解码器直接指向内存地址区间1对应的本地代理。
图4B所示为实现内存镜像后处理器对内存地址区间1的访问过程示意图。图4B中内存地址区间1对应主用内存,内存地址区间3对应备用内存。处理器在访问内存地址区间1的时候,将事物流通过源地址解码器先指向镜像功能模块(图中标注箭头1),再由镜像功能模块转发该事物流,将转发的事物流的目标指向内存地址1对应的HA(图中标注箭头2),如果是对内存地址区间1的写操作,那么由镜像功能模块再生成一条指向内存地址区间3对应的HA的事物流(图中标注箭头3),指向内存地址区间3的事物流的数据内容与指向内存地址区间1的事物流的数据内容相同。
图5A所示为采用本发明实施例提供的内存镜像方法实现写报文的泳道图,图5A中镜像功能模块是独立的部件,在建立镜像关系以后,当处理器对主地址区间对应的HA发起写操作请求时,报文需要先到达镜像功能模块。镜像功能模块除了通过向主地址区间对应的HA转发报文以外,还需要复制一条数据一样的报文转发到备地址区间对应的HA,主地址区间对应的HA收到写操作请求后,会向其对应的主地址区间对应的内存写入数据,备地址区间对应的HA收到写操作请求后也会向其对应的备地址区间对应的内存写入数据。主地址区间对应的HA和备地址区间对应的HA在完成写操作后,都会向镜像功能模块返回一个完成响应。镜像功能模块收到主地址区间对应的HA和备地址区间对应的HA的完成响应后,会向发起请求的处理器返回完成响应。至此,写事务完成。
本发明实施例中为简化写报文的过程,可使得地址代理设备(例如HA)具备镜像功能,具体实现镜像的过程与上述实施例相似,只不过因为地址代理设备(例如HA)本身具备了镜像功能,对于某个地址代理设备而言,如果该地址代理设备的设定地址区间被选为主地址区间,那么因为到达主地址区间的事物流肯定会经过该地址代理设备,所以在建立镜像的过程中不必修改系统级地址解码配置。
图5B所示为采用本发明实施例提供的内存镜像方法实现写报文的又一泳道图,图5B中由主地址区间对应的HA实现相应镜像功能,具体实现写报文的过程与图5A所示类似,只是由于镜像功能由主地址区间对应的HA实现,故省略了主地址区间对应的HA向镜像功能模块返回完成响应的步骤。
本发明实施例提供的实现内存镜像的方法,解析获取到的事物流的事物类型以及目标地址,若解析到的目标地址属于预先配置的镜像地址中的主地址,且解析到的事务类型为写事务,则在预先配置的镜像地址中确定与主地址匹配的备地址,最终在主地址与备地址之间实现内存镜像,建立内存镜像的最小粒度为内存地址,并不是以内存设备的整个地址范围区间作为建立镜像的最小粒度的,故相对在内存设备之间建立镜像的实现方式,灵活性更高。例如本发明实施例相对在两个HA之间建立镜像而言,本发明实施例建立镜像关系的内存地址可以是HA内部的全部地址,也可以是HA内部的部分地址,换言之,采用本发明实施例实现内存镜像的方法,可以在一个HA内部的内存地址区间之间组建镜像,也可以在不同的HA之间组建镜像,灵活性更高。
本发明实施例在主地址与备地址之间实现内存镜像后,还可包括S105的步骤,具体的实现过程示意图可如图6所示:
S105:在对主地址对应的内存访问出现异常的情况下,互换主地址与备地址,实现镜像倒换。
本发明实施例中对主地址对应的内存访问出现异常可以是主地址被认定为不稳定或者故障的情况,如图7所示为一种判断主地址对应的内存访问是否出现异常的泳道图。
如图7所示,当有对主地址的读操作请求时,镜像功能模块从主地址读取出错,镜像功能模块可能发起几次重试(图中未体现),确认读失败;镜像功能模块读取备地址,可能会出现几次重试,最终确认读成功;镜像功能模块将正确的读响应返回给读请求的发起者;镜像功能模块将已获得的正确数据尝试写入主地址;镜像功能模块再次读取主地址中的数据,确认读出的数据是否正确,如果几次尝试都不正确,即可确定主地址对应的内存访问出现异常。
需要说明的是,本发明实施例以上判断主地址对应的内存是否出现异常,是以对主地址的读操作请求为例进行说明的,而对于写操作请求,只要当前写操作能完成即可,至于写入的数据是否正确,当以后对这个地址有读操作请求时,自然会按照以上已说明的流程判断对应的内存是否出现异常。
本发明实施例中在对主地址对应的内存访问出现异常的情况下,需要进行镜像倒换,本发明实施例中进行镜像倒换即指解除主备内存的镜像关系,并让备用内存充当主用内存的过程。
本发明实施例中进行镜像倒换的过程,将备地址对应的备用内存的地址更换为主地址,将主地址对应的主用内存的地址更换为备地址,对于发起访问请求的设备而言,其访问的地址仍为主地址,但是访问的数据内容为备用内存中的数据内容,换言之,本发明实施例中实现了主用内存与备用内存的倒换,如图8A所示为进行镜像倒换过程中更换主备地址的过程示意图,内存地址区间1对应的内存为主用内存,内存地址区间3对应的内存为备用内存,将备地址对应的备用内存的地址更换为主地址,将主地址对应的主用内存的地址更换为备地址,图8B所示为进行镜像倒换后的示意图,进行镜像倒换后,原始备用内存对应的地址区间为主地址区间,实现主用内存的功能。
本发明实施例假设主地址区间为系统地址PA0~PA1,备地址区间为系统地址PB0~PB1,进行镜像倒换过程中,在所有CA和HA之间执行以下操作:源地址解码器的主备地址所对应的HA的ID对换,如图9A所示。
假设进行镜像倒换前,主地址区间1对应的目标地址解码器(TargetAddressDecoder,TAD)为HA01的TAD(简写为TAD01),备地址区间3对应的TAD为HA03的TAD(简写为TAD03),那么在镜像倒换时在HA01和HA03中将TAD01和TAD03的内容对换,如图9B所示。图9B中用层(rank)、行(row)、列(column)来表示访问的设备地址。
本发明实施例中上述进行主备倒换的实现方法,将系统地址解码中主备地址对应的目标ID进行交互,并交换主备地址对应的设备级地址解码,使得实际所有的CA和HA所对应的主备地址进行了互换,对于发起访问请求的设备而言,其不用更改其访问的地址,并不感知底层访问位置的变化,即可实现访问到正确的数据内容。
基于上述实施例提供的实现内存镜像的方法,本发明实施例还提供了一种实现内存镜像的装置100,如图10A所示,实现内存镜像的装置100包括获取单元101、解析单元102、判断单元103、确定单元104和镜像单元105,其中:
获取单元101,用于获取第一事物流。
解析单元102,用于解析获取单元101获取的第一事物流的事物类型以及目标地址。
判断单元103,用于判断解析单元102解析得到的目标地址是否属于预先配置的镜像地址中的主地址。
确定单元104,用于在判断单元103判断的结果为解析单元102解析得到的目标地址属于预先配置的镜像地址中的主地址,且事务类型为写事务的情况下,在预先配置的镜像地址中确定与主地址匹配的备地址;
镜像单元105,用于在确定单元104确定的主地址与备地址之间实现内存镜像。
在第一种实现方式中,实现内存镜像的装置100还包括配置单元106,如图10B所示:
配置单元106,用于预先配置镜像地址,镜像地址中包括匹配的主地址与备地址。
本发明实施例中预先配置的镜像地址中的备地址为空闲的内存地址。
在第二种实现方式中,镜像单元105,具体用于按如下方式在主地址与备地址之间实现内存镜像:
获取第一事物流的数据内容;
复制所述数据内容;
封装复制得到的数据内容与备地址,形成目标地址指向备用地址的第二事物流;
发送第一事物流至与地址对应的内存,并发送第二事物流至与备地址对应的内存;
在主地址与备地址之间实现内存镜像。
在第三种实现方式中,实现内存镜像的装置100还包括倒换单元107,如图10C所示:
倒换单元107,用于在主地址与备地址之间实现内存镜像之后,在对主地址对应的内存访问出现异常的情况下,互换主地址与备地址,进行镜像倒换。
本发明实施例提供的实现内存镜像的装置100,解析获取到的事物流的事物类型以及目标地址,若解析到的目标地址属于预先配置的镜像地址中的主地址,且解析到的事务类型为写事务,则在预先配置的镜像地址中确定与主地址匹配的备地址,最终在主地址与备地址之间实现内存镜像,灵活性更高。
基于上述实施例提供的实现内存镜像的方法及装置,本发明实施例还提供一种实现内存镜像的设备110,本发明实施例提供的实现内存镜像的设备110包括I/O接口1101以及处理器1102,如图11所示:
I/O接口,用于获取第一事物流。
处理器1102,用于解析所述第一事物流的事物类型以及目标地址,若所述目标地址属于预先配置的镜像地址中的主地址,且所述事务类型为写事务,则在预先配置的镜像地址中,确定与所述主地址匹配的备地址,在所述主地址与所述备地址之间实现内存镜像。
在第一种实现方式中,处理器1102预先配置的镜像地址中的备地址为空闲的内存地址。
在第二种实现方式中,处理器1102具体用于按如下方式在所述主地址与所述备地址之间实现内存镜像:
获取所述第一事物流的数据内容;
复制所述数据内容;
封装复制得到的数据内容与所述备地址,形成目标地址指向所述备用地址的第二事物流;
发送所述第一事物流至与所述主地址对应的内存,并发送所述第二事物流至与所述备地址对应的内存;
在所述主地址与所述备地址之间实现内存镜像。
在第三种实现方式中,处理器1102,还用于:
在所述主地址与所述备地址之间实现内存镜像之后,在对主地址对应的内存访问出现异常的情况下,互换所述主地址与所述备地址,进行镜像倒换。
本发明实施例提供的实现内存镜像的设备110,解析获取到的事物流的事物类型以及目标地址,若解析到的目标地址属于预先配置的镜像地址中的主地址,且解析到的事务类型为写事务,则在预先配置的镜像地址中确定与主地址匹配的备地址,最终在主地址与备地址之间实现内存镜像,即本发明实施例提供的实现内存镜像的方法是通过匹配内存地址的方式建立的,该内存地址可以是内存设备内部的全部地址,也可以是内存设备内部的部分地址,换言之,采用本发明实施例实现内存镜像的方法,可以在一个内存设备内部的内存地址区间之间组建镜像,也可以在不同的内存设备之间组建镜像,灵活性更高。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。