目录设计方法及装置制造方法

文档序号:6544321阅读:145来源:国知局
目录设计方法及装置制造方法
【专利摘要】本发明公开了一种目录设计方法及装置,属于计算机【技术领域】。方法包括:根据缓存块的数目,建立多个目录集合,每个目录集合中包括多个目录组,每个目录组中包括多个目录项,一个目录项与一个缓存块对应;分别为多个目录组配置标签,标签用于标识目录组所包括的所有目录项对应的缓存块的占用状态;分别为每个目录集合、每个目录组、每条目录项及每个标签设置索引;存储多个目录集合及多个标签。本发明在为每个目录组配置一个标签后,可实现一个标签标识一个目录组中全部目录组对应的缓存块的占用状态,不但节省了目录占用的存储空间,还降低了远端节点对本地内存的访问延时,提升了多处理器系统的性能。
【专利说明】目录设计方法及装置
【技术领域】
[0001]本发明涉及计算机【技术领域】,特别涉及一种目录设计方法及装置。
【背景技术】
[0002]在计算机领域中,一个多处理器系统不但包括本地节点,还包括多个远端节点。其中,本地节点至少包括一个节点控制器、一个或多个本地内存。一个本地内存通常划分为多个缓存块,每个缓存块的大小一般为64字节或128字节。节点控制器上存储了一个包含多条目录项的目录,每条目录项用来记录远端节点对一个缓存块的占用状态。当远端节点请求一个本地内存时,节点控制器根据存储的目录确定是否有其他远端节点占用了所请求的本地内存。而为了使节点控制器能够快速且精确地确定是否有其他远端节点占用了所请求的内存,如何进行目录设计,成为了本领域技术人员关注的一个问题。
[0003]现有技术在进行目录设计时,通常采取三种方式。第一种方式为Ι-bit(比特)目录设计方式,一条目录项占用lbit,一条目录项中以二进制数值O或I表示一个缓存块的占用状态;第二种方式为2-bit目录设计方式,一条目录项占用2bit,一条目录项中以两个二进制数表示一个缓存块的占用状态;其中,占用状态至少包括可能态(表示任意可能的状态)、共享态(表示多个远端节点共享缓存块)及无效态(表示没有任何远端节点占用缓存块)。第三种方式为精确目录设计方式,一条目录项占用多个bit,一条目录项中包括一个缓存块的占用状态和占用信息。其中,占用状态同样分为可能态、共享态及无效态;占用信息用来表示哪个或哪几个远端节点占用了该缓存块。
[0004]在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
[0005]无论针对上述哪一种目录设计方式,当本地内存的存储空间越来越大时,将生成海量的目录项,在对包含海量目录项的目录进行存储时,将占用大量的存储空间。以本地内存的总存储空间为IT(百万兆)为例,则即便采取占用存储空间最小的ι-bit目录设计方式,生成的目录项也需2G(千兆)存储空间进行存储。而占用太多的存储空间来存储目录会存在目录设计的成本高、复杂度高及技术要求高的缺陷,且还将导致远端节点对本地内存的访问延时过大,进而给多处理器系统的性能造成不良影响。

【发明内容】

[0006]为了解决现有技术的问题,本发明实施例提供了一种目录设计方法及装置。所述技术方案如下:
[0007]第一方面,提供了一种目录设计方法,所述方法包括:
[0008]根据缓存块的数目,建立多个目录集合,每个目录集合中包括多个目录组,每个目录组中包括多个目录项,一个目录项与一个缓存块对应;
[0009]分别为所述多个目录组配置标签,所述标签用于标识所述目录组所包括的所有目录项对应的缓存块的占用状态;
[0010]分别为每个目录集合、每个目录组、每条目录项及每个标签设置索引。[0011]存储多个目录集合及多个标签。
[0012]在第一方面的第一种可能的实现方式中,所述存储多个目录集合及多个标签之后,所述方法还包括:
[0013]当接收到远端节点发送的内存访问请求时,根据所述内存访问请求携带的目标目录项的标签索引信息,获取所述目标目录项所在目录组的标签;
[0014]根据所述目标目录项所在目录组的标签,确定所述目标目录项对应的缓存块的占用状态;
[0015]基于所述目标目录项对应的缓存块的占用状态,响应所述远端节点的内存访问请求。
[0016]结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述存储多个目录集合及多个标签之后,所述方法还包括:
[0017]当接收到远端节点发送的内存访问请求时,根据所述内存访问请求携带的集合索弓I信息,确定所述目标目录项所在目录集合;
[0018]根据所述内存访问请求携带的目录组索引信息,在所述目标目录项所在目录集合中查找所述目标目录项所在目录组;
[0019]如果查找到所述目标目录项所在目录组,则根据所述内存访问请求携带的目录项索引信息确定所述目标目录项;
[0020]根据所述目标目录项所在目录组的标签,确定所述目标目录项对应的缓存块的占用状态;
[0021 ] 基于所述目标目录项对应的缓存块的占用状态,响应所述远端节点的内存访问请求。
[0022]结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述在所述目标目录项所在目录集合中查找所述目标目录项所在目录组之后,所述方法还包括:
[0023]如果未查找到所述目标目录项所在目录组,则在所述目标目录项所在目录集合中,查找第一目录组,所述第一目录组为全部目录项均处于未占用状态的目录组;
[0024]如果查找到所述第一目录组,则根据所述第一目录组对应的目录组索引信息和所述目标目录项的集合索引信息,生成第一标签索引信息;
[0025]根据所述第一标签索引信息,获取第一标签;
[0026]更新所述第一标签,并将所述第一目录组对应的目录组索引信息更新为所述内存访问请求携带的目录组索引信息。
[0027]结合第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述根据所述第一目录组对应的目录组索引信息和所述目标目录项的集合索引信息,生成第一标签索引信息,包括:
[0028]将所述目录组索引信息的多个数据位置于所述集合索引信息的多个数据位之前,组合成新的数据位;
[0029]将所述新的数据位确定为所述第一标签索引信息的数据位。
[0030]结合第一方面的第三种可能的实现方式,在第一方面的第五种可能的实现方式中,所述在所述目标目录所在的目录集合中,查找第一目录组之后,所述方法还包括:[0031]如果未查找到所述第一目录组,则根据预设策略查找第二目录组;
[0032]根据所述第二目录组对应的目录组索引信息和所述目标目录项的集合索引信息,生成第二标签索引信息;
[0033]根据所述第二标签索引信息,获取第二标签;
[0034]更新所述第二标签,并将所述第二目录组对应的目录组索引信息更新为所述内存访问请求携带的目录组索引信息。
[0035]第二方面,提供了一种目录设计装置,所述装置包括:
[0036]目录建立模块,用于根据缓存块的数目,建立多个目录集合,每个目录集合中包括多个目录组,每个目录组中包括多个目录项,一个目录项与一个缓存块对应;
[0037]标签配置模块,用于分别为所述多个目录组配置标签,所述标签用于标识所述目录组所包括的所有目录项对应的缓存块的占用状态;
[0038]索引设置模块,用于分别为每个目录集合、每个目录组、每条目录项及每个标签设置索引;
[0039]存储模块,用于存储多个目录集合及多个标签。
[0040]在第二方面的第一种可能的实现方式中,所述装置还包括:
[0041]标签获取模块,用于当接收到远端节点发送的内存访问请求时,根据所述内存访问请求携带的目标目录项的标签索引信息,获取所述目标目录项所在目录组的标签;
[0042]状态确定模块,用于根据所述目标目录项所在目录组的标签,确定所述目标目录项对应的缓存块的占用状态;
[0043]响应模块,用于基于所述目标目录项对应的缓存块的占用状态,响应所述远端节点的内存访问请求。
[0044]结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,
[0045]所述装置还包括:
[0046]目录集合确定模块,用于当接收到远端节点发送的内存访问请求时,根据所述内存访问请求携带的集合索引信息,确定所述目标目录项所在目录集合;
[0047]目录组查找模块,用于根据所述内存访问请求携带的目录组索引信息,在所述目标目录项所在目录集合中查找所述目标目录项所在目录组;
[0048]目录项确定模块,用于当查找到所述目标目录项所在目录组时,根据所述内存访问请求携带的目录项索引信息确定所述目标目录项;
[0049]所述状态确定模块,用于根据所述目标目录项所在目录组的标签,确定所述目标目录项对应的缓存块的占用状态;
[0050]所述响应模块,用于基于所述目标目录项对应的缓存块的占用状态,响应所述远端节点的内存访问请求。
[0051]结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述装置还包括:
[0052]所述目录组查找模块,还用于当未查找到所述目标目录项所在目录组时,在所述目标目录项所在目录集合中,查找第一目录组,所述第一目录组为全部目录项均处于未占用状态的目录组;[0053]索引信息生成模块,用于如果查找到所述第一目录组,则根据所述第一目录组对应的目录组索引信息和所述目标目录项的集合索引信息,生成第一标签索引信息;
[0054]所述标签获取模块,用于根据所述第一标签索引信息,获取第一标签;
[0055]更新模块,用于更新所述第一标签,并将所述第一目录组对应的目录组索引信息更新为所述内存访问请求携带的目录组索引信息。
[0056]结合第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述索引信息生成模块,用于将所述目录组索引信息的多个数据位置于所述集合索引信息的多个数据位之前,组合成新的数据位;将所述新的数据位确定为所述第一标签索引信息的数据位。
[0057]结合第二方面的第三种可能的实现方式,在第二方面的第五种可能的实现方式中,所述装置还包括:
[0058]所述目录组查找模块,用于当未查找到所述第一目录组时,根据预设策略查找第
二目录组;
[0059]索引信息生成模块,用于根据所述第二目录组对应的目录组索引信息和所述目标目录项的集合索引信息,生成第二标签索引信息;
[0060]所述标签获取模块,用于根据所述第二标签索引信息,获取第二标签;
[0061]所述更新模块,用于更新所述第二标签,并将所述第二目录组对应的目录组索引信息更新为所述内存访问请求携带的目录组索引信息。
[0062]本发明实施例提供的技术方案带来的有益效果是:
[0063]在根据缓存块的数目,建立包括多个目录项和多个目录组的层次化目录集合,并为每个目录组配置一个标签后,可实现一个标签标识一个目录组中全部目录组对应的缓存块的占用状态,从而节省了目录占用的存储空间,仅用片上内存便可对生成的目录进行存储,无需引入片外内存。不但节省了设计成本,降低了目录设计的复杂度,还降低了远端节点对本地内存的访问延时,提升了多处理器系统的性能。
【专利附图】

【附图说明】
[0064]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
[0065]图1是本发明实施例提供的一种多处理器系统的系统架构图;
[0066]图2是本发明实施例提供的一种缓存块和目录项的对应关系图;
[0067]图3是本发明实施例提供的一种目录设计的方法流程图;
[0068]图4是本发明实施例提供的一种目录设计的方法流程图;
[0069]图5是本发明实施例提供的第一种目录集合的结构示意图;
[0070]图6是本发明实施例提供的一种缓存块和标签的对应关系图;
[0071]图7是本发明实施例提供的第二种目录集合的结构示意图;
[0072]图8是本发明实施例提供的第一种内存物理地址的示意图;
[0073]图9是本发明实施例提供的一种目录访问的方法流程图;
[0074]图10是本发明实施例提供的第二种内存物理地址的示意图;
[0075]图11是本发明实施例提供的一种目录设计装置的结构示意图。【具体实施方式】
[0076]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0077]在对本发明实施例作详细描述之前,先对对处理系统进行介绍。参见图1,一个多处理器(CPU)系统中包括本地节点100和多个远端节点101。本地节点100与各个远端节点101通过节点间网络102进行连接。本地节点100通过节点控制器103与节点间网络102连接。其中,本地节点100包括了一个节点控制器103、一个或多个本地内存104及一个本地网络106。本地内存104或通过本地网络106与节点控制器103相连,或直接与节点控制器103相连。进一步地,节点控制器103上存储有一个目录105,或节点控制器103与存储有目录105的存储介质相连。节点控制器103通过目录105控制本地内存104。当远端节点需要访问本地内存时,内存访问请求(读内存请求或写内存请求)从远端节点101通过节点间网络102到达节点控制器103。为了维护缓存一致性(Cache Coherence)节点控制器需要访问目录来确定是否有远端节点占用了所请求的本地内存,然后决定是否向远端节点发起侦听消息。进一步地,参见图2,目录105包括多个目录项,每个目录项与本地内存104的一个缓存块相对应,用来标识缓存块的占用状态,即一个目录项用来记录远端节点对一个缓存块的占用信息。
[0078]图3是本发明实施例提供的一种目录设计方法,参见图3,本发明实施例提供的方法流程包括:
[0079]301、根据缓存块的数目,建立多个目录集合,每个目录集合中包括多个目录组,每个目录组中包括多个目录项,一个目录项与一个缓存块对应。
[0080]302、分别为多个目录组配置标签,标签用于标识目录组所包括的所有目录项对应的缓存块的占用状态。
[0081]303、分别为每个目录集合、每个目录组、每条目录项及每个标签设置索引。
[0082]304、存储多个目录集合及多个标签。
[0083]本发明实施例提供的方法,在根据缓存块的数目,建立包括多个目录项和多个目录组的层次化目录集合,并为每个目录组配置一个标签后,可实现一个标签标识一个目录组中全部目录组对应的缓存块的占用状态,从而节省了目录占用的存储空间,仅用片上内存便可对生成的目录进行存储,无需引入片外内存。不但节省了设计成本,降低了目录设计的复杂度,还降低了远端节点对本地内存的访问延时,提升了多处理器系统的性能。
[0084]可选地,存储多个目录集合及多个标签之后,方法还包括:
[0085]当接收到远端节点发送的内存访问请求时,根据内存访问请求携带的目标目录项的标签索引信息,获取目标目录项所在目录组的标签;
[0086]根据目标目录项所在目录组的标签,确定目标目录项对应的缓存块的占用状态;
[0087]基于目标目录项对应的缓存块的占用状态,响应远端节点的内存访问请求。
[0088]可选地,存储多个目录集合及多个标签之后,方法还包括:
[0089]当接收到远端节点发送的内存访问请求时,根据内存访问请求携带的集合索引信息,确定目标目录项所在目录集合;
[0090]根据内存访问请求携带的目录组索引信息,在目标目录项所在目录集合中查找目标目录项所在目录组;
[0091]如果查找到目标目录项所在目录组,则根据内存访问请求携带的目录项索引信息确定目标目录项;
[0092]根据目标目录项所在目录组的标签,确定目标目录项对应的缓存块的占用状态;
[0093]基于目标目录项对应的缓存块的占用状态,响应远端节点的内存访问请求。
[0094]可选地,在目标目录项所在目录集合中查找目标目录项所在目录组之后,方法还包括:
[0095]如果未查找到目标目录项所在目录组,则在目标目录项所在目录集合中,查找第一目录组,第一目录组为全部目录项均处于未占用状态的目录组;
[0096]如果查找到第一目录组,则根据第一目录组对应的目录组索引信息和目标目录项的集合索引信息,生 成第一标签索引信息;
[0097]根据第一标签索引信息,获取第一标签;
[0098]更新第一标签,并将第一目录组对应的目录组索引信息更新为内存访问请求携带的目录组索引信息。
[0099]可选地,根据第一目录组对应的目录组索引信息和目标目录项的集合索引信息,生成第一标签索引信息,包括:
[0100]将目录组索引信息的多个数据位置于集合索引信息的多个数据位之前,组合成新的数据位;
[0101]将新的数据位确定为第一标签索引信息的数据位。
[0102]可选地,在目标目录所在的目录集合中,查找第一目录组之后,方法还包括:
[0103]如果未查找到第一目录组,则根据预设策略查找第二目录组;
[0104]根据第二目录组对应的目录组索引信息和目标目录项的集合索引信息,生成第二标签索引信息;
[0105]根据第二标签索引信息,获取第二标签;
[0106]更新第二标签,并将第二目录组对应的目录组索引信息更新为内存访问请求携带的目录组索引信息。
[0107]上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再
--赘述。
[0108]图4是本发明实施例提供的一种目录设计方法,现以执行主体为图1中节点控制器为例,对本发明实施例提供的目录设计方式进行详细地解释说明。参见图4,本发明实施例提供的方法流程包括:
[0109]401、根据缓存块的数目,建立多个目录集合,每个目录集合中包括多个目录组,每个目录组中包括多个目录项,一个目录项与一个缓存块对应。
[0110]其中,缓存块的大小通常为64字节。当然,缓存块的大小除上述64字节外,还可为其他大小,例如,32字节或128字节等等,本实施例对缓存块的大小不作具体限定。在确定缓存块的大小后,本地节点的缓存块的数目取决于本地节点的总存储空间。以本地节点的
总存储空间为1T、缓存块的大小为64字节为例,则缓存块的数目总共有—=2j4对于数




26目众多的缓存块,需为每一个缓存块建立一个目录项,以记录远端节点对缓存块的占用状态。其中,一个缓存块可被一个远端节点占用,也可被多个远端节点占用,还可不被任何远端节点占用。在进行目录设计时,我们采取如图5所示的层次化目录设计方式。首先,根据缓存块的数目建立多个目录集合,之后在每一个目录集合中设置多个目录组,最后在每个目录组中设置多个目录项,从而完成目录的层次化设置。以本地节点的总存储空间为IT为例,则通常建立1000个目录集合,每个目录集合中一般包括16个目录组,每个目录组中包括1000个目录项,每个目录项记录一个缓存块的占用状态。此外,由于受限于存储空间的大小限制,一个目录集合中通常不会包含大量的目录组。通常情况下,一个目录集合中仅包括几个或几十个目录组。进一步地,若想提高目录的设计精度,还可通过减少每个目录项包括的目录项个数的方式实现。但是减少每个目录项包括的目录项个数,则意味着目录集合的增加,进而目录占用的内存也会加大。为了追求设计精度,可使用片外内存来存储目录,比如使用 SDRAM (Synchronous Dynamic Random Access Memory,同步动态随机存储器)。
[0111]402、分别为多个目录组配置标签,标签用于标识目录组所包括的目录项对应的缓存块的占用状态。
[0112]在本发明实施例中,为了减少用于存储目录的内存使用量,增加了标签的设计。其中,每个标签占用lbit,每个标签与一个目录组相对应,用于标识与该目录组对应的缓存块的占用状态。步骤401中生成的目录中包括多少个目录组,便存在多少个标签,多个标签可构成一个如图6所示的标签向量。该标签向量可对本地内存的全部缓存块的占用状态进行标识。继续以图5为例,由于图5中包括1000*16=16000个目录组,所以当本地内存的总存储空间为IT时,总共需配置16000个标签。如果一个标签为0,则该标签所标识的所有缓存块为未占用状态(没有任何的远端节点对缓存块进行占用);如果一个标签为1,则该标签所标识的所有缓存块为可能态(指代任意可能的状态,缓存块可能未被占用、可能被一个远端节点占用、可能被多个远端节点占用)。
[0113]此外,在初次执行本实施例提供的方法时,也即未有任何远端节点对本地节点的缓存块进行占用时,全部的标签都为O ;当在后续过程中,本地节点的节点控制器接收到远端节点发送的内存访问请求时,标签会进行更新;也即,当缓存块由未占用状态变为占用状态时,该缓存块对应的目录项的标签将由O变为I。相应地,若缓存块由占用状态变为未占用状态,也即,远端节点释放了该缓存块,则该缓存块对应的目录项的标签将由I变为O。在本发明实施例中,一个标签便可标识一个目录组所包括的全部目录项对应的缓存块的占用状态,相较于现有技术中的目录设计方式而言,可大大节省目录占用的存储空间。
[0114]403、分别为每个目录集合、每个目录组、每条目录项及每个标签设置索引。
[0115]在本发明实施例中,由于目录中包括海量的数据,所以在查询缓存块的占用状态时,若以遍历的方式进行查询则将消耗大量的时间。以本地内存的总存储空间为IT为例,则生成的目录中一共包含1000个目录集合、16000个目录组、234个目录项,若不对目录集合、目录组、目录项及标签设置索引的话,则在查找一个待访问缓存块对应的目标目录项时,将极其耗时。所以在根据上述步骤401和步骤402进行目录设计后,还需为目录集合、目录组、目录项及标签设置索引,以便在海量数据中快速锁定目标目录项所在目录中的位置。
[0116]在为每个目录集合、每个目录组、每条目录项及每个标签设置索引时,可采取用二进制数进行索引的方式。以为目录集合设置索引为例,若存在1000个目录集合,则可用10位的二进制数对1000个目录集合进行索引。依次以0000000000、0000000001、0000000010等对1000个目录集合进行标识。目录组、目录项及标签的设置索引方式同目录集合的设置索引方式一致,此处不再赘述。当然,除了上述以二进制数进行索引的方式外,还可采取其他索引方式,本实施例对此不作具体限定。本发明实施例仅以二进制数进行索引的方式进行举例说明。此外,在如图5所示的目录中,每个目录集合中除包括各个目录组以外,还可包括各个目录组对应的目录组索引信息(Tag),包括目录组索引信息(Tag)的目录集合如图7所示。
[0117]404、存储多个目录集合及多个标签。
[0118]在本发明实施例中,在存储多个目录集合及多个标签时,可将上述各项存储在本地节点的节点控制器上;还可将上述各项存储在于节点控制器连接的其他存储介质上。具体采取何种存储方式本实施例对此不作具体限定。可视情况而定。以本地节点的总存储空间为IT为例,则采用本发明实施例提供的目录设计方式标签的内存消耗为lTB/64byte/lKbit=16Mbit ;Tag 的内存消耗 lK*16*14bit=224Kbit ;目录项的内存消耗1K*16*1K*目录项长度=16Μ*目录项长度。由上述计算可见,该目录设计占用内存有限,完全可以由片上内存来完成。所以相较于现有的目录设计方式而言,大大降低了内存消耗。
[0119]需要说明的是,在通过上述步骤401至404进行层次化的目录设计后,当节点控制器接收到远端节点发送的内存访问请求时,便可根据内存访问请求中携带的信息进行目录访问,从而确定目标目录项对应的缓存块的占用状态,并根据目标目录项对应的缓存块的占用状态,响应远端节点的内存访问请求。详细过程参见下述步骤405至步骤407。
[0120]405、当接收到远端节点发送的内存访问请求时,根据内存访问请求携带的目标目录项的标签索引信息,获取目标目录项所在目录组的标签。
[0121]其中,内存访问请求中包括目标内存的物理地址。该目标内存的物理地址中包括标签索引信息、目录项索引信息及缓存块索引信息。参见图8,以本地节点的总存储空间为IT为例,则目标内存的物理地址共有40bit。其中,标签索引信息占据24bit,目录项索引信息占据lObit,缓存块索引信息占据6bit。
[0122]在本发明实施例中,节点控制器在接收到远端节点发送的内存访问请求后,将根据该内存访问请求携带的相关信息进行目录的访问,也即在存储于自身的目录中查找目标目录项(请求缓存块对应的目录项),或在与其相连的存储有目录的存储介质中查找目标目录项,确定目标目录项对应的缓存块的占用状态。而为了确定目标目录项对应的缓存块的占用状态,还需先确定目标目录项所在目录组的标签。在获取目标目录项所在目录组的标签时,由于内存访问请求中携带目标目录项的标签索引信息,而一个标签索引信息能够唯一标识一个标签,所以根据该标签索引信息便可获取到目标目录项所在目录组的标签。在本发明实施例中,由于在步骤402中为一个目录组分配一个标签,所以通过目标目录项所在目录组的标签,便可确定目标目录项对应的缓存块的占用状态。
[0123]406、根据目标目录项所在目录组的标签,确定目标目录项对应的缓存块的占用状态。
[0124]在本发明实施例中,标签占用lbit。如果目标目录项所在目录组的标签为0,则确定目标目录项对应的缓存块为未占用状态,也即没有任何的远端节点对目标目录项对应的缓存块进行读写操作;如果目标目录项所在目录组的标签为1,则确定目标目录项对应的缓存块为可能态(任意可能的状态),目标目录项对应的缓存块可能被一个远端节点占用,也可能被多个远端节点占用,甚至也可能未被任何远端节点所占用。
[0125]407、基于目标目录项对应的缓存块的占用状态,响应远端节点的内存访问请求。
[0126]在本发明实施例中,若根据上述步骤406确定目标目录项对应的缓存块为未占用状态,则节点控制器可直接分配目标目录项对应的缓存块给远端节点,以供远端节点进行读写操作。若根据上述步骤406确定目标目录项对应的缓存块为可能态,则节点控制器还需向除发送内存访问请求之外的其他远端节点发送侦听消息,以确定是否有远端节点对目标目录项对应的缓存块进行占用。若节点控制器确定有其他远端节点占用了目标目录项对应的缓存块,且其他远端节点允许共享该缓存块,则节点控制器可直接分配目标目录项对应的缓存块给远端节点,以供远端节点进行读写操作。若节点控制器确定有其他远端节点占用了目标目录项对应的缓存块,且其他远端节点不允许共享该缓存块,则节点控制器便不能分配该缓存块给远端节点进行读写操作,针对该种情况,节点控制器可向发送内存访问请求的远端节点回应访问失败信息,以对远端节点进行提醒。
[0127]此外,远端节点在占用缓存块进行读写操作后,一般会立即释放占用的缓存块。而节点控制器对这一情况是未知的,需远端节点主动将缓存块释放消息发送给节点控制器,以便节点控制器根据缓存块释放消息进行标签的更新。若远端节点未将缓存块释放消息发送给节点控制器,则若其他远端节点请求该远端节点之前占用的缓存块,则节点控制器将不会分配对应的缓存块给其他远端节点。为了避免该种情况的发生,节点控制器在响应其他远端节点的内存访问请求时,还需发送侦听消息,以确定是否真正有远端节点占用了请求的缓存块。
[0128]需要说明的是,在进行层次化目录设计之后,除了采取上述步骤405至步骤407所示的基于标签索引信息的目录访问方式外,还可采取基于集合索引信息、目录组索引信息及目录项索引信息的目录访问方式。具体过程详见如图9所示的步骤901至步骤910。
[0129]901、当接收到远端节点发送的内存访问请求时,根据内存访问请求携带的集合索引信息,确定目标目录项所在目录集合。
[0130]其中,内存访问请求中包括目标内存的物理地址。该目标内存的物理地址中包括目录组索引信息、集合索引信息、目录项索引信息及缓存块索引信息。参见图10,以本地节点的总存储空间为IT为例,则目标内存的物理地址共有40bit。其中,目录组索引信息占据14bit,集合索引信息占据lObit,目录项索引信息占据lObit,缓存块索引信息占据6bit。
[0131]在本发明实施例中,节点控制器在接收到远端节点发送的内存访问请求后,将根据该内存访问请求携带的相关信息进行目录的访问,也即在存储于自身的目录中查找目标目录项(请求缓存块对应的目录项),或在与其相连的存储有目录的存储介质中查找目标目录项,确定目标目录项对应的缓存块的占用状态。而为了确定目标目录项对应的缓存块的占用状态,还需先确定目标目录项所在目录集合。在确定目标目录项所在目录集合时,由于内存访问请求中携带集合索引信息,而一个集合索引信息能够唯一标识一个目录集合,所以根据该集合索引信息便可确定目标目录项所在目录集合。
[0132]902、根据目录组索引信息,在目标目录项所在目录集合中查找目标目录项所在目录组;如果查找到目标目录项所在目录组,则执行步骤903 ;如果未查找到目标目录项所在目录组,则执行步骤905。[0133]在本发明实施例中,在确定目标目录项所在目录集合后,接下来便要在目标目录项所在目录集合中查找目标目录项所在目录组。在查找目标目录项所在目录组时,具体可采用下述方式:由于目标目录项所在目录集合中的每个目录组均对应一个目录组索引信息(Tag),所以可将内存访问请求携带的目录索引信息同目标目录项所在目录集合中每一个目录组的目录组索引信息进行比较;如果内存访问请求携带的目录索引信息同目标目录项所在目录集合中一个目录组的目录组索引信息相同,则执行下述步骤903;如果内存访问请求携带的目录索引信息同目标目录项所在目录集合中任一个目录组的目录组索引信息均不相同,则执行下述步骤905。
[0134]903、根据目录项索引信息确定目标目录项;根据目标目录项所在目录组的标签,确定目标目录项对应的缓存块的占用状态。
[0135]由于已根据上述步骤901确定了目标目录项所在目录集合,根据上述步骤902确定了目标目录项所在目录组,所以本步骤仅需根据目录项索引信息对目标目录项进行定位即可。由于一个目录项索引信息可对目录组中一个目录项进行唯一标识,所以根据目录项索引信息遍历目标目录项所在目录组,便可查找到目标目录项。由于目标目录项所在目录组对应一个标签,所以根据目标目录项所在目录组的标签,便可确定目标目录想对应的缓存块的占用状态。确定目标目录项对应的缓存块的占用状态的方式同上述步骤406 —致,此处不再赘述。在执行完本步骤后,执行下述步骤904。
[0136]904、基于目标目录项对应的缓存块的占用状态,响应远端节点的内存访问请求。
[0137]该步骤同上述407同理,此处不再赘述。
[0138]905、在目标目录项所在目录集合中,查找第一目录组,第一目录组为全部目录项均处于未占用状态的目录组;如果查找到第一目录组,则执行步骤907 ;如果未查找到第一目录组,则执行步骤908。
[0139]由于未在目标目录项所在目录集合中,查找到目标目录项所在目录组,因此要进行目录组的替换操作,以便后续过程中节点控制器根据目标目录项对应的缓存块的占用状态响应远端节点的内存访问请求。在进行目录替换操作时,首先在目标目录项所在目录集合中查找第一目录组,也即第一目录组中所有目录项对应的缓存块均为被任何远端节点占用;若在目标目录项所在目录集合中查找到第一目录组,则执行下述步骤906 ;若在目标目录项所在目录集合中未查找到第一目录组,则执行下述步骤908。
[0140]906、根据第一目录组对应的目录组索引信息和目标目录项的集合索引信息,生成第一标签索引信息。
[0141]在本发明实施例中,在根据第一目录组对应的目录组索引信息和目标目录项的集合索引信息,生成第一标签索引信息时,具体可采取下述方式实现:
[0142]将目录组索引信息的多个数据位置于集合索引信息的多个数据位之前,组合成新的数据位;将新的数据位确定为第一标签索引信息的数据位。
[0143]以本地内存的总存储空间为IT为例,则第一目录组的目录组索引信息为14位,目标目录项的集合索引信息为10位。以第一目录组的目录组索引信息为
00000000000011,目标目录项的集合索引信息为1000000001为例,则第一标签索引信息为000000000000111000000001。在执行完本步骤后,执行下述步骤907。
[0144]907、根据第一标签索引信息,获取第一标签;更新第一标签,并将第一目录组对应的目录组索引信息更新为内存访问请求携带的目录组索引信息。
[0145]在本发明实施例中,由于一个标签索引信息可对一个标签进行唯一标识,所以根据第一标签的索引信息即可快速在存储的多个标签中获取到第一标签。在获取到第一标签后,对第一标签进行更新,即将第一标签置O。并将第一目录组对应的目录组索引信息更新为内存访问请求携带的目录组索引信息。也即,将第一目录组对应的目录组索引信息和标签索引信息进行了替换,得到了一个新的目录组。
[0146]908、根据预设策略查找第二目录组。
[0147]在本发明实施例中,预设策略可为LRU (Least Recently Used近期最少使用)策略。也即在查找第二目录组时,可将目标目录项所在目录集合中近期最少被访问的目录组作为第二目录组。若近期最少被访问的目录组存在多个,比如,近期访问次数为O次的目录组存在多个,则可在多个目录组任意选择一个目录组作为第二目录组。其中,近期可指代当前时间与前一个小时或前一分钟或前一秒中之间的时间范围,本实施例对近期所指代的时间范围大小不进行具体限定。
[0148]909、根据第二目录组对应的目录组索引信息和目标目录项的集合索引信息,生成第二标签索引信息。
[0149]该步骤同上述步骤906同理,此处不再赘述。
[0150]910、根据第二标签索引信息,获取第二标签;更新第二标签,并将第二目录组对应的目录组索引信息更新为内存访问请求携带的目录组索引信息。
[0151]在本发明实施例中,由于一个标签索引信息可对一个标签进行唯一标识,所以根据第二标签的索引信息即可快速在存储的多个标签中获取到第二标签。在获取到第二标签后,对第二标签进行更新,即将第二标签置I。并将第二目录组对应的目录组索引信息更新为内存访问请求携带的目录组索引信息。也即,将第二目录组对应的目录组索引信息和标签索引信息进行了替换,得到了一个新的目录组。
[0152]需要说明的是,本地内存除了可由节点控制器进行控制之外,还可由HA(HomeAgent,本地代理)进行控制。其中,HA 为 NUMA (Non Uniform Memory Access Achitecture,非一致访问分布共享存储技术)系统中用于管理系统内存的节点,可以认为是一个维护CC协议的内存控制器。如果图1中本地内存104由HA进行管理,HA通过本地网络106与节点控制器103相连,则节点控制器103此时就是一个网络互连芯片。
[0153]本发明实施例提供的方法,在根据缓存块的数目,建立包括多个目录项和多个目录组的层次化目录集合,并为每个目录组配置一个标签后,可实现一个标签标识一个目录组中全部目录组对应的缓存块的占用状态,从而节省了目录占用的存储空间,仅用片上内存便可对生成的目录进行存储,无需引入片外内存,不但节省了设计成本,降低了目录设计的复杂度,还降低了远端节点对本地内存的访问延时,提升了多处理器系统的性能。
[0154]图11是本发明实施例提供的一种目录设计装置,参见图11,该装置包括:目录建立模块1101、标签配置模块1102、索引设置模块1103、存储模块1104。
[0155]其中,目录建立模块1101,用于根据缓存块的数目,建立多个目录集合,每个目录集合中包括多个目录组,每个目录组中包括多个目录项,一个目录项与一个缓存块对应;标签配置模块1102目录建立模块1101连接,用于分别为多个目录组配置标签,标签用于标识目录组所包括的所有目录项对应的缓存块的占用状态;索引设置模块1103与标签配置模块1102连接,用于分别为每个目录集合、每个目录组、每条目录项及每个标签设置索引;存储模块1104索引设置模块1103连接,用于存储多个目录集合及多个标签。
[0156]可选地,该装置还包括:
[0157]标签获取模块,用于当接收到远端节点发送的内存访问请求时,根据内存访问请求携带的目标目录项的标签索引信息,获取目标目录项所在目录组的标签;
[0158]状态确定模块,用于根据目标目录项所在目录组的标签,确定目标目录项对应的缓存块的占用状态;
[0159]响应模块,用于基于目标目录项对应的缓存块的占用状态,响应远端节点的内存访问请求。
[0160]可选地,该装置还包括:
[0161]目录集合确定模块,用于当接收到远端节点发送的内存访问请求时,根据内存访问请求携带的集合索引信息,确定目标目录项所在目录集合;
[0162]目录组查找模块,用于根据内存访问请求携带的目录组索引信息,在目标目录项所在目录集合中查找目标目录项所在目录组;
[0163]目录项确定模块,用于当查找到目标目录项所在目录组时,根据内存访问请求携带的目录项索引信息确定目标目录项;
[0164]状态确定模块,用于根据目标目录项所在目录组的标签,确定目标目录项对应的缓存块的占用状态;
[0165]响应模块,用于基于目标目录项对应的缓存块的占用状态,响应远端节点的内存访问请求。
[0166]可选地,该装置还包括:
[0167]目录组查找模块,用于当未查找到目标目录项所在目录组时,在目标目录项所在目录集合中,查找第一目录组,第一目录组为全部目录项均处于未占用状态的目录组;
[0168]索引信息生成模块,用于如果查找到第一目录组,则根据第一目录组对应的目录组索弓I信息和目标目录项的集合索弓I信息,生成第一标签索弓I信息;
[0169]标签获取模块,用于根据第一标签索引信息,获取第一标签;
[0170]更新模块,用于更新第一标签,并将第一目录组对应的目录组索引信息更新为内存访问请求携带的目录组索引信息。
[0171]可选地,索引信息生成模块,用于将目录组索引信息的多个数据位置于集合索引信息的多个数据位之前,组合成新的数据位;将新的数据位确定为第一标签索引信息的数据位。
[0172]可选地,该装置还包括:
[0173]目录组查找模块,用于当未查找到第一目录组时,根据预设策略查找第二目录组;
[0174]索引信息生成模块,用于根据第二目录组对应的目录组索引信息和目标目录项的集合索引信息,生成第二标签索引信息;
[0175]标签获取模块,用于根据第二标签索引信息,获取第二标签;
[0176]更新模块,用于更新第二标签,并将第二目录组对应的目录组索引信息更新为内存访问请求携带的目录组索引信息。[0177]综上所述,本发明实施例提供的装置,在根据缓存块的数目,建立包括多个目录项和多个目录组的层次化目录集合,并为每个目录组配置一个标签后,可实现一个标签标识一个目录组中全部目录组对应的缓存块的占用状态,从而节省了目录占用的存储空间,仅用片上内存便可对生成的目录进行存储,无需引入片外内存,不但节省了设计成本,降低了目录设计的复杂度,还降低了远端节点对本地内存的访问延时,提升了多处理器系统的性倉泛。
[0178]需要说明的是:上述实施例提供的目录设计装置在进行目录设计时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的目录设计装置与目录设计法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
[0179]上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0180]本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0181]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种目录设计方法,其特征在于,所述方法包括: 根据缓存块的数目,建立多个目录集合,每个目录集合中包括多个目录组,每个目录组中包括多个目录项,一个目录项与一个缓存块对应; 分别为所述多个目录组配置标签,所述标签用于标识所述目录组所包括的所有目录项对应的缓存块的占用状态; 分别为每个目录集合、每个目录组、每条目录项及每个标签设置索引; 存储多个目录集合及多个标签。
2.根据权利要 求1所述的方法,其特征在于,所述存储多个目录集合及多个标签之后,所述方法还包括: 当接收到远端节点发送的内存访问请求时,根据所述内存访问请求携带的目标目录项的标签索引信息,获取所述目标目录项所在目录组的标签; 根据所述目标目录项所在目录组的标签,确定所述目标目录项对应的缓存块的占用状态; 基于所述目标目录项对应的缓存块的占用状态,响应所述远端节点的内存访问请求。
3.根据权利要求1所述的方法,其特征在于,所述存储多个目录集合及多个标签之后,所述方法还包括: 当接收到远端节点发送的内存访问请求时,根据所述内存访问请求携带的集合索引信息,确定所述目标目录项所在目录集合; 根据所述内存访问请求携带的目录组索引信息,在所述目标目录项所在目录集合中查找所述目标目录项所在目录组; 如果查找到所述目标目录项所在目录组,则根据所述内存访问请求携带的目录项索引信息确定所述目标目录项; 根据所述目标目录项所在目录组的标签,确定所述目标目录项对应的缓存块的占用状态; 基于所述目标目录项对应的缓存块的占用状态,响应所述远端节点的内存访问请求。
4.根据权利要求3所述的方法,其特征在于,所述在所述目标目录项所在目录集合中查找所述目标目录项所在目录组之后,所述方法还包括: 如果未查找到所述目标目录项所在目录组,则在所述目标目录项所在目录集合中,查找第一目录组,所述第一目录组为全部目录项均处于未占用状态的目录组; 如果查找到所述第一目录组,则根据所述第一目录组对应的目录组索引信息和所述目标目录项的集合索引信息,生成第一标签索引信息; 根据所述第一标签索引信息,获取第一标签; 更新所述第一标签,并将所述第一目录组对应的目录组索引信息更新为所述内存访问请求携带的目录组索引信息。
5.根据权利要求4所述的方法,其特征在于,所述根据所述第一目录组对应的目录组索引信息和所述目标目录项的集合索引信息,生成第一标签索引信息,包括: 将所述目录组索引信息的多个数据位置于所述集合索引信息的多个数据位之前,组合成新的数据位; 将所述新的数据位确定为所述第一标签索引信息的数据位。
6.根据权利要求4所述的方法,其特征在于,所述在所述目标目录所在的目录集合中,查找第一目录组之后,所述方法还包括: 如果未查找到所述第一目录组,则根据预设策略查找第二目录组; 根据所述第二目录组对应的目录组索引信息和所述目标目录项的集合索引信息,生成第二标签索引信息; 根据所述第二标签索引信息,获取第二标签; 更新所述第二标签,并将所述第二目录组对应的目录组索引信息更新为所述内存访问请求携带的目录组索引信息。
7.一种目录设计装置,其特征在于,所述装置包括: 目录建立模块,用于根据缓存块的数目,建立多个目录集合,每个目录集合中包括多个目录组,每个目录组中包括多个目录项,一个目录项与一个缓存块对应; 标签配置模块,用于分别为所述多个目录组配置标签,所述标签用于标识所述目录组所包括的所有目录项对应的缓存块的占用状态; 索引设置模块,用于分别为每个目录集合、每个目录组、每条目录项及每个标签设置索引 ; 存储模块,用于存储多个目录集合及多个标签。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括: 标签获取模块,用于当接收到远端节点发送的内存访问请求时,根据所述内存访问请求携带的目标目录项的标签索引信息,获取所述目标目录项所在目录组的标签; 状态确定模块,用于根据所述目标目录项所在目录组的标签,确定所述目标目录项对应的缓存块的占用状态; 响应模块,用于基于所述目标目录项对应的缓存块的占用状态,响应所述远端节点的内存访问请求。
9.根据权利要求7所述的装置,其特征在于,所述装置还包括: 目录集合确定模块,用于当接收到远端节点发送的内存访问请求时,根据所述内存访问请求携带的集合索引信息,确定所述目标目录项所在目录集合; 目录组查找模块,用于根据所述内存访问请求携带的目录组索引信息,在所述目标目录项所在目录集合中查找所述目标目录项所在目录组; 目录项确定模块,用于当查找到所述目标目录项所在目录组时,根据所述内存访问请求携带的目录项索引信息确定所述目标目录项; 所述状态确定模块,用于根据所述目标目录项所在目录组的标签,确定所述目标目录项对应的缓存块的占用状态; 所述响应模块,用于基于所述目标目录项对应的缓存块的占用状态,响应所述远端节点的内存访问请求。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括: 所述目录组查找模块,用于当未查找到所述目标目录项所在目录组时,在所述目标目录项所在目录集合中,查找第一目录组,所述第一目录组为全部目录项均处于未占用状态的目录组; 索引信息生成模块,用于如果查找到所述第一目录组,则根据所述第一目录组对应的目录组索引信息和所述目标目录项的集合索引信息,生成第一标签索引信息; 所述标签获取模块,用于根据所述第一标签索引信息,获取第一标签; 更新模块,用于更新所述第一标签,并将所述第一目录组对应的目录组索引信息更新为所述内存访问请求携带的目录组索引信息。
11.根据权利要求10所述的装置,其特征在于,所述索引信息生成模块,用于将所述目录组索引信息的多个数据位置于所述集合索引信息的多个数据位之前,组合成新的数据位;将所述新的数据位确定为所述第一标签索引信息的数据位。
12.根据权利要求10所述的装置,其特征在于,所述装置还包括: 所述目录组查找模块,用于当未查找到所述第一目录组时,根据预设策略查找第二目录组; 索引信息生成模块,用于根据所述第二目录组对应的目录组索引信息和所述目标目录项的集合索引信息,生成第二标签索引信息; 所述标签获取模块,用于根据所述第二标签索引信息,获取第二标签; 所述更新模块,用于更新所述第二标签,并将所述第二目录组对应的目录组索引信息更新为所述内存访问请求携带的目录组索引信息。
【文档编号】G06F17/30GK103970678SQ201410159502
【公开日】2014年8月6日 申请日期:2014年4月21日 优先权日:2014年4月21日
【发明者】赵亚飞, 姚策, 褚小伟 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1