LLC中Cache行的替换方法

文档序号:6626703阅读:802来源:国知局
LLC中Cache行的替换方法
【专利摘要】本发明提供了一种LLC中Cache行的替换方法,如果目标Cache地址在LLC中缺失,根据操作类型计算新调入Cache行的替换优先级,按照替换优先级有序原则,将原来替换优先级最高的Cache行替换,并将新调入Cache行存入目标Cache的对应位置;如果目标Cache地址在LLC中命中,根据Cache一致性状态和操作类型,更新当前访问Cache行的替换优先级,按照替换优先级有序原则,对当前访问Cache行进行优先级的升降级。能够有效降低包含Cache中替换引入的包含牺牲者导致的性能损失。
【专利说明】 LLC中Cache行的替换方法

【技术领域】
[0001]本发明涉及计算机【技术领域】,尤其涉及一种最后一级高速缓冲存储器(LLC,LastLevel Cache)中Cache行的替换方法。

【背景技术】
[0002]为了填补处理器与存储系统的性能差异,现代处理器通常使用多层Cache结构。其中,一种重要的设计方案是包含Cache (Inclusive Cache)层次结构设计。在InclusiveCache层次结构中,靠近处理器核的上层Cache的Cache行在远离处理器核的下层Cache中均具有副本,而下层Cache中的Cache行则不一定在上层Cache中具有副本,这种结构能够简化Cache —致性协议。但是,与非包含及互斥Cache结构相比,包含Cache可能遭遇性能损失。一方面,由于数据的重复存储,有效的Cache空间减少;另一方面,当一个Cache行从LLC中替换出去时,为了保持包含属性,须将其从上层Cache中无效,这次上层Cache中为了保持包含属性而被无效的Cache行通常被称为“包含牺牲者”(inclusive victims)。由于包含牺牲者在上层Cache中可能属于常用Cache行,因此,过早的无效化会导致额外的访问缺失,从而降低Cache性能。
[0003]传统的LLC替换算法,例如近期最近最少使用(LRU,Least Recently Used)的替换策略中,最近一次被访问的Cache行总是被放在Cache的最近最多使用(MRU,MostResently Used)行,而距离当前最远被访问的Cache行则放置在Cache的LRU行。在进行LLC替换时,通常根据Cache行在LLC中的最近访问频度确定替换候选块,即总是将位于对应组的LRU行替换,而将新加入的Cache行置于MRU处,而不考虑其在上层Cache中的使用情况。因此,当替换候选块在上层Cache中具有很好的访问局部性时,此类替换算法中的“包含牺牲者”将会导致Cache性能急剧下降。
[0004]此外,在片上多处理器(CMP, Chip multiprocessors)系统中,每个处理器核具有私有的LI数据/指令Cache,多个处理器核共享一个LLC。在系统运行过程中,多个处理器核私有的Cache中可能同时存在某一数据块的副本,因此,当对其中一个进行写操作时,需要借助Cache —致性协议保证数据的正确性。在进行LLC替换时,为了保证包含属性,需要将待替换数据块在上层Cache中的全部副本无效。当该数据块在上层Cache经常被访问时,上述无效操作将会极大降低Cache访问性能。
[0005]有鉴于此,需要一种改进的LLC替换方案来解决现有技术的问题。


【发明内容】

[0006]为了解决上述技术问题,本发明提供了一种LLC中Cache行的替换方法,能够有效降低包含Cache中替换引入的“包含牺牲者”导致的性能损失。
[0007]为了达到本发明目的,本发明提供了一种LLC中Cache行的替换方法,包括:如果目标Cache地址在LLC中缺失,根据操作类型计算新调入Cache行的替换优先级,按照替换优先级有序原则,将优先级最高的Cache行换出,并将新调入Cache行存入目标Cache的对应位置;如果目标Cache地址在LLC中命中,根据Cache —致性状态和操作类型,更新当前访问Cache行的替换优先级,按照替换优先级有序原则,对当前访问Cache行进行优先级的升降级。
[0008]进一步地,替换优先级P的计算方式为:P = a1XcXop+kXa2+a3X (l_c) Xop,其中,B1表示写操作权重,c表示上层Cache中的副本是否已经回写,如果回写,c = 0,否则,c=I ;op表示引起替换的操作类型,写操作对应op = I,否则op = O ;k表示只读副本数量,其取值不超过共享LLC的处理器核数;a2表示读操作权重;a3表示回写操作权重,其中,P值越小,替换优先级越高,发生替换时优先被替换。
[0009]进一步地,操作类型包括读操作和写操作;如果由读操作引起LLC中Cache行替换,新调入Cache行中的P = 2*a2 ;如果由写操作引起LLC中Cache行替换,新调入Cache行中的P = al,其中,al大于2*a2 ;如果上层Cache的Cache行发生回写时,P = a3,其中,a3小于2*a2 ;如果上层Cache的Cache行在LLC中存在一个只读副本时,P = a2,其中,a3大于a2。
[0010]进一步地,替换优先级有序原则为:位于同一 Cache中的两个Cache行,分别将该两个Cache行的位置记为i和j,其中i和j具有大小关系;如果i大于j,则替换优先级Pi大于Pj。
[0011]进一步地,按照替换优先级有序原则,将优先级最高的Cache行换出,并将新调入Cache行存入目标Cache的对应位置,包括:如果新调入Cache行的初始替换优先级为大于或等于目标Cache组中的一个非LRU位置的Cache行,则将从所述非LRU位置的Cache行至LRU位置的Cache行依次向LRU方向移动一个Cache行的距离,原来位于LRU位置的Cache行被替换,并将新调入Cache行存入所述非LRU位置的Cache行。
[0012]进一步地,Cache 一致性状态为MESI,处于LLC中的Cache行具有以下共享状态:M态:Cache行仅存于LLC中,上层Cache中无副本;SS态:Cache行同时存在于LLC及上层Cache中,所有数据副本为可读状态;MT态:Cache行同时位于LLC及一个处于互斥操作许可的上层Cache中,并且LLC中的数据在上层Cache中可能被修改过;处于M态的Cache行发生替换需要回写LLC的数据;处于SS态的Cache行替换时除了需要将LLC中的数据无效夕卜,还需将下层Cache中的只读数据副本无效;处于MT态的Cache行替换时,需首先将上层的修改过的数据回写,然后将该上层的数据副本无效。
[0013]进一步地,所述根据Cache —致性状态和操作类型,更新当前访问Cache行的替换优先级,按照替换优先级有序原则,对当前访问Cache行进行优先级的升降级,包括:根据Cache 一致性状态的共享副本数的变化和操作类型的读/写操作情况,更新当前访问Cache行的替换优先级;如果由于Cache —致性状态的共享副本数的变化和操作类型的读/写操作情况,替换优先级发生变化,按照替换优先级有序原则,对当前访问Cache行进行降级或升级。
[0014]与现有技术相比,本发明包括:如果目标Cache地址在LLC中缺失,根据操作类型计算新调入Cache行得替换优先级,按照替换优先级有序原则,将优先级最高的Cache行换出,并将新调入Cache行存入目标Cache的对应位置;如果目标Cache地址在LLC中命中,则根据Cache —致性状态和操作类型,更新当前访问Cache行的替换优先级,按照替换优先级有序原则,对当前访问Cache行进行优先级的升降级。本发明根据LLC中的Cache行的一致性状态信息,对Cache行在整个Cache层次的分布以及共享状态进行加权计算,获得Cache行的替换优先级。一方面,对于LLC中缺失的访问,根据操作类型计算新调入Cache行的初始替换优先级,按照替换优先级有序原则,将优先级最高的Cache行换出,并将新调入Cache行存入目标Cache的对应位置;另一方面,对于在LLC中命中的访问,根据Cache一致性状态及操作类型更新当前访问Cache行替换优先级,按照替换优先级有序原则,进行当前访问Cache行的升降级,从而减少了热点“包含牺牲者”的无效化,有效提升了 Cache的访问性能。

【专利附图】

【附图说明】
[0015]图1是本发明多核共享Cache处理器的结构示意图。
[0016]图2是本发明LLC中Cache行的替换方法的流程示意图。
[0017]图3是本发明LLC中Cache行替换的一个具体实例示意图。
[0018]图4是本发明LLC中Cache行替换的另一个具体实例示意图。
[0019]图5是本发明LLC中Cache行替换的再一个具体实例示意图。

【具体实施方式】
[0020]下面结合附图对本发明进行进一步的详细说明。通过足够详细的描述这些实施示例,使得本领域技术人员能够实践本发明。在不脱离本发明的主旨和范围的情况下,可以对实施做出逻辑的、实现的和其他的改变。
[0021]图1是本发明多核共享Cache处理器的结构示意图。如图1所示,Cache处理器具有两级Cache,靠近处理器核的LI为上层Cache,远离处理器核的LLC为下层Cache。LI与LLC是包含关系,即LI的Cache行在LLC中均有副本,而LLC的Cache行则不一定在LI中有副本,Cache行的操作不能破坏该包含关系。此外,LI为处理器核私有,指令I与数据D分立,LLC为所有处理器核共享。
[0022]图2是本发明LLC中Cache行的替换方法的流程示意图,如图2所示,具体可以包括:
[0023]步骤21,根据当前数据的访问地址确定目标Cache组。
[0024]步骤22,判断目标Cache地址是否在LLC中命中,如果命中,进入步骤28 ;如果缺失,进入步骤23。
[0025]在本步骤中,比较目标Cache地址与LLC中Cache的tag表的字段是否匹配,如果匹配,则命中;如果不匹配,则缺失。
[0026]步骤23,判断LLC中是否存在空行,如果存在,进入步骤24 ;如果不存在,进入步骤25。
[0027]在本步骤中,如果LLC的目标Cache组中存在一个或多个未使用的Cache行,则LLC中存在空行。
[0028]步骤24,将新调入Cache行放入最靠近MRU位置的一空行中,其中将MRU位置记为O位置。
[0029]步骤25,选择处于目标Cache组的LRU位置的Cache行作为替换候选行,且如果该替换候选行数据被修改过,将该替换候选行数据回写,其中将LRU位置记为W-1位置,W为相联度。
[0030]步骤26,根据操作类型,计算新调入Cache行的替换优先级,该计算方式为:
[0031]P = a^cXop+kXaa+agX (l~c) Xop, (I)
[0032]其中,B1表示写操作权重,c表示上层Cache中的副本是否已经回写,如果回写,c=O,否则,c = I ;op表示引起替换的操作类型,写操作对应op = I,否则op = O ;k表示只读副本数量,其取值不超过共享LLC的处理器核数;a2表示读操作权重;a3表示回写操作权重;
[0033]其中,P值越小,替换优先级越高,发生替换时优先被替换。
[0034]在本步骤中,操作类型包括读操作和写操作。
[0035]LLC中Cache行的替换优先级的维护包括两个阶段:初始替换优先级和升降级。
[0036]根据公式⑴的定义,替换优先级中:若由读操作引起LLC行替换,则Cache行初始调入时,P = 2*a2 ;如果由写操作导致的替换,则Cache行的初始替换优先级为P = al。假设P值越小,替换优先级越高,则为了减少LI数据副本的无效以及回写操作,必须增加写操作权重,保证al大于2*a2。当LI中的Cache行发生回写时,P = a3,此时系统中仅有的数据副本存在于LLC中,替换不会导致“包含牺牲者”,因此,替换优先级增加,a3小于2*a2。同时,当Cache行仅在LLC中存在一个只读副本时,其应该具有最高的替换优先级,此时P=a2。可见al、a2、a3的大小关系可以满足叫> 2a2 > a3 > a2。
[0037]在程序运行过程中,LLC中的Cache行的共享副本的数量的增减以及回写操作导致优先级的升降级。只读共享副本增加,P值增加,替换优先级降低;上层替换导致Cache行回写至LLC中将使得P值下降,替换优先级提高。
[0038]值得注意的是,由于不同的应用具有不同的Cache访问特性,因此,可赋予不同的Cache共享状态不同的权重。例如,假设优先级计算值越小,替换优先级越高,如果系统的回写开销大,则应赋予写操作更大的权重,从而降低具有写操作副本的LLC行的替换优先级。
[0039]步骤27,根据替换优先级,按照替换优先级有序原则,将优先级最高的Cache行换出,并将新调入Cache行存入目标Cache的对应位置。
[0040]在本步骤中,替换优先级有序原则为:位于同一 Cache中的两个Cache行,分别将该两个Cache行的位置记为i和j,其中i和j具有大小关系;如果i>j,则替换优先级Pi>Pj。
[0041]若新调入Cache行的初始替换优先级为大于等于目标Cache中的一个非LRU位置的Cache行,则将从该非LRU位置的Cache行至LRU位置的Cache行依次向LRU方向移动一个Cache行的距离,原来处于LRU位置的Cache被换出,并将新调入Cache行存入该非LRU位置的Cache行。
[0042]具体实例可参看图3所示,么、13、(]、0和E表示映射至同一 Cache的Cache行,其中E为新调入Cache行,数字表示替换优先级P值。替换发生前,具有最大P值的Cache行A处于MRU位置,具有最低的替换优先级,具有最小P值的Cache行D处于LRU位置,具有最高的替换优先级。新调入Cache行初始替换优先级为20,目标Cache中的一个非LRU位置的Cache行B的初始替换优先级为20,则将从Cache行B至Cache行D依次向Cache行D方向移动一个Cache行的距离,即A->A+1,Α+1->Α+2,…,W-2->W_l,并将新调入的Cache行存入位于A处的Cache行中。
[0043]步骤28,根据Cache —致性状态和操作类型,更新当前访问Cache行的替换优先级,按照替换优先级有序原则,对当前访问Cache行进行替换优先级的升降级。
[0044]在本步骤中,以一种典型的Cache —致性协议,MESI (M:modified ;E exclusive ;S:shared;I:invalid)协议为例进行说明。需要强调的是,本发明方法并不依赖于特定Cache 一致性协议,任何适用于包含Cache层次结构的Cache —致性协议均适用于本发明方法。
[0045]在MESI协议中,处于LLC中的Cache行具有三种可能的共享状态:I)M态:Cache行仅存于LLC中,上层Cache中无副本;2) SS态:Cache行同时存在于LLC及上层Cache中,所有数据副本为可读状态;3)MT态:Cache行同时位于LLC及一个处于互斥操作许可的上层Cache中,并且LLC中的数据在上层Cache中可能被修改过。三种状态的Cache行发生替换时,需要执行的操作不同,延迟各异。其中,处于M态的Cache行发生替换需要回写LLC的数据;处于SS态的Cache行替换时除了需要将LLC中的数据无效外,还需将上层Cache中的只读数据副本无效;处于MT态的Cache行替换时,需首先将上层的可能修改过的数据回写,然后将其无效。
[0046]LLC中的Cache行的替换优先级与其Cache —致性状态紧密相关,可以参考如表1所不的者的对照关系:
[0047]表1
[0048]

【权利要求】
1.一种LLC中Cache行的替换方法,其特征在于,包括: 如果目标Cache地址在LLC中缺失,根据操作类型计算新调入Cache行的替换优先级,按照替换优先级有序原则,将优先级最高的Cache行换出,并将新调入Cache行存入目标Cache的对应位置; 如果目标Cache地址在LLC中命中,则根据Cache —致性状态和操作类型,更新当前访问Cache行的替换优先级,按照替换优先级有序原则,对当前访问Cache行进行优先级的升降级。
2.根据权利要求1所述的LLC中Cache行的替换方法,其特征在于,所述替换优先级P的计算方式为:
P = B1XcXop+kXa2+a3X (l~c) Xop, 其中,B1表示写操作权重,c表示上层Cache中的副本是否已经回写,如果回写,c = 0,否则,c = I ;op表示引起替换的操作类型,写操作对应op = I,否则op = O ;k表示只读副本数量,其取值不超过共享LLC的处理器核数;a2表示读操作权重;a3表示回写操作权重; 所述P值越小,替换优先级越高,发生替换时优先被替换。
3.根据权利要求2所述的LLC中Cache行的替换方法,其特征在于,所述操作类型包括读操作和写操作; 如果由读操作引起LLC中Cache行替换,新调入Cache行中的P = 2*a2 ; 如果由写操作引起LLC中Cache行替换,新调入Cache行中的P = al,其中,al大于2*a2 ; 如果上层Cache的Cache行发生回写时,P = a3,其中,a3小于2*a2 ; 如果上层Cache的Cache行在LLC中存在一个只读副本时,P = a2,其中,a3大于a2。
4.根据权利要求1所述的LLC中Cache行的替换方法,其特征在于,所述替换优先级有序原则为: 位于同一 Cache中的两个Cache行,分别将该两个Cache行的位置记为i和j,其中i和j具有大小关系; 如果i大于j,则替换优先级Pi大于Pj。
5.根据权利要求1或4所述的LLC中Cache行的替换方法,其特征在于,所述按照替换优先级有序原则,将优先级最高的Cache行换出,并将新调入Cache行存入目标Cache的对应位置,包括: 如果新调入Cache行的初始替换优先级为大于或等于目标Cache中的一个非LRU位置的Cache行,则将从所述非LRU位置的Cache行至LRU位置的Cache行依次向LRU方向移动一个Cache行的距离,原来位于LRU位置的Cache行被替换,并将新调入Cache行存入所述非LRU位置的Cache行。
6.根据权利要求1所述的LLC中Cache行的替换方法,其特征在于,所述Cache—致性状态为MESI,处于LLC中的Cache行具有以下共享状态:M态=Cache行仅存于LLC中,上层Cache中无副本;SS态:Cache行同时存在于LLC及上层Cache中,所有数据副本为可读状态;MT态:Cache行同时位于LLC及一个处于互斥操作许可的上层Cache中,并且LLC中的数据在上层Cache中可能被修改过; 处于M态的Cache行发生替换需要回写LLC的数据;处于SS态的Cache行替换时除了需要将LLC中的数据无效外,还需将上层Cache中的只读数据副本无效;处于MT态的Cache行替换时,需首先将上层的修改过的数据回写,然后将所述上层的修改过的数据无效。
7.根据权利要求1或6所述的LLC中Cache行的替换方法,其特征在于,所述根据Cache 一致性状态和操作类型,更新当前访问Cache行的替换优先级,按照替换优先级有序原则,对当前访问Cache行进行优先级的升降级,包括: 根据Cache —致性状态的共享副本数的变化和操作类型的读/写操作情况,更新当前访问Cache行的替换优先级; 如果由于Cache —致性状态的共享副本数的变化和操作类型的读/写操作情况,替换优先级发生变化,按照替换优先级有序原则,对当前访问Cache行进行降级或升级。
【文档编号】G06F12/08GK104166631SQ201410462286
【公开日】2014年11月26日 申请日期:2014年9月11日 优先权日:2014年9月11日
【发明者】王恩东, 倪璠, 陈继承 申请人:浪潮(北京)电子信息产业有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1