在多处理器系统中构建相干存储器的系统及方法与流程

文档序号:15307337发布日期:2018-08-31 21:13阅读:208来源:国知局

本申请与以下美国临时专利申请相关且主张以下美国临时专利申请的优先权:艾瑞克·哈哥斯坦等人在2015年11月4日提出申请且名称为“高速缓冲存储器存储系统的节能技术”第62/250,653号的美国临时专利申请;以及艾瑞克·哈哥斯坦等人在2015年11月23日提出申请且名称为“直接对主机:统一跟踪方法、逐出及保持数据相干性”的美国临时专利申请第62/258,692号,以上两个美国临时专利申请的公开内容并入本申请供参考。

本文所公开主题的实施例大体来说涉及在计算机存储装置中存取数据的方法及系统,且更具体来说,涉及构建相干高速缓冲层次结构的机制及技术。



背景技术:

如今的处理器常常配备有高速缓冲,高速缓冲可存储在一些大容量存储器中存储的数据及指令的副本。这种大容量存储器如今最流行的实例是动态随机存取存储器(dram)。在本文中,将使用用语“存储器”来笼统地指代所有现有的及未来的存储器实施方式。高速缓冲存储器(或简称为高速缓冲)”通常是由比其他存储器实施方式小得多且快得多的存储器构建的且随后仅可在任何给定时间保存在主存储器或辅助存储装置中存储的数据中的一部分数据的副本。如今,高速缓冲常常使用静态随机存取存储器来实施且大的高速缓冲可使用动态随机存取存储器来实施。本文所述高速缓冲可使用任何现有的及未来的存储技术来实施。

常常,计算机系统的存储系统包括一系列高速缓冲,其中靠近主存储器的高速缓冲(此处称为较高级的高速缓冲)更大且更慢且靠近处理器的高速缓冲(此处称为较低级的高速缓冲)更小且更快。这种配置通常被称为高速缓冲层次结构、存储器层次结构或存储系统。高速缓冲层次结构中的每一级被称为高速缓冲级。图1绘示其中每一个cpu101均被指派有各自的第一级专用高速缓冲102(l1高速缓冲)的计算机系统。专用高速缓冲是仅可对高速缓冲本地的cpu(或者与高速缓冲处于同一节点中的cpu,其中,所述高速缓冲专用于这一节点)的活动作出响应的数据单元的空间的高速缓冲。在此实例中,第二级高速缓冲103是由所有中央处理器101共享且可包含由所有cpu101存取的数据及指令。高速缓冲103是全局高速缓冲,这是由于数据单元的空间可响应于任何cpu101的活动。另外,高速缓冲103是共享高速缓冲,这是由于每一个数据单元可仅存在于一个共享副本中(而每一个专用高速缓冲均可具有自己的复制副本)。存储器105也存储由所有cpu101存取的指令及数据。(主)存储器105通常是使用物理地址(或简称为pa)来存取的,而cpu101产生的地址通常是虚拟地址。具有多个cpu及多个专用高速缓冲的计算机系统(例如图1所示系统)需要高效的机制来寻找高速缓冲中的一个高速缓冲中的所请求数据单元以及使数据的存储在不同节点中的多个副本保持相干。

除包括主存储器及高速缓冲存储器之外,这种计算机系统通常还将包括一个或多个辅助存储装置。这些辅助存储装置可包括硬盘驱动器、光盘驱动器、闪存驱动器等中的一者或多者,硬盘驱动器、光盘驱动器、闪存驱动器等在此处由盘104来笼统地表示。盘或辅助存储装置104可存储比存储器105的数据多出多个数量级,但不能使用物理地址直接存取。如果cpu101想要对存储在盘104上的数据进行存取,则虚拟存储系统(图1未示出)将数据块(通常被称为“页”)从盘104移动到存储器105,并进行从与所述页对应的虚拟地址到物理地址的变换。一种特殊类型的变换高速缓冲(图1未示出)(通常被称为“变换旁查缓冲器”或简称为tlb)对从虚拟页到物理页的变换映射进行高速缓冲。虚拟存储系统可被视为高速缓冲系统,所述高速缓冲系统将位于盘104中的数据的一部分存储在存储器105中。

图2示出图1中的高速缓冲组织的更详细的视图,其中中央处理器204被示出为包含多个高速缓冲式结构,例如指令tlb(itlb,201)及数据tlb(dtldb,205)以及cpu核心202。1级高速缓冲102被示出为包括指令高速缓冲200及数据高速缓冲206,指令高速缓冲200及数据高速缓冲206夹置在cpu204与2级(及潜在较高级的)高速缓冲207之间。图2还示出连接到高速缓冲层次结构的大容量存储器208。

当cpu204请求高速缓冲中存在的数据(称为“高速缓冲命中”)时,所述请求可比对高速缓冲中不存在的数据进行存取(称为“高速缓冲未命中”)快得多地得到服务。通常,假设两种版本的应用原本具有相似的性质,则在cpu204上运行的经历较少高速缓冲未命中的应用与遭受较多高速缓冲未命中的相同应用相比将执行得更快并消耗较少的能量。因此,已对用于避免高速缓冲未命中的技术投入了相当大的努力,且还设计了可使高速缓冲命中及高速缓冲未命中就它们的存取延迟以及这些存储器事务所消耗的能量而言高效的实施方式。

为了理解如何开发针对此高速缓冲命中/高速缓冲未命中问题的解决方案,理解高速缓冲组织及术语将是有用的。通常,数据是以比处理器的字的大小大的固定块(被称为高速缓冲行)的形式配置到高速缓冲中。如今常用的高速缓冲行大小例如为32字节、64字节及128字节,但如所属领域中的技术人员将理解,对于各种高速缓冲实施方式而言也存在更大及更小的高速缓冲行大小。对于一些高速缓冲实施方式而言,高速缓冲行大小也可为可变的。

在存储器208中组织数据布局的常用方式是采用对每一个数据字进行静态映射以使每一个数据字驻留在一个特定高速缓冲行中的方式。每一个高速缓冲通常具有索引功能,所述索引功能对高速缓冲的可供每一个高速缓冲行驻留的部分(被称为组)进行标识。所述组可包含用于同时保存一个或多个高速缓冲行的空间。组可保存的高速缓冲行的数目被称为组的关联性。常常说,高速缓冲中所有组的关联性是相同的。这些高速缓冲常常被称为组关联高速缓冲。关联性也可在各个组之间变化。组中的每一个可保存高速缓冲行的空间被称为路。

为确定存储在每一组中的每一个高速缓冲行的身份,高速缓冲中的高速缓冲行各自具有相关联的某一标识符。这种标识符的一个常用实例是地址标签。当在高速缓冲中查找特定高速缓冲行时,可使用高速缓冲行的地址来确定高速缓冲中可供所述高速缓冲行驻留的组。将对应组的高速缓冲行的地址标签与用于标识高速缓冲行的地址的标签部分(参见,例如图3所绘示的且在以下阐述的tag及atag)进行比较来判断所需要的高速缓冲行是否驻留在所述高速缓冲中,且如果是,则判断所需要的高速缓冲行驻留在哪一路中,即所需要的高速缓冲行驻留在可保存高速缓冲行的组中的空间中的哪一个空间中。

常常,每一个高速缓冲具有内置方略来判断将哪一个高速缓冲行保留在组中且将哪一个高速缓冲行逐出(也被称为“替换”)以为被放入到所述组中的新的高速缓冲行腾出空间,此被称为高速缓冲的替换策略。被替换的高速缓冲行被称为牺牲者或被替换的高速缓冲行。与高速缓冲存储器结合使用的流行的替换策略包括但不限于:最近最少使用(lru)替换策略、伪最近最少使用替换策略及随机替换策略。

所谓的包容性高速缓冲层次结构要求存在于一个高速缓冲级中的数据块(例如,l1高速缓冲中的数据块)的副本(例如,高速缓冲行)也存在于更高的高速缓冲级(此处,更高是指具有比1高的编号的高速缓冲级)中,例如存在于l2高速缓冲及l3高速缓冲中。独占型高速缓冲层次结构仅具有存在于整个高速缓冲层次结构中的数据块的一个副本(例如,高速缓冲行),而非包容性层次结构可具有这两种方略的混合。在独占型高速缓冲层次结构及非包容性高速缓冲层次结构中,高速缓冲行在从给定的高速缓冲级被逐出之后一般会配置在下一更高的高速缓冲级中。

在知晓关于高速缓冲及高速缓冲行的这种背景的情况下,现在继续进行此论述来例示一种用于标识高速缓冲层次结构(比如图1及图2所示高速缓冲层次结构)内的特定高速缓冲位置的传统技术。图3示出包含cpu301、dtlb303、l1高速缓冲307及l2高速缓冲311的计算机系统节点的组织的实例。cpu301产生包含虚拟地址302(vaddr)的存储器请求,虚拟地址302用于在数据变换旁查缓冲器303中进行关联查找。虚拟地址302在此实例中被划分成三部分:p-offset(页偏移,例如由低级位组成)、tag及index。虚拟地址302的index部分用于标识dtlb303内可存储地址变换的组。

此实例中所使用的所示dtlb303具有两路关联组织,所述两路关联组织示出所标识的组的两个项。每一个项由地址标签(atag)304及物理页帧(ppf)305组成。将虚拟地址302的tag部分与所标识的组的每一个项的atag304进行比较。逻辑318判断是否存在与各个项中的任何项的匹配,且如果存在,则控制mux306来选择对应的ppf305。物理地址paddr316是通过对由mux306选择的ppf305与虚拟地址302的p-offset部分进行串接而构成。作为另外一种选择,如果所标识的组中的各个项均不与虚拟地址302的tag部分匹配,则进行tlb填充操作且将所需要的变换项放入到dtlb303中。

使用paddr316在l1高速缓冲307中进行查找。更具体来说,使用paddr316的index部分来标识可存储包含所请求数据的高速缓冲行的组。(应注意,这一l1index可包含与dtlbindex不同的位)。所绘示的l1高速缓冲307具有两路关联组织,所述两路关联组织在所识别的组中具有两个项。每一个项由对应的高速缓冲行的地址标签(atag)308及数据309组成。将paddr316的tag部分与所标识的组的每一个项的atag进行比较。逻辑319判断是否存在与各个项中的任何项的匹配,并控制mux310来选择对应的数据。如果所述各个项均不匹配(由l1未命中317表示),则需要在l2高速缓冲311中进行查找。尽管针对l2高速缓冲查找将paddr316划分成index部分及tag部分可与针对l1高速缓冲查找作出的划分不同,然而针对l2高速缓冲查找进行的其余步骤通常相似于针对在l1级高速缓冲中的查找进行的其余步骤。如果确定在l2高速缓冲中未命中,则可需要在更高级的高速缓冲存中进行新的查找或对存储器进行存取。可注意到,如果l1高速缓冲使用的paddr316的index部分完全由p_offset位构成,则在来自mux306的ppf信息可用之前便可开始对l1高速缓冲307的存取。这常常被称为带虚拟索引、经物理标记的高速缓冲(vipt)。

所属领域中的技术人员应理解,可将各自具有与图3所示存储器层次结构相似的存储器层次结构的多个“节点”连接在一起以形成相干多处理器系统。图1示出多处理器的另一个实例,其中每一个cpu具有各自的专用l1高速缓冲。这使对所请求的数据所驻留的位置进行定位的任务更复杂,这是由于始终对下一更高的高速缓冲级中的数据进行搜索将不再足够。需要用于搜索其他节点的高速缓冲以及用于使数据的存储在不同节点中的多个副本保持相干的机制。

总结与图3相关联的论述,所属领域中的技术人员应理解,高速缓冲层次结构的现代实施方式在可确定所请求的高速缓冲行的位置之前可能需要在变换旁查缓冲器中以及在不同的高速缓冲级处进行许多关联查找。另外,每一个变换项以及所高速缓冲的高速缓冲行需要伴随有地址标签且需要将多个这种标签与这些级中的每一级处的地址的一部分进行比较。总体来说,这种实施方式因用于进行每一次关联查找的动态能量而成本高昂。在用于存储为进行比较而需要的额外标签信息的静态能量及存储器容量方面也需要很大的开销。另外,包含多个cpu或各自具有各自的专用高速缓冲层次结构的多个节点的多处理器需要额外的代价高昂的搜索机制来对驻留在专用高速缓冲中的数据进行定位以及需要代价高昂的相干活动来使专用高速缓冲中相同日期的各复制副本保持相干。

因此,需要提供能避免与高速缓冲查找数据相关联的上述问题及缺陷的系统及方法。



技术实现要素:

用于基于地点信息构建相干存储器的系统及方法

根据实施例,数据单元存储在多处理器系统的节点中的专用高速缓冲中,每一个节点包含至少一个处理器(cpu)、所述节点专用的至少一个高速缓冲及所述节点专用的至少一个高速缓冲位置缓冲器(clb)。在每一个clb中存储有位置信息值,每一位置信息值指示与相应的数据单元相关联的位置,其中存储在给定的clb中的每一位置信息值指示所述位置是设置在与所述给定的clb处于同一节点中的所述专用高速缓冲内的位置、是其他节点中的一个节点中的位置或者是主存储器中的位置。数据单元的值的相干性是使用高速缓冲相干性协议得到维持。所述高速缓冲相干性协议根据位置信息值各自的数据单元的移动来更新存储在clb中的所述位置信息值。

根据实施例,以下对构建上述方法的系统加以考虑及阐述。

构建促进附近的全局高速缓冲的相干性存储器的系统及方法

根据实施例,一种方法将数据单元存储在多处理器系统的节点中的专用高速缓冲中以及存储在全局高速缓冲及存储器中,其中每一个节点包含至少一个处理器(cpu)、所述节点专用的至少一个高速缓冲。存储在所述专用高速缓冲及所述全局高速缓冲中的数据单元的值的相干性是使用高速缓冲相干性协议而维持的,所述高速缓冲相干性协议在存储所述数据单元的地点信息的目录中进行查找。所述位置信息将其中驻留有所述数据单元的位置标识为以下中的一者:节点、全局高速缓冲或存储器。

根据实施例,以下对构建上述方法的系统加以考虑及阐述。

通过阻止相干性构建相干存储器的系统及方法

根据实施例,将数据单元存储在多处理器系统的节点中的专用高速缓冲中以及存储在全局高速缓冲及存储器中,其中每一个节点包含至少一个处理器(cpu)及所述节点专用的至少一个高速缓冲。所述节点通过网络进行连接。存储在高速缓冲中的数据单元的值的相干性通过分布式高速缓冲相干性协议而得到维持,所述分布式高速缓冲相干性协议在所述网络上发送相干性消息。一些相干性消息被阻止在网络上发送。如果其他相干性消息是针对与一相干性消息相同的地址区,则发送所述一相干性消息会激活所述阻止功能来阻止所述其他相干性消息。

根据实施例,以下对构建上述方法的系统加以考虑及阐述。

附图说明

并入本说明书且构成本说明书的一部分的附图示出一个或多个实施例并与本说明一起来解释这些实施例。在附图中:

图1是多处理器系统的方块图。

图2是单一处理器系统高速缓冲层次结构的方块图。

图3示出由组关联高速缓冲以及组关联数据变换旁查缓冲器组成的二级式高速缓冲层次结构的传统实施方式。

图4是示出包括二级式高速缓冲层次结构及二级式clb层次结构的实施例的方块图,其中对第一级进行虚拟存取且对第二级进行物理存取。

图5是示出包括连接到二级式高速缓冲层次结构的两个cpu以及二级式clb层次结构的实施例的方块图。

图6是示出根据实施例的具有单个单片式末级高速缓冲的概括式无标签高速缓冲层次结构的方块图。

图7是示出根据实施例的具有多片末级高速缓冲的概括式无标签高速缓冲层次结构的方块图。

图8是示出方法实施例的流程图。

图9至图13绘示根据实施例的一同构建数据相干与clb相干的集成相干性协议的本地活动及全局活动的序列。

图14至图15是示出方法实施例的流程图。

具体实施方式

以下对实施例的说明将参照附图。不同图式中相同的参考编号标识相同或相似的元件。以下详细说明并非对本发明进行限制。而是,本发明的范围是由随附权利要求书界定。为简明起见,以下针对特定高速缓冲层次结构的术语及结构以及在这种层次结构中进行查找的方法来论述以下实施例中的一些实施例。然而,接下来将论述的这些实施例并非仅限于这些配置,而是可如随后论述地一样扩展到其他配置方式。

本说明书通篇中所提及的“一个实施例”或“实施例”意指结合实施例所阐述的特定特征、结构或特性包括在所公开主题的至少一个实施例中。因此,在本说明书通篇中各处出现的短语“在一个实施例中”或“在实施例中”未必均指同一实施例。此外,在一个或多个实施例中,所述特定特征、结构或特性可采用任何适当的方式进行组合。

在以下说明中,许多细节提供对实施例的透彻理解。这些细节包括功能块及示例性高速缓冲位置表clb以用于构建作为传统高速缓冲标记方案的高效替代方式。另外,尽管参照具体的高速缓冲及计算机架构阐述了实施例的clb方案,然而所述实施例可适用于宽广范围的存储器及系统架构。在其他情形中,未详细阐述众所周知的电路及结构,以免不必要地使实施例模糊不清。

根据本文所述各种实施例,各方法及系统尤其提供高速缓冲处理方案(chs),所述高速缓冲处理方案明确地存储位置信息(li)。位置信息被用于对具有主存储器以及一个或多个处理器的计算机系统的多路高速缓冲进行高效存取。chs对所谓的高速缓冲层次结构的内容进行跟踪,但由于本文所述一些特征的性质,存储系统的拓扑结构未必需要为层次结构。所述跟踪是由高速缓冲位置缓冲器(clb)或clb的一些层次结构来进行的。高速缓冲包括高速缓冲行,高速缓冲行被划分成与路的数目对应的多个节段。

根据实施例,并非将每次高速缓冲行在层次结构中的各个级之间以及在各个节点之间移动时所知晓的有用的位置信息丢弃,而是将所述位置信息存储在chs中(例如,在高速缓冲处理方案中更新所述位置信息)并将所述位置信息用于随后的高速缓冲存取。clb是采用关联方式来组织的。因此,每一个clb项包括地址标签字段以及与地址标签字段相关联的多个li,当然根据其他实施例也可存在用于存储位置信息的其他技术。接着,可使用存储在clb中的信息来对所请求数据的位置进行快速存取而无需进行额外的关联查找。更精确来说,clb提供位置信息li,从位置信息li可确定正确的高速缓冲身份以及高速缓冲内的正确位置而不需要存取高速缓冲的任何地址标签。li还可将远程节点标识为相关联数据的位置。因此,使用根据这些实施例的技术,可在高速缓冲层次结构中更快速地且采用消耗更少能量的方式找到所请求的数据。所阐述的技术还使得能够高效地构建更灵活且层次更少的高速缓冲拓扑结构。

对于由具有相同关联性的组关联高速缓冲组成的高速缓冲层次结构而言,每一条li中的位的数目依赖于路的数目、不同高速缓冲的数目以及被clb覆盖的节点的数目。可预留一些li值来存储具有特定硬编码意义的特定图案。举例来说,可为存储器图案预留一个li值,此意味着在存储器层次结构的被chs覆盖的部分中不存在数据。在一个实施方式中,假设节点的数目小于所标识的高速缓冲的数目乘以路的数目,则li位的数目等于路的数目加上被clb覆盖的高速缓冲数目加1之和的以2为底的对数(即,log2(路+级+1))。如果不同的高速缓冲级的路的数目发生变化,或者如果使用除组关联高速缓冲之外的高速缓冲,则所属领域中的技术人员应理解,可能存在其他位置信息表示形式。

chs通过clb对高速缓冲进行的存取可例如一般来说根据实施例采用如下方式进行。在接收到目标高速缓冲行的地址后,clb尝试着将高速缓冲位置缓冲器中已存储的高速缓冲位置项(cle)中的一者的地址字段与地址的tag部分进行匹配。如果存在匹配,则使用地址的li偏移部分取回clb项的li。chs直接使用li值以及地址的索引部分来向高速缓冲的单个高速缓冲行进行索引。因此,高速缓冲不需要存储任何地址标签信息。

因此,根据实施例,系统(例如图1及图2所示系统)还可包括本文所述高速缓冲处理方案(chs)。这一方案包括高速缓冲位置缓冲器(clb)或clb的层次结构,所述高速缓冲位置缓冲器或高速缓冲的层次结构跟踪存储在高速缓冲层次结构中的数据单元的位置。每当数据单元在高速缓冲层次结构中移动时,数据单元的新位置便被记录在clb中。

根据这种实施方式的clb可被实施为关联组织,以存储多个高速缓冲位置项(cle)。每一个cle包含用于关联查找的地址标签以及一些净荷(例如,高速缓冲位置表(clt))以存储多个位置信息(li)。实际上,clb自身可被视为用于存储位置信息的高速缓冲。

为示出各种实施方式的这些及其他特征,现将相对于图4至图15来阐述这种实施例。为清晰起见,所属领域中的技术人员将理解,这些图示出实施例的逻辑实施方式而非实际物理实施方式。所属领域中的技术人员因此应理解,这些图示出实施方式的逻辑表示形式,且应理解,各物理实施方式在它们的实施细节上可为实质上不同的。

在一个实施例中,所跟踪的数据单元对应于高速缓冲行,且存储这些数据单元的高速缓冲是以组关联方式进行组织的。

在一个实施例中,与匹配的cte的所请求高速缓冲行对应的位置信息(li)可指示所请求的高速缓冲行驻留在哪一个高速缓冲中。这将使实施例在合适的高速缓冲处进行直接高速缓冲查找。举例来说,在图4所示系统(所述系统可为多处理器系统中的节点)中,位置信息可将l1高速缓冲与l2高速缓冲区分开。所述位置信息也可能够将在多处理器系统的未在此图中示出的其余部分中存在的其他高速缓冲区分开。图4示出无标签节点,所述无标签节点可连接到多处理器系统中的其他节点,所述多处理器系统具有由组关联高速缓冲及cpu(所述中央处理器可包含一个或多个传统高速缓冲,此处绘示为l0)形成的二级式高速缓冲层次结构,其中cpu401产生地址(addr)402。图4还示出由组关联clb形成的二级式clb层次架构,其中clb1410及clb2420是以addr作为索引。clb1中的每一项由至少地址标签(at)411及高速缓冲位置表(clt)412组成。clb1中的每一项可存储额外的信息,例如区信息(ri)413。clt存储对应区(也称为微页面)的高速缓冲行的位置信息(li)。作为实例,图4对每个区示出四条li。发明人作出的经验研究表明,每个区8到16条li(即,每个区8到16个数据单元(高速缓冲行))将为具有成本效益且高效的。位置信息对多处理器系统内可从中找到对应高速缓冲行的位置进行编码。位置信息可例如包含可从中找到数据单元的高速缓冲的身份。位置信息还可包含可从中找到数据单元的高速缓冲内的位置。作为另外一种选择,位置信息可包含可从中找到数据单元的节点的身份或者包含某个提供关于数据单元位置的信息的符号,例如符号“mem”指示可在存储器中找到数据单元。在一个实施例中,符号“不知晓”指示对应数据单元的位置未被记录在与区对应的clt中。

mux416选择addr411与地址402的tag部分匹配的clt且mux415基于addr402的li-offset部分来选择与所请求的高速缓冲行对应的li414。如果存储在所选择的li中的高速缓冲身份对应于l2高速缓冲440,则使用地址402的index部分以及位置信息414的一部分来形成对l2高速缓冲440中的所请求的数据单元进行存取的地址417。在组关联l2高速缓冲440的实例中,此部分包含与存储所请求的数据单元的关联路对应的信息。如果存储在所选择的li中的高速缓冲身份对应于l1高速缓冲430,则以相似的方式来形成对l1高速缓冲430中的所请求的数据单元进行存取的地址418。

图4示出其中l1高速缓冲430及l2高速缓冲440中的每一项分别具有反向指针(bp)432及442与其高速缓冲行相关联的实施例。(data)431及441分别。在此实例中,各个bp指向clb2420中各自相应的相关联的cte。clb2420中的每一个cte包含地址标签(at)421、clt422以及clb1指针(c1p)423。如果clb2项有对应的clt驻留在clb1410中,则其c1p将指向此项。在这种情形中,clb1410将包含此区的最新信息。在这种情形中,将clb1中的cte称为现用clb项,同时clb2420中针对这一区的clb项包含被动项。在一个实施例中,如果clb1410包含区的现用项,则clb2420需要包含这一区的被动项。

在一个实施例中,当在clb1410中未能够找到匹配的cte时,在clb2420中查找对应的cte并将所述对应的高速缓冲表项复制到clb1,同时将clb1中旧的项复制到clb2420中,这被称为溢出及填充或者简称为溢出/填充(图4中的spill及fill)。例如在传统的包容性高速缓冲将数据单元逐出到下一级以为可从下一高速缓冲级放入(填充)的新的数据单元腾出空间时,也会进行溢出。相似的溢出/填充活动将在不同的clb级之间进行,其中clb项在clb级之间移动,这是由于各clb级形成包容性层次结构。在一个实施例中,目录dir处于clb层次结构的根处且使最高级的高速缓冲位置缓冲器溢出/填充。

可与溢出/填充活动并行地开始对所请求的数据单元的存取。

在一个实施例中,多级高速缓冲位置缓冲器构建方式的clb的内容与由其管理的多级高速缓冲系统的数据单元的位置保持一致。在高速缓冲层次结构中移动数据单元会使得在一个或多个clb中更新所述数据单元的对应的位置信息,所述移动数据单元包括但不限于:由来自cpu的对数据单元的请求造成的移动、数据单元的逐出、预取活动及相干活动。举例来说,在图4中,从高速缓冲440逐出数据单元441可涉及以下步骤:跟随数据单元441的相关联的bp442指针来找到其对应的cte(所述对应的高速缓冲表项在此实例中处于clb2420中)以及其对应的位置信息来指向数据单元的新位置(例如,存储mem符号)。并且,如果对应的clb2的cte的c1p是有效的,则跟随c1p在clb1410中找到其对应的cte的对应的高速缓冲表项并更新所述高速缓冲行相关联的位置信息。在一个实施例中,如果存在有效的c1p,则不更新clb2中的项。在一个实施例中,仅更新现用的clt。

如根据上述内容将理解,使用根据这些实施例的无标签高速缓冲系统(即,其中存储在高速缓冲中的数据单元不具有与所述数据单元相关联的地址标签的高速缓冲系统)将使得在cpu401请求位于不同的存储装置中的各种高速缓冲行时将发生多个不同类型的事务。图4中所绘示的节点可为由多个这种高速缓冲节点构成的较大的多处理器系统的子系统(或节点)。使许多节点中的高速缓冲的数据保持相干需要高速缓冲相干性协议,例如,构建窥探相干或基于目录的相干。相干性协议将向图4中所绘示的节点发送相干请求(externalrequest)。这些请求将通常首先转向clb2420,其可确定这一高速缓冲系统不具有所请求的高速缓冲行(clb2未命中或者clb2命中c1p为非现用的项,且所请求的高速缓冲行的位置信息保持有存储器图案的值)。如果是这样的,则不需要对数据高速缓冲l1及l2进行另外的操作(被称为相干过滤),但无论如何均需要对现用的clt中对应的li进行更新以跟踪与数据单元相关联的新位置。否则,clb2查找可提供所请求的位置信息(clb2命中且所请求的高速缓冲行的位置信息保持存储所述高速缓冲行的位置),或者其可确定clb1410存储相关联的位置信息(clb2命中及c1p有效)。在后一种情形中,在clb1410中进行查找需要确定所请求的高速缓冲行的位置或者需要确定所述高速缓冲行未驻留在此高速缓冲子系统中。(clb1中对应的位置信息包含存储器图案)。根据相干请求的性质(例如,无效请求、读取请求或独占型读取请求)而定,相干性协议将对所请求的数据单元进行一些操作且可能会改变所请求的数据单元的状态。可能还需要更新现用clt中对应的li来跟踪与数据单元相关联的新位置。

即使图4示出的节点由两个高速缓冲级组成,然而所属领域中的技术人员应理解,所述节点可使用其他数目的级来构成且可包含多于一个cpu。另外,节点中高速缓冲级的数目与clb的数目不需要为相同的。

实施例还可应用于其中多个cpu共享由clb管理的高速缓冲的系统。举例来说,图5示出根据实施例由两个cpu节点(580及590)构建的系统,所述两个中央处理器节点中的每一者在它们各自的一级式高速缓冲层次结构内各自具有一个clb1(503及513)以及专用高速缓冲l1高速缓冲(504及514)。系统还包含在两个cpu501、511之间共享的全局共享l2高速缓冲523(有时被称为末级高速缓冲llc)。

在clb1(513或503)中进行的查找例如使用与clb1410相似的技术、基于由各自相应的cpu(501、511)产生的地址来选择单个li。如由clb1a503及clb1b513中所示出的两个clt项发出的三个箭头所表示,所选择的li可将位置标识为处于对应的l1高速缓冲(分别为504及514)中、处于l2高速缓冲523中或处于其他节点(分别由570及571示出)中。在此实例中,clb1a503将其存取的数据标识为共享l2523中的505,同时clb1a503将其存取的数据标识为其l1514中的505(由实线箭头示出)。

图6示出无标签多处理器存储系统的概括图。此实例由从节点-1601到节点-n699的n个节点组成。每一个节点具有x级clb及y级专用高速缓冲(即,节点专用的高速缓冲)。节点通过芯片上网络(noc)650电路彼此连接在一起。noc650还将节点连接到目录(dir)660、全局末级高速缓冲(llc)670及存储器680。dir660是以与clb相似的方式进行组织的且具有由至少地址标签(at)661以及高速缓冲位置表(clt)662组成的项。项还可包含额外的信息(例如,区信息(ri)663),以下会更详细地阐述所述额外的信息。节点中的最高级clb(clb-x630、693)溢出到目录/从dir进行填充。dir还在使高速缓冲的内容与clb的内容保持相干及一致的相干性协议中发挥核心作用。

clb与dir可被视为形成一个包容性“高速缓冲层次结构”,以用于对具有与数据高速缓冲层次结构的内容相关的信息的元数据进行高速缓冲。包含l-1到l-y以及llc的数据层次结构可被视为单独的高速缓冲层次结构而不具有强加于所述数据结构的包容性质。所述数据层次结构可例如为非包容性的。

在图6所示的实施例中,每一个节点具有一个cpu,其可能包含零个、一个或多个传统的基于标签的高速缓冲(绘示为l0-d及l0-i)。无法由任一个传统的l0高速缓冲满足的存储器请求将在节点的clb-1(例如,610)中产生查找以搜索对应clb项的clt,此可能使用与图4中的clb-1410相似的方案来进行。如果在clb-1中找到对应的项,则与所请求的数据单元对应的位置信息(li)可位于所述对应项的clt字段(612)中。li标识可从中找到所请求的数据单元的位置。在一个实施例中,驻留在节点-1601中的clb610中的li可将节点自己的高速缓冲(l-1620到l-y640)中的一者、llc(670)、存储器680或其他节点(节点-2690到节点-n699)中的任何节点标识为正在跟踪的数据单元的位置。在一个实施例中,li还可对所标识的高速缓冲内的数据单元的位置进行标识。在一个实施例中,li可指示数据单元是否驻留在与节点连接的cpu610的传统高速缓冲l0-d或l0-i中的任何传统高速缓冲中。

如果高速缓冲位置(或存储器)被标识为可从中找到数据的位置,则通过直接对高速缓冲进行读取而无需查询目录(dir)660便可满足所述请求。如果节点被标识为可从中找到所请求数据的位置,则向这一节点的clb-x发送请求并采用与针对图4所论述的externalrequests相似的方式来满足所述请求。仍然不需要查询目录来找到数据。这与最传统的基于目录的相干方案不同,在最传统的基于目录的相干方案中,则查询并更新目录来进行节点外的存取。

即使图6在每一个节点中示出一个cpu,然而所属领域中的技术人员将认识到,节点可包含任何数目的(包括零个)cpu、gpu、加速器或可对存储器进行存取的其他装置(例如,i/o装置)。另外,clb及高速缓冲的配置及大小在各个节点之间可大相径庭。

在一个实施例中,在包容性clb/dir层次结构中存在严格的层次结构逐级搜索。如果在级clb-i处未找到位置信息,则在下一级clb-(i+1)处执行查找。如果在点头的最高级(clb-x)中未能够找到位置信息,则在dir中进行查找。如果在clb级处或在dir中找到位置信息,则可将读取请求发送到在这一级处由对应的位置信息标识的数据位置并在clb-1中创建与所请求区对应的新的cle。在一个实施例中,clb/dir层次结构是包容性的。这意味着如果存在在级clb-l处可用的clb项,则必须在级clb-(l+1)处配置项。最靠近cpu的clb项是现用的。在一个实施例中,在高速缓冲级k(以及较低的高速缓冲,即,图6中位置更靠上的高速缓冲)与特定clb级c(以及全部较高的clb级,即,图中位置更低的高速缓冲位置缓冲器)6之间强制执行包容。作为实例,为使数据在高速缓冲l-1620到l-y640中的任何高速缓冲中可用,在clb-x630中必须存在对应的项。如果clb-x630中的项被逐出,则对应区的全部数据均应被从高速缓冲l-1620到l-y640逐出。这被称为强制逐出。另外,还需要将同一节点的向下一直到clb-1610的全部clb项逐出。

应注意,并不要求在节点内的各个高速缓冲级(例如,高速缓冲l-1620到l-y640)之间或者在llc660与节点中的高速缓冲(例如,高速缓冲l-1620到l-y640)之间存在包容性。举例来说,与特定地址对应的有效数据可存在于l1高速缓冲620中,但不存在于高速缓冲l-y640中或llc670中。这为高速缓冲旁通优化开辟了道路,举例来说此时仅需要在l1中配置流数据(实际上,如果存在l0,则仅在其中配置流数据)即可,而不在其他级处配置。然而,需要在全部级处配置对应的clb项(其通常小于对应的数据区的50分之一)。

目录(dir)660包含clb类信息:地址标签(at)661、高速缓冲位置表(clt)及区信息(ri)。尽管这些字段具有与clb(例如,clb-x630)的字段相同的名称,然而这些字段的内容可不同于对应的clb字段。在一个实施例中,dir660的ri字段663包含n个所谓的存在位(pb),所述存在位指示哪些节点正在跟踪所述区,其中n对应于系统中节点的数目。如果pb中的位k被置位,则意味着在节点k的clb-x中存在对应的项。这还意味着在节点k的高速缓冲级l1到l-y中的任何高速缓冲级中可存在经高速缓冲的数据,且还意味着在节点k中在clb-1中可存在对应的项,这将使节点k中的cpu能够对对应区的任何高速缓冲行进行存取。尽管参照pb信息的n位构建方式进行了说明,然而所属领域中的技术人员将认识到,可使用用于目录构建的许多可扩展技术(包括但不限于粗粒度、受限指针以及链接列表)来构建相似的功能。

可使用pb位来对区进行分类。如果对应项在目录660中的pb位中确切的一个位被置位,则将区分类为专用区(pr)。在大量的研究基准中,经验研究表明所有被存取的区中平均大约80%是pr区。区分类pr意味着这一区的数据可仅存在于其对应的pb位被置位的一个节点中,且还保证此时其他节点不可存取来自这一区的数据。其pb位是目录中唯一被置位的位的节点601可被告知对应区是专用区(pr)且可将区分类记录在节点601的clb中的(例如,clb-1610到clb-x630中的)对应的区信息(ri)中。pr区可在许多方面进行高效存取。举例来说,不需要全局相干来使节点获得对于节点中存在的数据单元的写入许可(所述节点当前仅具有对节点中存在的数据单元的读取许可)(不需要将数据单元从状态s升级到状态e),这是因为只有一个节点可具有所述节点的数据的高速缓冲副本且其他节点不可存取这一区的数据单元中的任何数据单元。也可高效地构建pr的数据单元的移动,这是因为数据可在整个高速缓冲层次结构中上下移动(例如,从l-x逐出到llc或者将数据llc移动到l-1),而无需告知节点外部的任何结构。还需要将移动记录在节点本地的clb(610到630)中。这意味着存储在节点的高速缓冲位置缓冲器(610到630)中的pr区的clt信息可不同于(例如,更新于)存储在dir660中的区的clt信息。

当第二节点(例如,690)对pr区进行存取(经验研究表明这是相对罕见的事件)时,在第二节点的全部clb691到693中均将出现未命中,且第二节点将向dir660发送请求以得到对于存取数据而言所需的合适的位置信息li且还使得能够在clb691到693中创建第二节点自己的clb项。由于这一请求是针对pr区的,因此dir660可不具有最新信息,目录660需要从节点601得到最新位置信息并确保节点601的clb不再将所述区标记为pr,并更新自己的关于这一区的clt信息,对与节点-2690对应的pb位进行置位并将所述区的合适的clb信息发送到节点690。节点-2690现在可创建节点-2690自己的与所述区相关联的本地clb项。在一个实施例中,节点601必须在将最新位置信息发送到dir660之前完成节点601的所有正在进行的针对这一区的直接对数据存储器请求。

如果还有另一个节点(例如,节点-n699)也对所述区进行存取,则此另一个节点也会在其所有的clb中出现未命中且也将向dir660发送请求,目录660现在便会具有关于所述区的最新信息且可向节点-n699回复合适的信息且还将对所述区的针对请求节点(即,节点699)的pb位进行置位。

多于一个pb位被置位的区被分类成共享区(sr)。这意味着多于一个节点具有跟踪此区的位置信息的clb。这还意味着对应pb位被置位的节点可将此区的数据单元存储在所述节点的高速缓冲(例如,620到640)中的任何高速缓冲中。如果这一区被分类为sr,则来自cpu(例如,610)的存取数据单元的请求在无法在节点内在本地得到满足(例如,通过高速缓冲l-1620到l-y640得到满足)时可能需要发起全局相干事务。

在一个实施例中,对sr或pr区进行的全局相干读取事务(无法由本地高速缓冲(例如,高速缓冲l-1620到l-y640)满足的读取)可利用从所述区的本地clb(例如,clb-1610到clb-x630)取回的位置信息来直接存取数据而不涉及dir660或者不与除可由位置信息标识的节点之外的任何节点进行通信。此在本文中被称为直接对主机存取。经验研究表明,对sr区进行的所有全局相干事务中75%是直接对主机读取事务存取。因此,如果由cpu发起的全局事务中20%是针对sr页且这20%中75%不需要对dir进行存取,则在使用根据这些实施例的高速缓冲结构及技术时,这些全局相干事务中95%不需要对dir进行存取,而对于传统的基于目录的协议,所有全局相干事务均需要对dir进行存取。

由于sr区具有多个节点跟踪其数据单元的位置,因此这些数据单元移动需要反映在跟踪所述区的所有节点中(即,这些节点具有所述区的现用的clb项)且发生移动的数据单元的位置信息会在这些节点中进行更新。在一个实施例中,应采用相干方式更新跟踪数据单元的不同节点的clb的位置信息以使得clb就数据驻留在何处(被称为其主位置)达成共识。在一个实施例中,还保证基于从clb取回的位置信息进行存取的数据单元位置包含正确数据(被称为确定性)。

这种数据单元移动的一个共同原因是全局相干写入请求,即当前不具有对数据单元的写入许可的请求节点通过全局相干请求(例如无效请求或独占型读取请求)来请求得到写入许可。在已完成这一请求之后,数据单元将只驻留在发出请求的节点中。

在一个实施例中,发出请求的节点(例如,601)将全局相干写入请求发送到目录660,目录660对对应的目录项进行定位、取回所述区的对应的pb位并向对应pb位被置位的所有节点(除发出请求的节点之外)转发请求,这些节点被称为从节点(例如,节点690及699)。在从节点已确认在从节点中发起的对于数据单元的任何未来的请求均将被引导到发出请求的节点时,从节点发送ack消息。这可例如通过将节点的对于位于所述节点的clb中的数据单元的位置信息改变成指向发出请求的节点(601)来实现,其将成为新的主节点。ack消息可被发送到dir660,其汇总它们且一旦已接收到所有ack便向发出请求的节点发送ack,或者被直接发送到发出请求的节点601。一旦发出请求的节点知晓已接收到所有ack,发出请求的节点便已获得对于高速缓冲行的独占型写入许可且会完成请求。在一个实施例中,在完成请求后将完成消息发送到dir660。

数据移动的另一个共同原因是逐出(也被称为替换)。节点本地的逐出(例如,从l-1620逐出到l-y640)是在本地进行处理、由节点的本地clb项跟踪且在节点外不可见。然而,主数据单元的全局逐出(例如,从l-y640中的位置641到llc670中的新位置671的逐出)必须由跟踪所述区的所有节点(即,具有针对这一区的clb项的所有节点)反映。在一个实施例中,全局逐出是通过首先将存储在数据单元的旧位置(641)中的数据单元的值复制到新位置(671)、同时使存储在旧位置(641)中的数据保持有效来实施。接着,将具有关于新位置(671)的信息的全局相干逐出请求从发出请求的节点(例如,601)发送到dir(660),其将请求转发到从节点(例如,690及699)。一旦从节点已将从节点的对应位置信息更新到新位置(671),从节点便发送ack消息。一旦发出请求的节点知晓所有ack均已发送,则发出请求的节点便已获得对于数据单元的逐出许可且可回收旧位置并完成请求。在一个实施例中,在请求完成后向dir660发送完成消息。

在一个实施例中,从节点在其对于所请求高速缓冲行的未决请求(例如,所有直接对主机请求)中的一些请求完成之前不会发送ack消息。

在一个实施例中,目录660构建阻止机制,所述阻止机制确保对于每一个数据单元而言可存在至多一个特定类型的未决全局请求。这些请求类型的实例可为全局相干写入请求及全局相干逐出请求。对于高速缓冲行进行的这种阻止会在已完成所述请求之后结束,或者对于高速缓冲行进行的阻止的结束是由相干性协议以其他方式规定。阻止机制可为精确的,例如在目录中由每个数据单元一个锁来构建,或者可为过于近似的,在这里地址散列到有限的锁池且对数据单元的阻止将会阻止对散列到同一个锁的所有其他数据单元的存取。

在一个实施例中,阻止是以区粒度而非数据单元粒度来进行,且clb/目录溢出/填充请求中的一些请求也需要被阻止直到它们的更新已完成为止。这会保证在节点及目录使clb信息溢出/填充的同时不存在正在进行的全局相干写入请求。

另一种有用的区分类是与区相关联的pb位在dir660中均未被置位的区。这意味着对于所述区而言,数据单元无法存在于节点的高速缓冲l-1至l-y中的任何高速缓冲中且当前没有节点可对这一区的数据单元进行存取。这被称为未被跟踪的区(ur)。ur区的数据仍可在llc中进行高速缓冲。在一个实施例中,可从llc670逐出ur区的数据单元而无需任何全局相干请求。在dir660中不具有对应项的区被分类为存储区(mr)。mr区的数据单元无法在节点或在llc中进行高速缓冲。从dir660对clt进行替换意味着应强制性地从llc逐出这一区的所有数据单元。

在一个实施例中,图6所示高速缓冲系统是无标签高速缓冲系统,即,存储在高速缓冲(例如,节点的高速缓冲l-1到l-y以及llc)中的数据单元不具有相关联的地址标签的高速缓冲系统。而是,具有相关联的地址标签的位置信息将标识存储数据单元的位置。但是,图6中所包括的传统高速缓冲(l0-i及l0-d)仍可具有与其高速缓冲数据单元相关联的地址标签。

图7与图6的不同之处在于,llc已被切成llc片(llc-1745、llc-2772及llc-n779)且被放置在芯片上网络(noc)750的靠近节点的另一侧上。各个片中的每一者分别配置有替换计数器(rc)775、776及777。这些计数器对在每一个llc片中高速缓冲替换的数目进行计数。应注意,图7所示实施例将llc片放置在每一个节点(由虚线框表示)外部。即使每一个llc片(例如,771)与每一个节点相邻且可由节点的cpu(710)以非常短的延时进行存取,然而它们仍可被视为一个大的全局llc。从clb-x(例如,730)逐出区项未必需要使驻留在靠近节点(例如,771)的llc片中的对应的区数据被强制性地逐出。另外,节点(例如,701)可将位置信息存储在其clb(例如,710)中以径直指向与远程节点相邻的远程llc片中的位置(例如,772中的位置)且可对此数据进行存取而无需通过dir760或那一节点(790)的任何clb间接进行。

如今存在从图7想到的llc构建方式(仅在llc在实体上被划分成在实体上靠近节点放置的存储体的意义上而言,而非相对于图7所示其他元件而言)。然而,如今的解决方案(例如来自英特尔的服务器芯片)根据数据单元的地址将数据单元放置在llc存储体中,此会使命中llc存储体的存取中25%将命中靠近节点的存储体,此处假设存在四个节点。根据实施例阐述的高速缓冲存取技术(例如,基于位置信息指针)使得数据单元的放置具有充分灵活性而不依赖于数据单元的地址,此可潜在地增大llc命中的本地部分。一个选项是在对共享数据进行存取的所有llc片中复制所有共享数据。然而,在所有llc片中复制所有共享数据将会消耗llc容量。如之前所述,通常区中20%是共享的。假设不需要在所有节点中对所有共享区进行复制,四节点系统将耗用其llc容量的80%来存储所复制的llc数据。这明显是欠佳的,导致需要更智能的llc分配/复制决策。

当数据单元被首先分配给llc片时,始终将所述数据单元置于与对其进行存取的cpu相邻的llc片中可看起来为有益的。然而,由于在不同的cpu中运行的线程可具有不同的llc容量需求,因此有时将数据单元放置在远程llc片中且由此“盗用”其本地llc容量中的一些容量可为有益的。在一个实施例中,分配决策是基于llc高速缓冲压力作出的。每一个llc片均具有替换计数器(rc775、776、777),寄存在所述片中发生的替换的数目。在一个实施例中,对这些计数器进行周期性地监测以确定对于每一个llc片而言的高速缓冲压力,其中计数越高表示压力越高。当对数据单元分配llc空间时,如果末级高速缓冲片的高速缓冲压力最低,则始终在本地llc片中分配空间。如果不是这样,则将对当前具有最低压力的远程llc片进行其分配的可配置的一部分,而其余分配则在本地llc片中进行。在一个实施例中,在远程llc片中对空间进行分配将仅在某些情况下进行,例如,在本地llc片的高速缓冲压力高于特定阈值时。

在其中多个节点共享单个末级高速缓冲的传统高速缓冲拓扑结构(例如图1所示l2103或图6所示llc670)中,每一个数据单元通常有至多一个副本驻留在llc(被称为共享高速缓冲)中,而节点专用的高速缓冲(还被称为专用高速缓冲)(例如图1所示l1高速缓冲102)可各自存储同一数据单元的复制副本。图7所示llc片具有以下两种选项:将数据单元的单个副本存储在llc片中的一者中且使用相同的位置信息来存取所有节点;或者将数据单元的多个所谓的复制副本存储在多个llc片中。

举例来说,数据单元774可为数据单元的唯一llc副本且clb-1710中的clt712以及clb-1791中的ckt二者均将各自的相关联的位置信息指向位置774。此在本文中被称为共享llc数据。在作出决策来复制数据之后,可将数据的副本置于位置773中且将clt712中相关联的位置信息改变成指向位置773。存储在773中的数据单元被称为本地llc数据单元。存储在位置773中的本地数据仅可通过在位于节点1701本地的clb中进行的查找来间接存取,而存储在位置774中的全局数据仍可通过例如节点n799利用指向位置774的位置信息来直接存取。

在一个实施例中,由指令未命中(例如,指令高速缓冲l0-i中的未命中)引起的对远程llc片进行的存取可使数据单元被复制并且还驻留在与发出请求的cpu的节点相邻的llc片中。这是由对于指令的高速缓冲未命中通常会引起比数据未命中更大的性能劣化这一事实造成的。

在一个实施例中,对远程llc片中所谓的“热”数据单元的存取可使数据单元被复制并且还驻留在与发出请求的cpu的节点相邻的llc中。热数据单元是被频繁存取的数据单元。可例如通过对自上次对数据进行存取以来的持续时间进行测量来检测热数据。此可例如通过提供与数据单元相关联或与位置信息相关联的“存取时间戳”来实施。还可通过高速缓冲替换算法(例如,lru或伪lru)来检测热数据,高速缓冲替换算法可检测最近是否已对数据单元进行了存取。在一个实施例中,一组中被标记为最新使用(mru)数据单元的所存取数据单元被分类为热数据单元且引起复制。发明人自己的经验研究表明,智能的分配及复制决策(例如以上论述的分配及复制决策)可使平均80%的llc存取命中本地llc片。

在一个实施例中,对远程llc片的存取可使数据单元迁移到与发出请求的cpu的节点相邻的llc片。迁移决策可基于区的类别作出。举例来说,对专用区的存取可使数据单元迁移到与发出请求的cpu的节点相邻的llc片。更具体来说,如果所存取的区被分类为专用区(pr),则指令存取或者对热数据的存取可造成迁移。

在一个实施例中,图7所示高速缓冲系统是无标签高速缓冲系统,即,存储在高速缓冲(例如,节点的高速缓冲l-1到l-y以及llc)中的数据单元不具有相关联的地址标签的高速缓冲系统。而是,具有相关联的地址标签的位置信息将标识存储有数据单元的位置。图7中所包括的传统高速缓冲(l0-i及l0-d)仍可具有与其高速缓冲数据单元相关联的地址标签。

图8示出方法实施例且将在下文与其他方法实施例一起进行详细阐述。

通过参照将在采用这些实施例的多处理器系统中出现的实际存储器存取事务,可更好地理解上述实施例的操作。举例来说,图9至图13描述可由实施例用来在图6所示数据高速缓冲层次结构与clb层次结构之间维持特定相干性及确定性的序列。对于图7所示多处理器系统而言,也可使用相似的序列来保持相干性及确定性。

图9至图13示出带编号的步骤,所述带编号的步骤包括在图6中所标识的四个不同元件之间的通信步骤,所述四个不同元件由位于图9至图13顶部处的区块表示。具体来说,这四个不同的元件包括:1)请求方节点(例如,601),是开始进行活动(例如因在节点内发起的请求无法在这一节点内在本地得到满足而开始进行)的节点;2)dir660,充当对于存储在节点1到节点n中的clb信息的后备存储(溢出/填充)且还参与使数据单元保持相干的全局相干活动;3)数据单元的主位置,例如,llc670中的位置671;以及4)笼统地表示“pb节点”(即,除发出请求的节点之外,对应pb位在dir660中被置位且对应于所请求的数据单元的节点)的元件,所述“存在位节点”也被称为从节点。

所采取的步骤在这些实施例中是按照编号顺序来阐述,然而所属领域中的技术人员将认识到,所述步骤中的一些步骤可并行执行且各个步骤之间可存在其他可能的顺序。

转至图9,此图绘示根据实施例的为与发出请求的节点601中的clb命中相结合地解决全局相干“读取未命中”而需要的全局步骤及本地步骤,即,在节点-1601中发起的对于节点601中不存在的数据单元的数据请求。数据单元的主位置处于llc670的位置671中。此实例适用于pr与sr区二者。会采取以下步骤:

步骤901)节点601命中其clb中的一者,从li确定需要全局读取请求,并利用li来形成以数据单元的主位置671作为目标的读取请求(readreq)。

步骤902)在readreq请求中提供的信息足以找到高速缓冲(llc670)以及所述高速缓冲内数据单元所驻留的位置(671)。此会使得数据响应(数据)被发送回节点-1601。

步骤903)节点601在节点内找到合适的本地位置(ll)(例如,空闲位置,可变得空闲的位置或者以其他方式可用的位置),并将与数据单元关联的对应本地clb项的位置信息(li)改变成指向此本地位置。

步骤904)将本地位置标记为具有共享状态(s)以指示副本是可读取的但不可写入的。

此数据单元的主副本保持位置671,因此既不需要与dir660进行通信也不需要与从节点进行通信(或者通过位置671与“pb节点690及699”区块之间的信号示出)。

转至图10,此图绘示根据实施例的为与发出请求的节点中的clb未命中相结合地解决全局相干“读取未命中”而需要的全局步骤及本地步骤。此实例适用于sr及ur区(在与所请求的数据单元对应的dir中被置位的pb位的数目不等于1)。会采取以下步骤:

步骤1001)节点601无法在其clb中找到对应的项,并形成以dir660为目标的读取请求clb未命中(readreqcm)。

步骤1002)dir660将此区标记为被阻止的(可能通过从有限散列锁池选取锁来阻止)。

步骤1003)dir660对与节点-601对应的等于1的pb位进行置位。

步骤1004)dir660确定主位置是位置671并向此位置发送读取请求。

步骤1005)并行地,dir660向节点601发送clb信息以使其创建与数据单元相关联的本地clb项。

步骤1006)将数据从主位置671发送到发出请求的节点601。

步骤1007)节点601在节点内找到合适的本地位置(ll)并将本地clb项改变成指向此本地位置。

步骤1008)将本地位置标记为共享状态(s)以指示副本是可读取的但不可写入的。

步骤1009)发出请求的节点601向dir660发送完成消息(cmp)。

步骤1010)dir660对所述区解除阻止。

转至图11,此图绘示根据实施例的为与发出请求的节点中的clb未命中相结合地解决全局相干“读取未命中”而需要的全局步骤及本地步骤。此实例适用于pr区(在与所请求的数据单元对应的dir中被置位的pb位的数目等于1)。本实例假设pb位仅针对节点690被置位。会采取以下步骤:

步骤1101)节点601无法在其本地clb中找到对应的项,并形成以dir660为目标的读取请求clb未命中(readreqcm)。

步骤1102)dir660将此区标记为被阻止的。

步骤1103)dir660对与节点601对应的pb位进行置位。

步骤1104)dir660确定所述区是pr且确定所述区不具有最新clb信息。由于clb的对应的pb位在dir的ri字段663中被置位,因此clbreq被发送到节点690。

步骤1105)节点690的clb将表示区的分类pr的区信息(ri)清除。

步骤1106)一旦节点690已完成其未决的直接对数据读取请求,节点690便将clb信息回复给dir660。

步骤1107)dir660向发出请求的节点601转发clb信息以使其创建与数据单元相关联的本地clb项。

步骤1108)节点690确定所请求数据的主位置是位置671并向此位置发送读取请求。

步骤1109)将数据发送到发出请求的节点601。

步骤1110)节点601在节点内找到本地位置(ll)并将本地clb项改变成指向此本地位置。

步骤1111)将本地位置标记为共享状态(s)以指示副本是可读取的但不可写入的。

步骤1112)节点601向dir660发送完成消息(cmp)。

步骤1113)dir660对所述区解除阻止。

转至图12,此图绘示根据实施例的为与发出请求的节点中的clb命中相结合地解决全局相干“写入升级未命中”而需要的全局步骤及本地步骤。此实例适用于sr区(在对应数据单元的dir中被置位的pb位的数目大于1)。本实例假设pb位仅针对节点690及节点699被置位。会采取以下步骤:

步骤1201)节点601找到其本地clb中的对应项并确定所述对应项具有处于共享状态(s)的数据单元的本地副本,且形成以dir660为目标的无效请求(invreg)。

步骤1202)dir660将此区标记为被阻止的。

步骤1203)dir660将与所请求的数据单元对应的li设定成指向节点601。

步骤1204)dir660向两个从节点(即,节点690及699)发送无效请求(inv),其中所述两个从节点的对应的pb位在dir660中被置位。

步骤1205)两个从节点(690及699)将它们的与所请求的数据单元对应的li设定成指向节点601。

步骤1206)两个从节点(690及699)确认无法再对它们所具有的数据单元的任何本地副本进行存取(由改变成无效状态的状态来表示(状态:=i)。

步骤1207)两个从节点(690及699)向发出请求的节点(601)发送确认消息。

步骤1208)在发出请求的节点已接收到所有确认消息(将接收的消息的数目可由消息自身载送)之后,将节点601中数据单元的副本标记为独占型状态(e)以指示副本既可读取也可写入。

步骤1209)节点601向dir660发送完成消息(cmp)。

步骤1210)dir660对所述区解除阻止。

转至图13,此图绘示根据实施例的为解决来自节点601的全局相干逐出请求而需要的全局步骤及本地步骤。举例来说,节点601可将数据单元的脏副本存储在节点601的应被逐出到llc670中的位置671的高速缓冲l-y640中。本实例假设目录660中与相关数据单元对应的pb位被针对节点690及节点699置位。会采取以下步骤:

步骤1301)节点601将数据单元的值复制到新位置671(copydata)。

步骤1302)在这个步骤期间,确定copydata操作已达到可保证以此数据单元为目标的任何readreq将保证会返送回数据单元的更新副本的程度。这可例如由从网络内部产生的信号通过网络排序性质来实现,或者如在图13的实施例中所示在已接收到copydata信号之后通过目标位置771向节点601发回所复制信号来实现。

步骤1303)发出请求的节点601向dir660发送用于逐出数据的请求(evictreq)。

步骤1304)dir660对区进行阻止。

步骤1305)dir660将目标位置671标记为数据单元的li。

步骤1306)dir660向对应pb位在dir660中被置位的两个从节点(即,节点690及699)发送新位置信息(newli)。

步骤1307)两个从节点(690及699)将其对应于目标位置671的li置位。

步骤1308)两个从节点(690及699)向发出请求的节点(601)发送确认消息。

步骤1309)在发出请求的节点接收到所有确认消息后,可释放被已逐出的数据单元占据的空间(被表示为状态:=i)

步骤1310)节点601向dir660发送完成消息(cmp)。

步骤1311)dir660对所述区解除阻止。

可注意到,dir660在图12的步骤1204中向所有具有有效clb项的节点发送inv消息。这可潜在地使得比仅向已知已读取所请求的数据单元的节点发送inv消息的传统的基于目录的相干性协议发送更多inv消息。在一个实施例中,这种效果是通过被称为clbweeding的技术来实现的,在这种技术中,如果检测到节点接收到不必要的inv消息,则将一些clb项逐出。举例来说,如果在节点的高速缓冲中未驻留有对应区的任何数据单元且针对所述区接收到inv消息,则可将clb项逐出。发明人已通过经验表明,尽管有可能发送更多inv消息,然而由本实施例中所提出的系统发送的消息的总数目少于由传统的基于目录的相干系统发送的消息的数目的一半。

在一个实施例中,如果因dir中的pb位表示形式而仍检测到区产生过多相干消息,则可将区转换成被称为精细粒度区(fr)的专门分类。fr区(预期会非常少)在dir中具有专门的项,所述专门的项可跟踪具有与每一个高速缓冲行相关联的共享副本的节点组,此可能使用目录表示形式技术(例如,全映射、dirn-b、dirn-nb或粗粒度式表示形式)来进行。所述区的clb项将被标记为fr区且将在开始时将它们的位置项置位成符号“不知晓”(dk)。此将促使全局相干读取请求查询dir来找到数据单元的位置,此将允许dir跟踪节点是否具有与所请求的数据单元相关联的共享副本。此信息使dir仅向已请求高速缓冲行的节点发送inv消息。

在一个实施例中,节点将pb位存储为节点的clb项(例如,610到630)的区信息(ri)的一部分。此使得请求相干写入许可的节点能够向从节点直接发送无效请求,而非通过目录进行间接存取。

如果提供阻止机制(例如结合dir660所述的机制),则多处理器系统的高速缓冲相干性协议可得到很大程度的简化。然而,存在各个节点之间的直接通信优先于通过目录间接进行的情形,例如,在一些实施例中将pb位存储为节点的clb中的区信息(ri)的一部分以使得无效消息能够直接在各个节点之间发送而无需目录查找。具有从目录解耦合的阻止机制将是有益的。这不仅将节省额外的目录查找延迟及能量,而且将潜在地减少所发送的noc事务以及减少时域交叉。

在一个实施例中,网络会构建阻止功能,所述阻止功能阻止某些消息在网络上发送。此可通过在网络中集成锁阵列来构建,其中使用与消息相关联的地址的一部分来选择与消息对应的锁。当在网络上发送特定类型的消息时,可获取对应的锁(锁得到置位)。在所述锁仍保持被获取时,会阻止特定类型的其他消息在网络上发送。需要通过由相干性协议规定的一些事件将锁释放,之后才能发送与所述锁相关联的被阻止消息。

获取锁的消息可为广播类型的,此意味着可存在多于一个节点接收所述消息。在一个实施例中,接收到所述消息的一个或多个节点需要采取措施(按照相干性协议的规定)来将相关联的锁释放,之后才能发送被阻止的消息。在一个实施例中,当锁得到释放时,发送节点会得到通知。

在一个实施例中,由发出请求的节点发起的单个写入请求可产生被发送到多个从节点的无效广播消息,此将使得获得锁。从节点中的每一者使其数据单元无效化并向锁应用释放机制。一旦所有从节点均已应用它们的释放机制,锁便得到释放且发出请求的节点会得到通知并将被授予写入许可。这应与传统的基于目录的相干系统进行比较,在传统的基于目录的相干系统中,在节点中发起的写入请求将涉及到以下步骤:向目录发送写入请求;目录锁定从节点并向从节点发送无效消息;从节点使数据单元无效化并发送ack消息;发送请求的节点检测何时接收到所有ack以及得到写入许可;在目录中对锁进行解锁。

本文所述机制与利用传统的基于标签的高速缓冲构建的传统的基于目录的相干高速缓冲存储器系统相比具有许多明显的差异。已阐述了具有一种或多种以下独特性质的实施例:

1)用于标识可在何处找到数据单元的可读取副本的高速缓冲位置信息是在靠近cpu的所谓经高速缓冲的位置缓冲器(clb)中进行高速缓冲的。

2)clb形成单独的包容性“clb高速缓冲层次结构”在其根部处具有目录dir并存储与在单独的“数据高速缓冲层次结构”中在何处存储数据单元有关的“元数据”信息。这不同于传统的高速缓冲,传统的高速缓冲存储与每一个高速缓冲行相关联的地址标签“元数据”以标识其身份且由此需要搜索每一级中是否具有所请求的数据单元。clb+dir是以层次结构方式来进行组织及搜索的。

3)“数据高速缓冲层次结构”的数据高速缓冲不需要如传统高速缓冲所常见的一样以层次结构方式进行组织及搜索。

4)目录使用“pb位”对可能具有区的高速缓冲行的副本的(或者可对区进行存取的)节点进行跟踪。此信息用来操纵一些相干消息,例如无效消息(inv)。这不同于对可能具有与每一个高速缓冲行相关联的共享副本的一组节点进行跟踪的传统目录。

5)检测专用区,只有一个节点可存取所述专用区的数据单元且可具有所述区的数据单元的经高速缓冲的副本。

这些特征能够实现在传统的基于目录的相干存储器系统中所不存在的多个独特的性质。

●全局相干请求中80%不需要将相干性考虑在内,这是因为可保证只有一个节点可对数据进行存取且可具有所存取的数据的高速缓冲副本,例如归因于以上特性(5)。

●全局相干读取请求不需要查询目录,这是由于:在本地高速缓冲的位置信息可告知数据位于何处,例如归因于以上特性(1);以及跟踪可具有与每一个高速缓冲行相关联的共享副本的一组节点,例如归因于以上特性(4)

●llc被划分成llc片,其中将数据单元分配到llc片可自由地进行而不依赖于数据单元的地址,例如归因于以上特性(1)。将llc片靠近节点放置且使用智能启发方式来增大节点将对其llc中的数据单元进行存取的可能性。

●读取存取可在这种本地llc中找到所请求的数据单元,例如,归因于以上特性(1);片无需查询目录,例如归因于以上特性(4)

由发明人进行的经验研究已表明,所提出的技术在将l1未命中的平均延迟平均缩减30%的同时将全局noc消息的数目、在整个noc中发送的数据量以及所使用的总能量在各种各样的应用中全部减少大于50%。

从前述各实施例可注意到各实施例的各种一般特征。这些特征可在一些实施例中一同使用,或者在其他实施例中以各种组合及子组合形式一同使用。举例来说,使用高速缓冲位置缓冲器(clb)来跟踪多处理器高速缓冲层次结构中高速缓冲行的位置。高速缓冲层次结构可包括大小不同及/或存取时间不同的一个或多个高速缓冲。每一个高速缓冲可存储在关联路中存储的多个高速缓冲行,举例来说,所述关联路被划分成多个组,每个组包含多个路。尽管可使用标识高速缓冲行的地址来标识高速缓冲器内高速缓冲行应驻留的组,然而对高速缓冲行的路位置的标识无法在不进行搜索的条件下通过高速缓冲行的地址来确定。

根据一些实施例的clb的一个任务是高效地找到存储具体的高速缓冲行的高速缓冲以及在所述高速缓冲级内存储具体的高速缓冲行的位置、存储所述高速缓冲行的节点或者是高效地确定所述高速缓冲行根本不驻留在高速缓冲层次结构中。在此上下文中,“高效地”可指使用较少的能量、更快速地运行、使用较少的存储空间、它们的一些组合、或其他有益结果。

clb可根据一些实施例被构建为关联结构以存储多个高速缓冲表项(cte)。每一个这种项存储例如由所述cte标识的高速缓冲行群组的地址标签及位置信息。clb可使用较小的且较快的clb并由较大但较慢的clb作为后备来以层次结构方式构建。可将不同的clb级设计成使用虚拟地址或物理地址进行存取。

所请求高速缓冲行的位置是通过在clb中进行查找来确定的,在确定所述位置之后,可在所确定的级及位置处对高速缓冲行进行存取而无需任何其他关联查找。此会消除对在高速缓冲层次结构中存储额外地址标签的要求。

预期存在以上实施例的各种变化及排列方式。举例来说,在一个实施例中,与cte相关联的位置信息位的数目可因不同的clb级而异,且在clb级之间复制li可为部分复制操作。在另一个实施例中,第一级clb的功能集成有tlb的功能或者包含在tlb中常见的功能的一部分。在这种实施方式的实例中,clb项可包含虚拟地址标签(vat)、高速缓冲位置表(clt)、存取许可编码、及物理地址变换的一些组合、以及在tlb实施方式中常见的其他元数据。此外,即使以上实例包含最多为两个高速缓冲级以及最多为两个clb级,然而所属领域中的技术人员应理解,本文所述技术可被推广到应用于更多级高速缓冲及更多级clb。并不要求高速缓冲级的数目与clb级的数目相同。还应理解,末级clb可溢出及填充到传统(主)存储器中的专用的区且由此充当clb高速缓冲。

在一个实施例中,cte的信息可包含与其相关联的高速缓冲行相关联的其他元数据,所述元数据包括但不限于关于相关联的高速缓冲行的存取模式及以往使用情况的信息、高速缓冲行状态、tlb中所正常存储的保护信息以及为产生物理地址而需要的物理地址部分。此数据中的一些数据可存储在区信息(ri)字段(例如,413及425)中。

实施例还可被表达为方法,所述方法的实例被作为方法800提供于图8所示流程图中。其中,在步骤802处,将数据单元存储在多处理器系统的节点中的专用高速缓冲中,其中每一个节点包含至少一个处理器(cpu)、所述节点专用的至少一个高速缓冲、及所述节点专用的至少一个高速缓冲位置缓冲器(clb)。在步骤804处,在每一个clb中存储位置信息值,每一位置信息值指示与相应的数据单元相关联的位置,其中在给定的clb中存储的每一位置信息值指示所述位置是设置在与所述给定的clb处于同一节点中的所述专用高速缓冲内的位置、是其他节点中的一个节点中的位置或者是主存储器中的位置。在步骤806处,使用高速缓冲相干性协议维持数据单元的值的相干性。高速缓冲相干性协议根据位置信息值各自的数据单元的移动来更新存储在clb中的位置信息值。

根据在图14的流程图中示出的另一个方法实施例,一种方法1400包括:在步骤1402处,将数据单元存储在多处理器系统的节点中的专用高速缓冲中以及存储在全局高速缓冲及存储器中,其中每一个节点包含至少一个处理器(cpu)、所述节点专用的至少一个高速缓冲在步骤1404处,使用高速缓冲相干性协议维持存储在专用高速缓冲及全局高速缓冲中的数据单元的值的相干性,所述高速缓冲相干性协议在存储数据单元的地点信息的目录中进行查找。位置信息将其中驻留有数据单元的位置标识为以下中的一者:节点、全局高速缓冲或存储器。如步骤1406所示。

根据图15中所示的另一个方法实施例,一种方法1500包括:在步骤1502处,将数据单元存储在多处理器系统的节点中的专用高速缓冲中以及存储在全局高速缓冲及存储器中,其中每一个节点包含至少一个处理器(cpu)、所述节点专用的至少一个高速缓冲,节点是通过网络进行连接。在步骤1504处,通过分布式高速缓冲相干性协议维持存储在高速缓冲中的数据单元的值的相干性,所述分布式高速缓冲相干性协议在网络上发送相干性消息。步骤1506,阻止一些相干性消息在网络上发送,其中对于一相干性消息,如果其他相干性消息是针对与所述一相干性消息相同的地址区,则发送所述一相干性消息会激活所述阻止功能来阻止其他相干性消息(如步骤1508所示)。

可采用各种顺序来执行图8、图14及图15中所绘示的步骤且一些步骤可并行地或依序地执行。这些方法实施例、以上阐述的系统实施例及其他实施例可提供各种有益结果。举例来说,申请人已进行了详细的模拟研究,所述详细的模拟研究表明,与本文所述实施例相关联的高速缓冲构建方式与传统的高速缓冲系统相比可节省大量能量且还可得到实质上具有较短的存取时间的高速缓冲。

为清晰起见,本文中大部分说明大体描述了如何定位高速缓冲行以及如何向发出请求的cpu返回所述高速缓冲行的技术。所述说明未详细阐述其中对包含在高速缓冲行内的所请求字进行选择以及将所请求字返回到cpu的各种方式,此对所属领域中的技术人员来说将显而易见且将会不必要地使本发明模糊不清。

为清晰起见,本文中阐述对高速缓冲层次结构的数据进行处理的大部分说明阐述了独占型高速缓冲层次结构。所属领域中的技术人员将理解,所阐述的实施例可扩展到也涵盖包容性型存储器层次结构及非独占型存储器层次结构。

尽管以上是在特定示例性计算机架构的上下文中进行阐述,然而在计算机系统内部以及外部的许多其他背景中也存在这种高速缓冲,且前述实施例等同地适用于这种其他上下文。这种使用情况的实例是从慢的大容量存储装置(例如盘或闪存存储器)向较快且较小的大容量存储器(其可使用动态随机存取存储器来实施)中高速缓冲数据的虚拟存储器系统。在计算机系统中进行高速缓冲的其他实例包括但不限于盘高速缓冲、网页高速缓冲及名称高速缓冲。这些高速缓冲的组织及高速缓冲机制可与以上论述的高速缓冲的组织及高速缓冲机制不同,例如组的大小、组的构建方式及关联性等发生变化。不论高速缓冲机制本身的构建方式如何,本文所述实施例等同地适用于构建各种高速缓冲方案。

所公开的实施例阐述例如与各种高速缓冲层次结构相关联的系统及方法。应理解,此说明并不旨在限制本发明。相反,示例性实施例旨在涵盖包括在本发明的精神及范围中的替代、修改及等效形式。另外,在示例性实施例的详细说明中,阐述了各种具体细节来提供对本发明的全面理解。然而,所属领域中的技术人员将理解,无需这些具体细节也可实践各种实施例。

尽管在实施例中采用特定组合方式阐述了本实施例的特征及元件,然而每一个特征或元件可在不使用实施例的其他特征及元件的条件下单独使用或者采用具有或不具有本文所公开的其他特征及元件的各种组合来使用。本申请中提供的方法或流程图可在计算机程序、软件或者固件中实施,所述计算机程序、软件或者固件是以有形方式实施在计算机可读存储装置介质中以由通用计算机或处理器执行。

本书面说明使用所公开主题的实例来使所属领域中的任何技术人员都能够实践所公开的主题,包括制作及使用任何装置或系统以及执行任何所包含的方法。所述主题的可取得专利权的范围是由权利要求书界定,且可包括对于所属领域中的技术人员而言会联想到的其他实例。这些其他实例旨在处于权利要求书的范围内。

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