一种缓存一致性管理方法及节点控制器与流程

文档序号:12863725阅读:211来源:国知局
一种缓存一致性管理方法及节点控制器与流程

本发明涉及多处理器系统技术领域,尤其涉及一种缓存一致性管理方法及节点控制器。



背景技术:

多处理器系统是指包含两台或多台功能相近的处理器,处理器之间彼此可以交换数据,所有处理器共享内存,i/o设备,控制器,以及外部设备,整个硬件系统由统一的操作系统控制,在处理器和程序之间实现作业、任务、程序、数组极其元素各级的全面并行。

大多数商用高速缓存一致性非均匀存储访问(cache-coherentnon-uniformmemoryaccess,cc-numa)多处理机系统使用基于目录的高速缓存一致性协议,cc-numa多处理机系统的存储器在物理上是分布的,所有的局部存储器构成了共享的全局地址空间。cc-numa多处理机系统最显著的优点是程序员无需明确地在节点上分配数据,系统的硬件和软件会自动在各节点上分配数据。在程序运行过程中,高速缓存一致性硬件会自动地将数据移至需要它的地方。

请参阅1,图1为现有技术中cc-numa多处理器系统的架构示意图,该系统由多个节点(如:node0、node1、node2…noden)构成网络互联,每个节点均包括:节点控制器(如:node0中的nc0和node2中的nc2)和至少一个处理器(如:cpu0…cpun),每个处理器均包括:内存(dual-inline-memory-modules,dimm)和三级缓存l3。

在cc-numa多处理器系统中,各节点中的l3总容量在几百mb左右,而内存总容量通常在几十tb左右。通常地,处理器缓存的数据绝大部分是位于内存中的,只有少数的数据是位于l3中,而数据缓存在跨节点的l3中则更少。为了记录跨节点缓存的数据,节点控制器上会设置目录(directory,dir),用于存储本节点内数据被其他节点处理器缓存的情况。如:node2中 的数据被node0中的cpu0的l3缓存,则nc2对应的目录上会记录此数据被node0缓存,并记录其缓存状态为独占或共享。

请参阅图2,图2为现有技术中cc-numa多处理器系统中的目录的结构示意图,该目录采用缓存cache结构,其包括:由j组group(如:group0、group1、group2、group3…groupj-2和groupj-1)m路wag(如:wag0、wag1…wagm-2和wagm-1)标签项tagentry组成的标签矩阵tagarray和由j组(如:group0、group1、group2、group3…groupj-2和groupj-1)m路(如:wag0、wag1…wagm-2和wagm-1)向量项vectorentry组成的向量矩阵vectorarray。其中,m、j均为自然数,tagentry与vectorentry是一一对应的,每个tagentry均包括:标签tag字段和占用状态state字段,tag字段为系统所要访问的数据对应的内存地址的高位地址,state字段包括独占状态和共享状态,每个vectorentry均包括:有效位v字段和共享向量sharevector字段,该sharevector字段用于指示独占或共享数据的节点。

系统在访问跨节点数据时,节点控制器会根据该数据对应的内存地址在目录中进行查询,若查询到该内存地址对应的节点时,则从该节点中提取该数据。内存地址包括:tag字段、索引index字段和偏移offset字段,具体地,节点控制器首先会根据index字段在tagarray中确定第一分组,并根据index字段在vectorarray中确定第二分组,然后将第一分组中所有tagentry对应的tag字段送往比较器compare与内存地址对应的tag字段进行比较,若命中,则在第一分组中确定内存地址对应的tagentry。由于tagentry与vectorentry是一一对应的,所以可根据该tagentry在第二分组中确定内存地址对应的vectorentry。最后节点控制器从该vectorentry指示独占或共享数据的节点中提取内存地址对应的数据。

上述目录,tagentry与vectorentry是一一对应的,在数据的查找上,该目录的精度是最高的,但是目录的容量也是最大的。目录的容量越大,面积功耗也就越大,查询时间也就越长,查询效率也就越低。



技术实现要素:

本发明实施例提供了一种缓存一致性管理方法及节点控制器,在不影响目录查询精度的情况下,对目录的容量进行压缩,从而减少查询时间,提高查询效率。

本发明实施例的第一方面提供一种缓存一致性管理方法,所述方法应用于多处理器系统,所述多处理器系统包含第一表单、第二表单和至少两个节点,每一个所述节点中包含至少一个处理器,所述方法包括:

根据数据的地址信息,在所述第一表单中确定与所述地址信息对应的第一表项,所述第一表项包含第一字段和第二字段,所述第一字段用于记录所述数据的占用状态,若所述第一字段为独占状态,则所述第二字段用于指示独占所述数据的节点;

若所述第一字段为共享状态,则根据所述数据的地址信息和所述第二字段,在所述第二表单中确定第二表项,所述第二表项中包含第三字段,所述第三字段用于指示共享所述数据的节点。

通过独占状态和共享状态两种查询机制,分别从两条路径上对目录进行查询,从而得到独占或共享数据的节点,本发明实施例在不影响目录查询精度的情况下,对目录的容量进行压缩,从而减少查询时间,提高查询效率。

结合本发明实施例的第一方面,在本发明实施例的第一方面的第一种实现方式中,所述地址信息包含标签tag字段和索引index字段;

根据数据的地址信息,在所述第一表单中确定与所述地址信息对应的第一表项包括:

根据所述index字段在所述第一表单中确定与所述地址信息对应的第一分组,并根据所述tag字段在所述第一分组中确定与所述地址信息对应的第一表项;

所述根据所述数据的地址信息和所述第二字段,在所述第二表单中确定第二表项包括:

根据所述index字段在所述第二表单中确定第二分组,并根据所述第二字段在所述第二分组中确定所述第二表项。

index字段是用于在所述第一表单中确定第一分组,以及用于在所述第二 表单中确定第二分组,tag字段是用于在第一分组中确定第一表项,如果第一表项中的第一字段为独占状态,则第一表项中的第二字段为owner字段,该owner字段用于指示独占该数据的节点;如果第一字段为共享状态,则第二字段为ptr指针,该ptr指针可在第二分组中确定第二表项,第二表项中的第三字段用于指示共享该数据的节点。

结合本发明实施例的第一方面的第一种实现方式,在本发明实施例的第一方面的第二种实现方式中,所述index字段包含m位信息,其中m为大于1的正整数;

所述根据所述index字段在所述第二表单中确定第二分组包括:

根据所述index字段中的n位信息在所述第二表单中确定第二分组,其中n为大于0且小于m的正整数。

为了实现从纵向上对第二表单进行压缩,节点控制器根据index字段在第一表单中确定第一分组以及在第二表单中确定第二分组时,所采用的index字段略有不同。节点控制器在第二表单中确定第二分组时所使用的index字段中的二进制地址位数比在第一表单中确定第一分组时所使用的index字段中的二进制地址位数要少。这样可以使第二表单中的行数做出很大的压缩。

结合本发明实施例的第一方面、本发明实施例的第一方面的第一种至第二种实现方式中的任意一种,在本发明实施例的第一方面的第三种实现方式中,根据数据的地址信息,在所述第一表单中确定与所述地址信息对应的第一表项之前,所述方法还包括:

在所述至少两个节点中的第一节点缓存所述数据时,根据所述数据在所述第一表单中创建所述第一表项,将所述第一字段设置为独占状态,并将所述第二字段设置为指示所述第一节点。

当本节点中的数据第一次被跨节点中的第一节点缓存时,该数据被第一节点独占。为此,节点控制器会在目录的第一表单中创建记录该数据的第一表项,并将第一表项中的第一字段设置为独占状态,还将第一表项中的第二字段设置为指示该第一节点的owner指针。由于该数据被第一节点独占,所以此时无需在目录的第二表单中创建第二表项。

结合本发明实施例的第一方面的第三种实现方式,在本发明实施例的第一方面的第四种实现方式中,在根据所述数据在所述第一表单中创建所述第一表项之后,所述方法还包括:

在所述至少两个节点中的第二节点缓存所述数据时,根据所述地址信息在所述第一表单中确定所述第一表项;

若所述第一字段为独占状态,则将所述第一字段设置为共享状态,并根据所述地址信息在所述第二表单中确定第二分组,并在所述第二分组中创建所述第二表项,在所述第三字段中设置所述第一节点和所述第二节点的指示信息,并根据所述第二表项在所述第二表单中的位置信息设置所述第二字段;

若所述第一字段为共享状态,则根据所述地址信息和所述第二字段在所述第二表单中确定所述第二表项,并在所述第三字段中添加所述第二节点的指示信息。

当上述数据被第一节点独占之后,又有第二节点缓存该数据时,则该数据将由独占状态变为共享状态,那么此时节点控制器会对该数据对应的第一表项进行修改,如:将第一表项中的第一字段修改为共享状态,并将第一表项中的第二字段修改为ptr指针。同时节点控制器还将根据该数据的地址信息在第二表单中创建第二表项,并在第二表项中的第三字段中设置第一节点和第二节点的指示信息。

若在第二节点缓存该数据之前,第一节点独占的该数据已经修改为共享状态,那么此时节点控制器会在该数据对应的第二表项中修改第三字段,即添加第二节点的指示信息。当然,节点控制器还可以不修改第二表项的内容,而是在第二表单中另外创建第四表项,并在第四表项中的第四字段中设置第二节点的指示信息。具体此处不做限定。

结合本发明实施例的第一方面的第三种实现方式,在本发明实施例的第一方面的第五种实现方式中,在根据所述数据在所述第一表单中创建所述第一表项之后,所述方法还包括:

在所述至少两个节点中的第二节点缓存所述数据时,根据所述地址信息在所述第一表单中确定所述第一表项;

若所述第一字段为独占状态,则将所述第一字段设置为共享状态,并根据所述地址信息在所述第二表单中确定第二分组,并在所述第二分组中查找指示信息包含所述第一节点和所述第二节点的第三表项,并将所述第三表项确定为所述第二表项,并根据所述第二表项在所述第二表单中的位置信息设置所述第二字段。

当第一节点独占的数据被第二节点共享时,此时也可以不在第二表单中创建第二表项,而是根据数据的地址信息在第二表单中查找是否有包含第一节点和第二节点指示信息的第三表项,如果有,那么为了避免第二表单出现冗余,节点控制器可以不必在第二表单中创建与第三表项相同的第二表项,而是将该第三表项当作第二表项,并根据该第三表项在第二表单中的位置信息设置第一表项的第二字段。这样也可以在一定程度上对第二表单进行压缩,从而降低整个目录的容量。

结合本发明实施例的第一方面、本发明实施例的第一方面的第一种至第二种实现方式中的任意一种,在本发明实施例的第一方面的第六种实现方式中,根据数据的地址信息,在所述第一表单中确定与所述地址信息对应的第一表项之前,所述方法还包括:

在所述至少两个节点中的第一节点缓存所述数据时,根据所述数据在所述第一表单中创建所述第一表项,将所述第一字段设置为共享状态,并根据所述地址信息在所述第二表单中确定第二分组,并在所述第二分组中查找指示信息包含所述第一节点的第三表项,并将所述第三表项确定为所述第二表项,并根据所述第二表项在所述第二表单中的位置信息设置所述第二字段。

数据在第一次缓存时,也有可能是以共享状态缓存,那么节点控制器需要在第一表单中为该数据创建第一表项,但是可以不急于在第二表单中创建第二表项,而是先在第二表单中查找是否有包含第一节点指示信息的第三表项,如果有,那么可以按照上述方法共用该第三表项,从而避免第二表单出现冗余。当然,在第二表单中查找不到包含第一节点指示信息的第三表项的情况下,则需要在第二表单中创建第二表项。

结合本发明实施例的第一方面、本发明实施例的第一方面的第一种至第 二种实现方式中的任意一种,在本发明实施例的第一方面的第七种实现方式中,在所述第一表单中确定与所述地址信息对应的第一表项之前,所述方法还包括:

在所述至少两个节点中的第一节点缓存所述数据时,根据所述数据在所述第一表单中创建所述第一表项,将所述第一字段设置为共享状态,并根据所述地址信息在所述第二表单中确定第二分组,并在所述第二分组中创建所述第二表项,在所述第三字段中设置所述第一节点的指示信息,并根据所述第二表项在所述第二表单中的位置信息设置所述第二字段。

当本节点中的数据第一次被跨节点中的第一节点缓存时,该数据也可以是被第一节点共享的。为此,节点控制器会在目录的第一表单中创建记录该数据的第一表项,并将第一表项中的第一字段设置为共享状态,还将在目录的第二表单中创建第二表项,并在第二表项的第三字段中设置第一节点的指示信息,同时还根据第二表项在第二表单中的位置信息设置第一表项的第二字段,该第二字段采用ptr指针。

结合本发明实施例的第一方面的第六种实现方式或第七种实现方式,在本发明实施例的第一方面的第八种实现方式中,在根据所述数据在所述第一表单中创建所述第一表项之后,所述方法还包括:

在所述至少两个节点中的第二节点缓存所述数据时,根据所述地址信息在所述第一表单中确定所述第一表项,根据所述数据的地址信息和所述第二字段,在所述第二表单中确定第二表项,并在所述第三字段中添加所述第二节点的指示信息。

当第一节点共享的数据再一次被第二节点共享时,节点控制器可以对该数据对应的第二表项中的第三字段进行修改,即添加第二节点的指示信息。当然,节点控制器还可以不修改第二表项的内容,而是在第二表单中另外创建第四表项,并在第四表项中的第四字段中设置第二节点的指示信息。具体此处不做限定。

本发明实施例第二方面提供了一种节点控制器,应用于多处理器系统,所述多处理器系统包含第一表单、第二表单和至少两个节点,每一个所述节 点中包含至少一个处理器,所述节点控制器包括:

第一确定模块,用于根据数据的地址信息,在所述第一表单中确定与所述地址信息对应的第一表项,所述第一表项包含第一字段和第二字段,所述第一字段用于记录所述数据的占用状态,当所述第一字段为独占状态时,则所述第二字段用于指示独占所述数据的节点;

第二确定模块,用于当所述第一字段为共享状态时,根据所述数据的地址信息和所述第二字段,在所述第二表单中确定第二表项,所述第二表项中包含第三字段,所述第三字段用于指示共享所述数据的节点。

结合本发明实施例的第二方面,在本发明实施例的第二方面的第一种实现方式中,所述地址信息包含tag字段和index字段;

所述第一确定模块用于根据数据的地址信息,在所述第一表单中确定与所述地址信息对应的第一表项包括:

第一确定模块用于根据所述index字段在所述第一表单中确定与所述地址信息对应的第一分组,并根据所述tag字段在所述第一分组中确定与所述地址信息对应的第一表项;

所述第二确定模块用于当所述第一字段为共享状态时,根据所述数据的地址信息和所述第二字段,在所述第二表单中确定第二表项包括:

第二确定模块用于根据所述index字段在所述第二表单中确定第二分组,并根据所述第二字段在所述第二分组中确定所述第二表项。

结合本发明实施例的第二方面的第一种实现方式,在本发明实施例的第二方面的第二种实现方式中,所述index字段包含m位信息,其中m为大于1的正整数;

第二确定模块用于根据所述index字段在所述第二表单中确定第二分组,并根据所述第二字段在所述第二分组中确定所述第二表项包括:

第二确定模块用于根据所述index字段中的n位信息在所述第二表单中确定第二分组,其中n为大于0且小于m的正整数。

结合本发明实施例的第二方面、本发明实施例的第二方面的第一种至第二种实现方式中的任意一种,在本发明实施例的第二方面的第三种实现方式 中,所述节点控制器还包括:创建模块和设置模块;

所述第一确定模块根据数据的地址信息,在所述第一表单中确定与所述地址信息对应的第一表项之前,所述创建模块用于在所述至少两个节点中的第一节点缓存所述数据时,根据所述数据在所述第一表单中创建所述第一表项,所述设置模块用于将所述第一字段设置为独占状态,并将所述第二字段设置为指示所述第一节点。

结合本发明实施例的第二方面的第三种实现方式,在本发明实施例的第二方面的第四种实现方式中,所述创建模块根据所述数据在所述第一表单中创建所述第一表项之后,所述第一确定模块还用于在所述至少两个节点中的第二节点缓存所述数据时,根据所述地址信息在所述第一表单中确定所述第一表项;

若所述第一字段为独占状态,则所述设置模块还用于将所述第一字段设置为共享状态,所述第二确定模块还用于根据所述地址信息在所述第二表单中确定第二分组,所述创建模块还用于在所述第二分组中创建所述第二表项,所述设置模块还用于在所述第三字段中设置所述第一节点和所述第二节点的指示信息,并根据所述第二表项在所述第二表单中的位置信息设置所述第二字段;

若所述第一字段为共享状态,则所述第二确定模块还用于根据所述地址信息和所述第二字段在所述第二表单中确定所述第二表项,所述设置模块还用于在所述第三字段中添加所述第二节点的指示信息。

结合本发明实施例的第二方面的第三种实现方式,在本发明实施例的第二方面的第五种实现方式中,所述节点控制器还包括:查找模块;

所述创建模块根据所述数据在所述第一表单中创建所述第一表项之后,第一确定模块还用于在所述至少两个节点中的第二节点缓存所述数据时,根据所述地址信息在所述第一表单中确定所述第一表项;

若所述第一字段为独占状态,则所述设置模块还用于将所述第一字段设置为共享状态,所述第二确定模块还用于根据所述地址信息在所述第二表单中确定第二分组,所述查找模块用于在所述第二分组中查找指示信息包含所 述第一节点和所述第二节点的第三表项,所述第二确定模块还用于将所述第三表项确定为所述第二表项,所述设置模块还用于根据所述第二表项在所述第二表单中的位置信息设置所述第二字段。

结合本发明实施例的第二方面、本发明实施例的第二方面的第一种至第二种实现方式中的任意一种,在本发明实施例的第二方面的第六种实现方式中,所述节点控制器还包括:创建模块、设置模块和查找模块;

所述第一确定模块根据数据的地址信息,在所述第一表单中确定与所述地址信息对应的第一表项之前,所述创建模块用于在所述至少两个节点中的第一节点缓存所述数据时,根据所述数据在所述第一表单中创建所述第一表项,所述设置模块用于将所述第一字段设置为共享状态,所述第二确定模块还用于根据所述地址信息在所述第二表单中确定第二分组,所述查找模块用于在所述第二分组中查找指示信息包含所述第一节点的第三表项,所述第二确定模块还用于将所述第三表项确定为所述第二表项,所述设置模块还用于根据所述第二表项在所述第二表单中的位置信息设置所述第二字段。

结合本发明实施例的第二方面、本发明实施例的第二方面的第一种至第二种实现方式中的任意一种,在本发明实施例的第二方面的第七种实现方式中,所述节点控制器还包括:创建模块和设置模块;

所述第一确定模块根据数据的地址信息,在所述第一表单中确定与所述地址信息对应的第一表项之前,所述创建模块用于在所述至少两个节点中的第一节点缓存所述数据时,根据所述数据在所述第一表单中创建所述第一表项,所述设置模块用于将所述第一字段设置为共享状态,所述第二确定模块还用于根据所述地址信息在所述第二表单中确定第二分组,所述创建模块还用于在所述第二分组中创建所述第二表项,所述设置模块还用于在所述第三字段中设置所述第一节点的指示信息,并根据所述第二表项在所述第二表单中的位置信息设置所述第二字段。

结合本发明实施例的第二方面的第六种实现方式或第七种实现方式,在本发明实施例的第二方面的第八种实现方式中,所述创建模块根据所述数据在所述第一表单中创建所述第一表项之后,所述第一确定模块还用于在所述 至少两个节点中的第二节点缓存所述数据时,根据所述地址信息在所述第一表单中确定所述第一表项;所述第二确定模块还用于根据所述数据的地址信息和所述第二字段,在所述第二表单中确定第二表项,所述设置模块还用于在所述第三字段中添加所述第二节点的指示信息。

本发明实施例第三方面提供了一种节点控制器,包括:处理器、存储器和总线;

所述存储器用于存储执行指令,所述处理器与所述存储器通过所述总线连接,当所述存储器运行时,所述处理器执行所述存储器存储的所述执行指令,以使所述节点控制器执行如本发明实施例的第一方面至第一方面的第八种实现方式中的任意一种所述的方法。

本发明实施例提供的技术方案中,通过独占状态和共享状态两种机制,分别从两条路径上对目录进行查询,从而得到独占或共享数据的节点,因此相对于现有技术,本发明实施例在不影响目录查询精度的情况下,对目录的容量进行压缩,从而减少查询时间,提高查询效率。

附图说明

图1为现有技术中cc-numa多处理器系统的架构示意图;

图2为现有技术中cc-numa多处理器系统中的目录的结构示意图;

图3为本发明实施例中cc-numa多处理器系统中改进后的目录的结构示意图;

图4为本发明实施例中缓存一致性管理方法一个实施例的步骤流程图;

图5为发明实施例中节点控制器一个实施例的模块框图;

图6为本发明实施例中节点控制器一个实施例的硬件结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创 造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

在多处理器系统中,节点控制器上设置的目录在设计时,会面临容量和精度的选择问题,目录容量大,则精度高,但是面积功耗大;目录容量小,则精度低或目录溢出较多,目录溢出将导致远端数据无效,会严重影响系统性能。

通过对目录的数据分析发现,虽然整个多处理器系统可以共享数据,但是在一小段时间内,有很大比例的数据是处于独占状态的,约为90%,也就是说,只有一个节点缓存此数据。另外,由于程序访问的局部性,应用程序总是连续的访问某一小段地址,也就是说,连续的一小段地址的目录极大可能是相同的,即被同一个节点缓存。

从上述分析可以看出,目录表项存在冗余和空间的浪费。为此,本发明实施例在不影响目录查询精度的情况下,从两方面对目录进行优化,一是通过独占状态和共享状态两种查询机制,分别从两条路径上对目录进行查询,从而避免目录空间的浪费;二是对于内容相同的目录表项可以共用同一个目录表项,从而减少目录表项的冗余。

请参阅图3,图3为本发明实施例中cc-numa多处理器系统中改进后的目录的结构示意图,该目录依然采用cache结构,与现有目录不同的是,本发明实施例针对独占状态和共享状态的数据分别采用不同的两条路径进行查询,从而在很大程度上对目录中的vectorarray进行容量的压缩,使得目录的整体容量减小。

具体地,该目录包括:tagarray和vectorarray,其中,tagarray由j组(如:group0、group1、group2、group3…groupj-2和groupj-1)m路(如:wag0、wag1…wagm-2和wagm-1)tagentry组成;vectorarray由k组(如:group0、group1、group2、group3…groupk-2和groupk-1)n路(如:wag0、wag1…wagn-2和wagn-1)vectorentry组成,j大于k,且m大于n。

从上述内容可以看出,vectorarray在横向以及纵向上都进行了压缩,即vectorarray的路数减少了,以及vectorarray的组数也减少了。当然,本发明实施例还可以仅在vectorarray横向或纵向上进行压缩,具体此处不做限定。

更具体地,每个tagentry均包括:tag字段、state字段和指针(owner/ptr)字段。每个vectorentry均包括:v字段、sharevector字段和计数cnt字段。

根据数据不同的缓存状态,tagentry中所采用的指针字段也有所不同,如:针对独占状态的数据,tagentry中的指针字段采用owner指针指示,且该owner指针可用于指示独占该数据的节点;针对共享状态的数据,tagentry中的指针字段采用ptr指针指示,而该ptr指针结合内存地址中的index字段可确定vectorarray中的某一个vectorentry,且该vectorentry中的sharevector字段可用于指示共享该数据的节点。

可选地,在vectorentry中还可以加入cnt字段,用于统计tagentry对应于vectorentry的个数。如:当新增加一个tagentry对应于该vectorentry时,则将该vectorentry中的cnt的值加1;当对应于该vectorentry的tagentry溢出、剔除或替换时,则将vectorentry中的cnt的值减1;当该vectorentry中的cnt的值减为0时,则说明没有任何一个tagentry对应于该vectorentry,该vectorentry对应的数据可能由共享状态变为独占状态,则不需要vectorentry中的sharevector字段来指示共享该数据的节点,那么此时可以删除该vectorentry。

以一个系统地址为40位,16个节点的多处理器系统为例,对现有多处理器系统中的目录容量与本发明实施例多处理器系统中改进后的目录容量进行对比,该多处理器系统中的目录采用16路组相联的cache设计,具体如下所述:

现有的目录容量计算如下:

假设index字段为10bit,tag字段为30bit,state字段为2bit,sharevector字段 为16bit;

则tagarray容量为:(30+2)×16×210=512kbit,其中,每一个tagentry为(30+2)=32bit,乘以16路,乘以210组(即10bit的index字段对应210组)。

vectorarray容量为:16×16×210=256kbit。

本发明实施例的目录容量计算如下:

假设index字段为10bit,tag字段为30bit,state字段为2bit,指针(owner/ptr)字段为4bit,sharevector字段为16bit,cnt字段为3bit;

则tagarray容量为:(30+2+4)×16×210=576kbit。

1)若vectorarray深度压缩1/4,深度大小为28,则vectorarray容量为(16+3)×16×28=76kbit;

目录压缩到:(576+76)/(512+256)=84.9%;

2)若vectorarray深度压缩1/8,深度大小为27,则vectorarray容量为(16+3)×16×27=38kbit;

目录压缩到:(576+38)/(512+256)=80%。

从上述对比可以看出,本发明实施例对vectorarray的容量进行了很大程度上的压缩,从而使得目录的整体容量减小,且压缩后的目录又采用一套新的查询规则,使得改进后的目录在查询精度上并未受到影响,同时由于采用独占状态和共享状态两种查询机制,还减少了目录的查询时间,提高了查询效率。

上面对本发明实施例中的cc-numa多处理器系统中改进后的目录结构进行了描述,下面对本发明实施例中的缓存一致性管理方法进行描述。

请参阅图4,图4为本发明实施例中缓存一致性管理方法一个实施例的步骤流程图,该方法应用于多处理器系统,该多处理器系统包含第一表单(即上述tagarray)、第二表单(即上述vectorarray)和至少两个节点,每一个节点中包含至少一个处理器。该方法包括:

401、根据数据的地址信息,在第一表单中确定与地址信息对应的第一表项;

系统在访问跨节点数据时,会向节点控制器发送该数据所对应的地址信 息,如:内存地址,该地址信息包括:tag字段、index字段和offset字段。节点控制器接收到该地址信息后,会根据该地址信息在节点控制器上设置的目录中进行查询,以获取独占或共享该数据的节点。

具体地,节点控制器会先根据index字段在第一表单中确定与地址信息对应的第一分组,再根据tag字段在第一分组中确定与地址信息对应的第一表项。该第一表项(即上述tagentry)包含第一字段(即上述state字段)和第二字段(即上述指针字段),该第一字段用于记录数据的占用状态,如:独占状态和共享状态。

402、若第一表项中的第一字段为独占状态,则通过第一表项中的第二字段指示独占数据的节点;

403、若第一表项中的第一字段为共享状态,则根据数据的地址信息和第二字段,在第二表单中确定第二表项;

404、通过第二表项中的第三字段指示共享数据的节点。

节点控制器在确定了第一表项之后,会根据第一表项中的第一字段来确定地址信息所对应的数据是被其它节点独占还是共享。

需要说明的是,第一字段承载的信息不同,相应的,第二字段承载的信息也将不同。如:当第一字段为独占状态时,则第二字段为owner指针,该owner指针用于指示独占该数据的节点;当第一字段为共享状态时,则第二字段为ptr指针,该ptr指针结合内存地址中的index字段可用于指示第二表单中的某一个第二表项,该第二表项中包含第三字段(即上述sharevector字段),该第三字段用于指示共享该数据的节点。

可选地,为了实现从纵向上对第二表单进行压缩,节点控制器根据index字段在第一表单中确定第一分组以及在第二表单中确定第二分组时,所采用的index字段略有不同。

具体地,index字段包含m位信息,其中m为大于1的正整数,如:m位二进制地址。本发明实施例在第一表单中确定第一分组时,节点控制器会使用index字段中的m位信息,即index字段的全部位信息;而在第二表单中确定第二分组时,节点控制器会使用index字段中的n位信息,n为大于0且小于m的 正整数,即index字段的部分位信息。也就是说,节点控制器在第二表单中确定第二分组时所使用的index字段中的二进制地址位数比在第一表单中确定第一分组时所使用的index字段中的二进制地址位数要少。

例如:index字段包含三位二进制地址,节点控制器在第一表单中确定第一分组时,使用index字段的三位二进制地址,如:000或100,则该三位二进制地址分别对应于第一表单的第0组或第4组;节点控制器在第二表单中确定第二分组时,使用index字段的低两位二进制地址,如:对应于上述000或100的低两位二进制地址,即为00,则该两位二进制地址对应于第二表单中的第0组。index字段的三位二进制地址对应于第一表单中的8组,而index字段的两位二进制地址则对应于第二表单中的4组,第二表单中的行数比第一表单中的行数减少了一半。

当然,节点控制器在第二表单中确定第二分组时,除了可以使用index字段的部分低位信息,也可以使用index字段的部分高位信息;除了可以使用index字段的部分连续位信息,也可以使用index字段的部分不连续位信息,具体此处不做限定。另外,节点控制器会使用index字段的多少位信息在第二表单中确定第二分组,具体此处也不做限定。

可选地,根据数据的地址信息,在第一表单中确定与地址信息对应的第一表项之前,该方法还可以包括:

在至少两个节点中的第一节点缓存数据时,根据数据在第一表单中创建第一表项,将第一字段设置为独占状态,并将第二字段设置为指示第一节点。

当本节点中的数据第一次被跨节点中的第一节点缓存时,该数据被第一节点独占。为此,节点控制器会在目录的第一表单中创建记录该数据的第一表项,并将第一表项中的第一字段设置为独占状态,还将第一表项中的第二字段设置为指示该第一节点的owner指针。由于该数据被第一节点独占,所以此时无需在目录的第二表单中创建第二表项。

可选地,在根据数据在第一表单中创建第一表项之后,该方法还包括:

在至少两个节点中的第二节点缓存数据时,根据地址信息在第一表单中确定第一表项;

若第一字段为独占状态,则将第一字段设置为共享状态,并根据地址信息在第二表单中确定第二分组,并在第二分组中创建第二表项,在第三字段中设置第一节点和第二节点的指示信息,并根据第二表项在第二表单中的位置信息设置第二字段;

若第一字段为共享状态,则根据地址信息和第二字段在第二表单中确定第二表项,并在第三字段中添加第二节点的指示信息。

当上述数据被第一节点独占之后,又有第二节点缓存该数据时,则该数据将由独占状态变为共享状态,那么此时节点控制器会对该数据对应的第一表项进行修改,如:将第一表项中的第一字段修改为共享状态,并将第一表项中的第二字段修改为ptr指针。同时节点控制器还将根据该数据的地址信息在第二表单中确定第二分组,并在第二分组中创建第二表项,还在第二表项中的第三字段中设置第一节点和第二节点的指示信息。

若在第二节点缓存该数据之前,第一节点独占的该数据已经修改为共享状态,那么此时节点控制器会在该数据对应的第二表项中修改第三字段,即添加第二节点的指示信息。当然,节点控制器还可以不修改第二表项的内容,而是在第二表单中另外创建第四表项,并在第四表项中的第四字段中设置第二节点的指示信息。具体此处不做限定。

可选地,在根据数据在第一表单中创建第一表项之后,该方法还包括:

在至少两个节点中的第二节点缓存数据时,根据地址信息在第一表单中确定第一表项;

若第一字段为独占状态,则将第一字段设置为共享状态,并根据地址信息在第二表单中确定第二分组,并在第二分组中查找指示信息包含第一节点和第二节点的第三表项,并将第三表项确定为第二表项,并根据第二表项在第二表单中的位置信息设置第二字段。

当第一节点独占的数据被第二节点共享时,此时也可以不在第二表单中创建第二表项,而是根据数据的地址信息在第二表单中确定第二分组,并在第二分组中查找是否有包含第一节点和第二节点指示信息的第三表项,如果有,那么为了避免第二表单出现冗余,节点控制器可以不必在第二表单中创 建与第三表项相同的第二表项,而是将该第三表项当作第二表项,并根据该第三表项在第二表单中的位置信息设置第一表项的第二字段。这样也可以在一定程度上对第二表单进行压缩,从而降低整个目录的容量。

可选地,根据数据的地址信息,在第一表单中确定与地址信息对应的第一表项之前,该方法还包括:

在至少两个节点中的第一节点缓存数据时,根据数据在第一表单中创建第一表项,将第一字段设置为共享状态,并根据地址信息在第二表单中确定第二分组,并在第二分组中查找指示信息包含第一节点的第三表项,并将第三表项确定为第二表项,并根据第二表项在第二表单中的位置信息设置第二字段。

数据在第一次缓存时,也有可能是以共享状态缓存,那么节点控制器需要在第一表单中为该数据创建第一表项,但是可以不急于在第二表单确定的第二分组中创建第二表项,而是先在第二表单确定的第二分组中查找是否有包含第一节点指示信息的第三表项,如果有,那么可以按照上述方法共用该第三表项,从而避免第二表单出现冗余。当然,在第二表单中查找不到包含第一节点指示信息的第三表项的情况下,则需要在第二表单中创建第二表项。

可选地,根据数据的地址信息,在第一表单中确定与地址信息对应的第一表项之前,该方法还包括:

在至少两个节点中的第一节点缓存数据时,根据数据在第一表单中创建第一表项,将第一字段设置为共享状态,并根据地址信息在第二表单中确定第二分组,并在第二分组中创建第二表项,在第三字段中设置第一节点的指示信息,并根据第二表项在第二表单中的位置信息设置第二字段。

当本节点中的数据第一次被跨节点中的第一节点缓存时,该数据也可以是被第一节点共享的。为此,节点控制器会在目录的第一表单中创建记录该数据的第一表项,并将第一表项中的第一字段设置为共享状态,还将在目录的第二表单中确定第二分组,并在第二分组中创建第二表项,并在第二表项的第三字段中设置第一节点的指示信息,同时还根据第二表项在第二表单中的位置信息设置第一表项的第二字段,该第二字段采用ptr指针。

可选地,在根据数据在第一表单中创建第一表项之后,该方法还包括:

在至少两个节点中的第二节点缓存数据时,根据地址信息在第一表单中确定第一表项,根据数据的地址信息和第二字段,在第二表单中确定第二表项,并在第三字段中添加第二节点的指示信息。

当第一节点共享的数据再一次被第二节点共享时,节点控制器可以对该数据对应的第二表项中的第三字段进行修改,即添加第二节点的指示信息。当然,节点控制器还可以不修改第二表项的内容,而是在第二表单中另外创建第四表项,并在第四表项中的第四字段中设置第二节点的指示信息。具体此处不做限定。

上面对本发明实施例中的缓存一致性管理方法进行了描述,下面对本发明实施例中的节点控制器进行描述。

请参阅图5,图5为发明实施例中节点控制器一个实施例的模块框图,该节点控制器应用于多处理器系统,该多处理器系统包含第一表单、第二表单和至少两个节点,每一个节点中包含至少一个处理器,该节点控制器包括:

第一确定模块501,用于根据数据的地址信息,在第一表单中确定与地址信息对应的第一表项,第一表项包含第一字段和第二字段,第一字段用于记录数据的占用状态,当第一字段为独占状态时,则第二字段用于指示独占数据的节点;

第二确定模块502,用于当第一字段为共享状态时,根据数据的地址信息和第二字段,在第二表单中确定第二表项,第二表项中包含第三字段,第三字段用于指示共享数据的节点。

可选地,该地址信息包含tag字段和index字段;

第一确定模块501用于根据数据的地址信息,在第一表单中确定与地址信息对应的第一表项具体可以包括:

第一确定模块501用于根据index字段在第一表单中确定与地址信息对应的第一分组,并根据tag字段在第一分组中确定与地址信息对应的第一表项;

第二确定模块502用于当第一字段为共享状态时,根据数据的地址信息和第二字段,在第二表单中确定第二表项具体可以包括:

第二确定模块502用于根据index字段在第二表单中确定第二分组,并根据第二字段在第二分组中确定第二表项。

可选地,该index字段包含m位信息,其中,m为大于1的正整数;

第二确定模块502用于根据index字段在第二表单中确定第二分组,并根据第二字段在第二分组中确定第二表项具体可以包括:

第二确定模块502用于根据index字段中的n位信息在第二表单中确定第二分组,其中n为大于0且小于m的正整数。

可选地,该节点控制器还可以包括:创建模块503和设置模块504;

第一确定模块501根据数据的地址信息,在第一表单中确定与地址信息对应的第一表项之前,创建模块503用于在至少两个节点中的第一节点缓存数据时,根据数据在第一表单中创建第一表项,设置模块504用于将第一字段设置为独占状态,并将第二字段设置为指示第一节点。

可选地,创建模块503根据数据在第一表单中创建第一表项之后,第一确定模块501还用于在至少两个节点中的第二节点缓存数据时,根据地址信息在第一表单中确定第一表项;

若第一字段为独占状态,则设置模块504还用于将第一字段设置为共享状态,第二确定模块502还用于根据地址信息在第二表单中确定第二分组,创建模块503还用于在第二分组中创建第二表项,设置模块504还用于在第三字段中设置第一节点和第二节点的指示信息,并根据第二表项在第二表单中的位置信息设置第二字段;

若第一字段为共享状态,则第二确定模块502还用于根据地址信息和第二字段在第二表单中确定第二表项,设置模块504还用于在第三字段中添加第二节点的指示信息。

可选地,该节点控制器还可以包括:查找模块505;

创建模块503根据数据在第一表单中创建第一表项之后,第一确定模块501还用于在至少两个节点中的第二节点缓存数据时,根据地址信息在第一表单中确定第一表项;

若第一字段为独占状态,则设置模块504还用于将第一字段设置为共享 状态,第二确定模块502还用于根据地址信息在第二表单中确定第二分组,查找模块505用于在第二分组中查找指示信息包含第一节点和第二节点的第三表项,第二确定模块502还用于将第三表项确定为第二表项,设置模块504还用于根据第二表项在第二表单中的位置信息设置第二字段。

可选地,第一确定模块501根据数据的地址信息,在第一表单中确定与地址信息对应的第一表项之前,创建模块503用于在至少两个节点中的第一节点缓存数据时,根据数据在第一表单中创建第一表项,设置模块504用于将第一字段设置为共享状态,第二确定模块502还用于根据地址信息在第二表单中确定第二分组,查找模块505用于在第二分组中查找指示信息包含第一节点的第三表项,第二确定模块502还用于将第三表项确定为第二表项,设置模块504还用于根据第二表项在第二表单中的位置信息设置第二字段。

可选地,第一确定模块501根据数据的地址信息,在第一表单中确定与地址信息对应的第一表项之前,创建模块503用于在至少两个节点中的第一节点缓存数据时,根据数据在第一表单中创建第一表项,设置模块504用于将第一字段设置为共享状态,第二确定模块502还用于根据地址信息在第二表单中确定第二分组,创建模块503还用于在第二分组中创建第二表项,设置模块504还用于在第三字段中设置第一节点的指示信息,并根据第二表项在第二表单中的位置信息设置第二字段。

可选地,创建模块503根据数据在第一表单中创建第一表项之后,第一确定模块501还用于在至少两个节点中的第二节点缓存数据时,根据地址信息在第一表单中确定第一表项;第二确定模块502还用于根据数据的地址信息和第二字段,在第二表单中确定第二表项,设置模块504还用于在第三字段中添加第二节点的指示信息。

图6是依据本发明一实施例的节点控制器600的硬件结构示意图。如图6所示,节点控制器600包括处理器602、存储器604、输入/输出接口606、通信接口608和总线610。其中,处理器602、存储器604、输入/输出接口606和通信接口608通过总线610实现彼此之间的通信连接。

处理器602可以采用通用的中央处理器(centralprocessingunit,cpu), 微处理器,应用专用集成电路(applicationspecificintegratedcircuit,asic),或者一个或多个集成电路,用于执行相关程序,以实现本发明实施例所提供的技术方案。

存储器604可以是只读存储器(readonlymemory,rom),静态存储设备,动态存储设备或者随机存取存储器(randomaccessmemory,ram)。存储器604可以存储操作系统和其他应用程序。在通过软件或者固件来实现本发明实施例提供的技术方案时,用于实现本发明实施例提供的技术方案的程序代码保存在存储器604中,并由处理器602来执行。

输入/输出接口606用于接收输入的数据和信息,输出操作结果等数据。

通信接口608使用例如但不限于收发器一类的收发装置,来实现节点控制器600与其他设备或通信网络之间的通信。

总线610可包括一通路,在节点控制器600各个部件(例如处理器602、存储器604、输入/输出接口606和通信接口608)之间传送信息。

应注意,尽管图6所示的节点控制器600仅仅示出了处理器602、存储器604、输入/输出接口606、通信接口608以及总线610,但是在具体实现过程中,本领域的技术人员应当明白,节点控制器600还包含实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当明白,节点控制器600还可包含实现其他附加功能的硬件器件。此外,本领域的技术人员应当明白,节点控制器600也可仅仅包含实现本发明实施例所必须的器件,而不必包含图6中所示的全部器件。

图6所示的硬件结构以及上述描述适用于本发明实施例所提供的各种节点控制器及缓存一致性管理系统,适用于执行本发明实施例所提供的各种缓存一致性管理方法。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示 意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1