改善高速缓存性能的方法和系统的制作方法

文档序号:6432793阅读:111来源:国知局
专利名称:改善高速缓存性能的方法和系统的制作方法
技术领域
本发明涉及数据处理系统领域,更具体地说,涉及一种包括一个标记的高速缓存,该标记存储先前由处理器请求过的但没有存储在高速缓存中的地址的一个指示。
背景技术
传统的数据处理系统可以包括一个与系统存储器耦合的处理器,该处理器可包含一级或多级高速缓冲存储器。高速缓冲存储器可指相对较小的高速度的存储器,它包含来自系统存储器一个或多个部分的信息的副本。往往是高速缓冲存储器物理上区别于系统存储器。这样的高速缓冲存储器可与系统中的处理器集成在一起,通常称作一级(L1)高速缓存或主高速缓存,或者可以不与系统中的处理器集成在一起,通常称作二级(L2)高速缓存或次级高速缓存。
当处理器产生一个数据地址请求(读请求)而且所请求的数据驻留在它的高速缓冲存储器(例如L1高速缓存)中时,则称发生了“高速缓存命中”。然后,处理器可从高速缓冲存储器中得到该数据,无需访问系统存储器。如果数据不在高速缓冲存储器中,则称发生了“高速缓存未命中”。该存储器请求可被转发到系统存储器,其后数据可从系统存储器中检索出来,正如假如不存在高速缓存时通常所做的那样。在发生高速缓存未命中时,从系统存储器中检索出来的数据可提供给处理器,还可被写入高速缓冲存储器,这是由于统计似然性表明这一数据将被那个处理器再次请求。类似地,如果一个处理器产生写请求,则写数据可被写入高速缓冲存储器,无需通过系统总线访问系统存储器。
如本领域技术人员所知,通常可得到多种高速缓存配置或组织。例如,“直接映射”高速缓存被组织成对于主存储器中的每个编址单元,在高速缓存数据阵列中存在一个且只有一个单元能包括这一数据的一个副本。在“n路组关联(n-way set-associative)”高速缓存中,该高速缓存被配置成对于主存储器中任何一个被编址的单元,在高速缓存数据阵列中存在n个可能单元,它们可能包括这一数据的一个副本。
在设计高速缓存时,已存在许多方法寻求提高高速缓存命中率,从而改善高速缓存的性能。“高速缓存命中率”可指相对于对高速缓存的访问总数发生高速缓存命中的比率。通过改善高速缓存命中率,系统性能可得到改善,即较少数据需要由系统存储器提供服务。
在“n路组关联”高速缓存中,改善高速缓存性能的一种途径是使用最近最少使用(LRU)替换法协助确定在高速缓存中如何管理数据。LRU替换法使用单个逻辑堆栈结构,对于在n路组关联高速缓存(那里每个高速缓存条目存储特定的数据)中的每个同余类,该堆栈结构包含“n”个元素。一个同余类可指一路中的那些条目,它们的地址是彼此的模(modulo)。如前所述,如果被处理器请求的一个项目,如数据,存在于高速缓存中,则称发生了“高速缓存命中”。当发生一个高速缓存命中时,包含所请求信息(如数据)的高速缓存条目被认为是变成在其同余类中“最近最多使用”项目,并在逻辑上从其堆栈中的当前位置移动到堆栈顶部。在同余类中能在逻辑上看作位于堆栈底部的条目是该同余类中的“最近最少使用”项目。如前所述,如果由处理器请求的一个项目(如数据)在高速缓存中不存在,则称发生了“高速缓存未命中”。当发生高速缓存未命中时,所请求的项目从系统存储器中检索出来,然后存储在堆栈顶位置中。当一个新条目被插入堆栈中时,在堆栈的堆栈底位置中的高速缓存条目被挤出。其后,在那个条目的信息(如数据)可被丢弃。当对堆栈中部中的一个条目有高速缓存命中时,那个条目被移动到堆栈顶。位于所请求条目上方的那些条目每个向下移动一个位置,以填充被移动到堆栈顶的条目留下的空白。
然而,处理器可能执行一系列指令,它们可能只被执行一次,如一个中断例程。由于这些指令将不在高速缓冲存储器中,所以将发生高速缓存未命中。如前所述,在LRU算法中,当发生高速缓存未命中时,所请求的项目从系统存储器中检索出来,然后存储在堆栈顶部位置。当一个新的条目逻辑上位于其同余类的堆栈顶部时,逻辑上位于堆栈底部位置的高速缓存条目被挤出。其后,在那个条目的信息(如数据)可能被丢弃。当中断例程完成时,该指令系列可返回到中断前的执行点。然而,在返回到先前指令序列的那一点处的高速缓存可能包含将不会被重新使用的信息(来自中断例程的指令),而且那些否则的话可能已被请求的信息(当来自中断例程的指令插入堆栈时被丢弃的信息)已被挤出。结果,高速缓存命中率可能被降低。
一旦处理器完成一系列将不被再次使用的指令(例如一个中断例程),使那些可能被处理器请求的数据不被挤出的一个可能解决方案是“用针插住(pin)”高速缓存中的数据。用针插住数据指的是指定高速缓存中不被丢弃的特定数据。就是说,用针插住数据指的是指定高速缓存中的特定数据不参加到LRU算法之中。然而,这使高速缓存对程序员不透明,就是说,程序员被迫通过指定哪些特定数据要被用针插住和哪些数据要解除插住(即何时这些数据可用于LRU算法)来管理高速缓存。用针插住数据的另一种途径是把那些将不被再次使用的指令或数据定义为不可高速缓存的,从而防止这类指令或数据被存入高速缓存。然而,这也使得高速缓存对程序员不透明。就是说,程序员被迫通过指定要防止哪个特定指令或数据进入高速缓存来管理高速缓存。
所以,本技术领域需要一种高速缓存设计,它在一旦处理器完成一系列将不被再次使用的指令(例如一个中断例程)时不挤出那些可能由处理器请求的数据,该高速缓存对程序员是透明的。

发明内容
上文概括的问题可以在一些实施例中至少是部分地得到解决,在这些实施例中,在高速缓存中包括一个标记条目,它标识由处理器先前请求过的地址,而该地址的数据当时没有位于该高速缓存中。如果该处理器第二次请求那个地址,则该地址将再次被访问的概率是显著的。当处理器第二次请求由该标记条目标识的地址时,通过插入位于那个地址的数据并挤出位于最近最少使用条目的数据来更新该高速缓存。
在本发明的一个实施例中,改善高速缓存性能的一种方法可包含接收对数据地址的请求的步骤。该方法可进一步包含确定所请求的数据是否位于该高速缓存中。该方法可进一步包含如果所请求的数据不位于该高速缓存中,则确定所请求的地址是否与一个标记的内容关联。该方法可进一步包含如果所请求的地址与该标记的内容关联,而且如果与该标记关联的一位处于第一状态,则使用该标记的内容替换高速缓存中的一个数据元素。如果该标记的内容先前被访问过而且不位于该高速缓存中,则与该标记关联的那一位处于第一状态。
上文相当一般性地概括本发明的一个或多个实施例的特性和技术优点,以便能更好地理解下文中对本发明的详细描述。下文中将描述本发明的再一些特性和优点,它们可能形成本发明的权利要求的主题。


当结合附图考虑下文的详细描述时,能得到对本发明的更好理解,这些附图中图1显示根据本发明一个实施例的系统;图2显示一个直接映射高速缓存的本发明一个实施例;图3显示在标记和数据阵列中的一个条目,与每个标记及数据阵列条目关联的“使用位”以及一个“候选者标记”的本发明一个实施例;图4是根据本发明一个实施例改善直接映射高速缓存性能的一种方法的流程图,在该方法中,在直接映射高速缓存中,本来会被不再用的数据所替换的数据将不被挤出;图5显示n路组关联高速缓存的本发明一个实施例;
图6是根据本发明一个实施例改善n路组关联高速缓存性能的方法流程图,在该方法中,在n路组关联高速缓存中本来会被不再用的数据所替换的数据将不被挤出;图7显示与每个候选者关联的候选者计数器的本发明一个实施例;以及图8是根据本发明一个实施例改善n路组关联高速缓存性能的方法流程图,在该方法中,在n路组关联高速缓存中将不挤出本来会被不再用的数据所替代的数据,而且检测高速缓存的抖动(thrashing)。
具体实施例方式
本发明包含改善高速缓存性能的方法和系统。在本发明的一个实施例中,一个高速缓存可包含一个标记条目,它标识由处理器先前请求过的地址,而该地址的数据当时没有位于该高速缓存中。如果该处理器第二次请求那个地址,则该地址再次被访问的概率是显著的。当处理器第二次请求由该标记条目标识的地址时,通过插入位于那个地址的数据并挤出位于最近最少使用条目的数据来更新该高速缓存。这样,数据将不会被挤出高速缓存,除非有显著概率表明被放在该高速缓存中的数据将很可能再次被访问。因此,高速缓存中的数据不可能被处理器挤出和被不会被再用的数据(如在中断例程中的数据)替代。
尽管对本发明的描述是参考一个指令高速缓存,但应该指出,本发明的原理可应用于数据高速缓存或统一的指令/数据高速缓存。还应进一步指出,将本发明的原理应用于数据高速缓存或统一的指令/数据高速缓存的那些实施例将落入本发明的范围。
再有,尽管可根据一个值是否为逻辑“1”或“0”来造成某些行动,但根据本发明原理的另一些实施例可在这样一个上下文中实现由相反的值,例如是“0”而不是逻辑值“1”,造成这同一个行动,而这样的一些实施例也将落入本发明的精神和范围。
在下文的描述中,将提出若干特定细节,以提供对本发明的彻底理解。然而,对本领域技术人员显然的是,本发明可以被实现而无需这样的特定细节。在其他一些情况中,以方块图的形式显示众所周知的电路,以使本发明不会被不必要的细节掩盖。在大部分描述中已尽可能地略去那些认为是浪费时间的细节或其他细节,如对于完全理解本发明并不是必须的那些细节以及在相关技术领域技术人员的技术范围内的那些细节。
图1——系统图1显示本发明的一个实施例的系统100。系统100可包含一个或多个处理器101。处理器101可包含一个一级(L1)高速缓存102,如L1指令高速缓存。L1高速缓存102可被配置成存储那些可能被处理器101重复访问的指令。为了使数据访问等待时间达到极小,可以实现一个或多个附加的高速缓存级与处理器101耦合,如与处理器101耦合的二级(L2)高速缓存103。较低的高速缓存级,如L2高速缓存103,可被用于使数据进级到L1高速缓存,如L1高速缓存102,而且通常较低的高速缓存级逐级有更大的存储容量但更长的等待时间。参考图1,处理器101可经由系统总线104与系统存储器105耦合。总线104可顺序地允许处理器101和系统存储器105之间的信息,如地址、数据的传送。应该指出,本领域技术人员将容易理解,系统100可包含其他和/或附加设备,但为了清晰而未画出。还要指出,系统100可以是任何类型的系统,而图1的范围不限于任何一个特定的实施例。例如,系统100可包括单个高速缓冲存储器,它可能与也可能不与处理器101集成。
如在背景技术部分中指出的那样,一旦处理器完成一系列将不被再次使用的指令(例如一个中断例程),使高速缓存中那些可能被处理器请求的数据不被挤出的一个可能解决方案是“用针插住”高速缓存中的数据。用针插住数据指的是指定高速缓存中不被丢弃的特定数据。就是说,用针插住数据指的是指定高速缓存中的特定数据不参加到LRU算法中。然而,这使高速缓存对程序员不透明。就是说,程序员被迫通过指定哪些特定数据要被用针插住和哪些数据要解除插住(即何时这些数据可用于LRU算法)来管理高速缓存。用针插住数据的另一种途径是把那些将不被再次使用的指令或数据定义为不可高速缓存的,从而防止这类指令或数据被存入高速缓存。然而,这也使得高速缓存对程序员不透明。就是说,程序员被迫通过指定要防止哪些指令或数据进入高速缓存来管理高速缓存。所以,本技术领域需要一种高速缓存设计,它在一旦处理器完成一系列将不被再次使用的指令(如中断例程)时不挤出那些可能由处理器请求的数据,该高速缓存对程序员是透明的。
下面将结合图2至图4描述一种直接映射高速缓存的设计,它在一旦处理器完成一系列将不被再次使用的指令(如中断例程)时不挤出那些可能由处理器请求的数据,该高速缓存对程序员是透明的。图2显示一个直接映射高速缓存的本发明一个实施例。图3显示在高速缓存的标记和数据阵列中的一个条目、与每个标记及数据阵列条目关联的“使用位”以及一个“候选者标记”的本发明一个实施例。图4显示一种方法的流程图,在该方法中,一旦处理器完成一系列将不被再次使用的数据(如中断例程)时不挤出那些可能由处理器请求的数据,而无需插住直接映射高速缓存中的数据。图5显示一个n路组关联高速缓存的本发明一个实施例。图6显示一种方法的流程图,在该方法中,一旦处理器完成一系列将不被再次使用的数据(如中断例程)时不挤出那些可能由处理器请求的数据,而无需插住n路组关联高速缓存中的数据。图7显示与每个候选者关联的“候选者计数器”的本发明一个实施例。图8是一种方法的流程图,该方法使用图6说明的方法来改善高速缓存的性能以及由候选者计数器检测高速缓存抖动。
图2——直接映射高速缓存图2显示直接映射高速缓存的本发明一个实施例200,它可代表L1高速缓存102或L2高速缓存103或位于计算机系统中的任何其他高速缓存,如盘高速缓存。
参考图2,直接映射高速缓存200可包含一个标记阵列201和一个数据阵列202。标记阵列201可包括多个条目203A-F,数组阵列202可包括多个条目204A-F。条目203A-F可集体地或单个地分别称作一些条目203或一个条目203。条目204 A-F可集体地或单个地分别称作一些条目204或一个条目204。在数据阵列202中的每个条目204可存储数据,例如指令。在标记阵列201中的每个条目203可存储一个“标记”(一系列位),用于标识系统存储器105(图1)中的特定存储单元,在那个存储单元中存储的数据与数据阵列202中的一个相关联条目204中存储的数据相同。例如,标记条目203A可存储一个标记,它标识系统存储器105中的一个特定存储单元,在那个存储单元中存储的数据与数据阵列202中的条目204A中存储的数据相同。应该指出,标记阵列201和数据阵列202可分别包含任何数量的条目203和条目204,而图2是示例性的。
参考图2,在高速缓存200中的每个标记阵列条目203可以与一个标记关联,这里称作“候选者标记”,如下文结合图3讨论的那样。再有,每个标记阵列条目203可与一位关联,这里该位称作“使用位”,如下文结合图3讨论的那样。再有,候选者标记可与一个使用位关联,如下文结合图3讨论的那样。
图3——候选和使用位图3显示高速缓存200(图2)的标记阵列201和数据阵列202各自的一个条目,与候选者标记301关联的“使用位”302以及每个标记阵列条目203的本发明一个实施例。
参考图3,如前所述,标记阵列条目203可包括一个标记,用于标识系统存储器105(图1)中的一个特定存储单元,在该存储单元存储的数据与数据阵列202中的一个相关联条目204中存储的数据相同。在一个实施例中,一部分数据阵列条目204可包括有效位304和数据元素303。在一个实施例中,数据元素303可包括一个或多个指令,如果直接映射高速缓存200是一个指令高速缓存的话。在另一个实施例中,有效位304可能是标记阵列条目203的一部分。有效位304可以是指一个指示,它指出数据元素303是否是有效数据。
如前所述,每个标记阵列条目203可与一个特定的使用位302关联。再有,如上所述,高速缓存200可包含一个候选者标记301,它可与一个特定的使用位302关联。在一个实施例中,在高速缓存200中可包括多个候选者标记301,从而向多个候选者标记301提供一个同时等待第二次访问的机会,以具有两次访问的第一个候选者标记301替换有效高速缓存行,如下文进一步讨论的那样。候选者标记301可指一个标记(一系列位),它标识系统存储器105(图1)中的一个唯一地址,它是由处理器101(图1)最近请求的最后一个地址。与标记阵列条目203关联的使用位302可指这样一位,它指出自候选者标记301所标识的地址最后一次被处理器101请求以来储存在标记条目203中的标记是否已被访问过。就是说,使用位302可指这样一位,它指出自候选者标记301所标识的地址最后一次被处理器101请求以来由存储在标记条目203中的标记所标识的地址是否已被访问过。在一个实施例中,与标记条目203关联的使用位302可存储一个逻辑值“1”,如果自候选者标记301标识的地址最后一次被处理器101请求以来由标记条目203中存储的标记所标识的地址被访问过的话。与标记条目203关联的使用位302可存储一个值“0”,如果自候选者标记301标识的地址最后一次被处理器101请求以来由标记条目203中存储的标记所标识的地址未被访问过的话。可类似地构成与候选者标记301关联的使用位302,其不同点在于,与候选者标记301关联的使用位302可指这样一位,它指出自候选者标记301标识的地址最后一次被处理器101请求以来由候选者标记301中存储的标记所标识的地址是否已被访问过。
如下文将详细解释的那样,候选标记301和使用位302可结合起来使用,以确定处理器101何时第二次请求一个未存储在高速缓存200中的地址。如果处理器101第二次请求一个未存储在高速缓存200中的地址,则有显著概率表明该地址将再次被访问,所以与该地址关联的数据应被放在高速缓存200(图2)中。如上所述,候选者标记301可用于存储一个标记,该标记标识一个由处理器101请求过的地址,该地址的数据不位于高速缓存200中。在第一次高速缓存未命中时,使用位302可能等于“0”。如果处理器101第二次请求由存储在候选者标记301中的标记所标识的地址,而使用位302等于值“0”,则处理器101可能挤出存储在数据阵列202(图2)中的数据并在数据阵列202中插入由候选者标记301标识的数据。这样,将不会从高速缓存200中挤出数据,除非有显著概率表明放在高速缓存200中的数据将很可能再次被访问。因此,数据不会被处理器101以不会再用的数据(如一个中断例程中的数据)挤掉。下面结合图4描述利用候选者标记301和使用位302来改善直接映射高速缓存200性能的方法。
图4——改善直接映射高速缓存性能的方法图4是根据本发明一个实施例改善直接映射高速缓存性能的一种方法的流程图,在该方法中,在直接映射高速缓存200中本来会被不再用的数据(如来自中断例程的数据)所替换的数据将不被挤出。
参考图4,结合图1至图3,在步骤401中,以有效数据加载直接映射高速缓存。就是说,一旦初始化,高速缓存200中的数据阵列202可被有效数据加载,由于初始请求为高速缓存未命中,从而使数据从存储器105中检索出来并加载到高速缓存200中。在一个实施例中,一旦以有效数据加载高速缓存200,与数据阵列202中的每个条目204关联的每个使用位302可被预置成逻辑值“1”。
在步骤402,高速缓存200接收来自处理器101的对数据地址的请求,并把那个地址映射到高速缓存200的一个特定标记。在步骤403,高速缓存200确定被请求的地址的数据是否位于高速缓存200中。就是说,在步骤403,高速缓存200确定是否存在一个高速缓存命中。
如果存在一个高速缓存命中,则在步骤404,高速缓存200将使用位302设置为逻辑值“1”,这里的使用位302与标记条目203关联,标记条目203包含的标记标识由处理器101请求的地址。
然而,如果处理器101请求的数据不是位于高速缓存200中(高速缓存未命中),则在步骤405,高速缓存200确定所请求的地址是否与候选者标记301的内容相同。就是说,高速缓存200确定处理器101所请求的地址是否由候选者标记301中存储的标记来标识。
如果所请求的地址与候选者标记301的内容不同,则在步骤406,候选者标记301的内容由标识处理器101所请求地址的那个标记取代。这样,候选者标记301存储的标记内容标识由处理器101请求的其数据不在高速缓存200中的最后地址。在步骤407中,高速缓存200把与候选者标记301关联的使用位302重新设置为值“0”。
如果所请求的地址与候选者标记301的内容相同,则在步骤408,高速缓存200确定与候选者标记301关联的使用位302是否等于逻辑值“1”。如果与候选者标记301关联的使用位等于逻辑值“1”,则在步骤409,高速缓存200把与候选者标记301关联的使用位302重新设置为值“0”。如上所述,当使用位302含有逻辑值“1”时,则表明自最后一次与候选者标记301关联的行被访问以来已发生了高速缓存命中。由于自最后一次与候选者标记301关联的行被访问以来已发生了高速缓存命中,故高速缓存200可把使用位302重设为值“0”,以确定处理器101是否将第二次请求由候选者标记301中存储的标记所标识的地址。
然而,如果与候选者标记301关联的使用位302等于值“0”。则在步骤410,在高速缓存200中的当前数据元素被与候选者标记301的内容所标识的地址相关联的数据所替代。由于直接映射高速缓存200在其每个同余类中有单一条目,当前和唯一索引的数据被这一同余类关联的候选者标记条目301中存储的标记所标识的数据替换。当使用位302有值“0”而且由处理器101请求的地址与候选者标记301中标识的地址相同时,则表明处理器101已经第二次请求这一特定高速缓存行,而它的数据没有存储在高速缓存200中。当处理器101第二次请求一个高速缓存行而其数据没有存储在高速缓存200中时,则处理器101可以挤出数据阵列202(图2)中存储的数据并插入由数据阵列202中存储的候选者标记标识的数据。这样,数据将不被挤出高速缓存200,除非有显著概率表明放在高速缓存200中的数据将很可能再次被访问。因此,数据不会被处理器101以不会再次使用的数据(如一个中断例程中的数据)挤掉。
在步骤411,在条目203中的与当前数据元素204关联的标记被存储在候选者标记301中,其数据已在步骤410中被替换。
在步骤412,高速缓存200将候选者标记301所关联的使用位302重置为值“0”。
应该指出,方法400可包括其他的和/或附加的步骤,为清楚起见,图中未予描绘。还应指出,方法400的执行顺序可与呈现出来的不同,而且在图4的讨论中呈现的顺序只是示例性的。还应指出,方法400中的某些步骤可以以基本上同时的方法执行。
下面结合图6进一步描述改善n路组关联高速缓存(示于图5)性能的方法,在该方法中,在n路组关联高速缓存中本来会被不再用的数据(如来自一个中断例程的数据)所替换的数据将不被挤出。
图5——n路组关联高速缓存图5显示n路组关联高速缓存500的本发明一个实施例,它可代表L1高速缓存102或L2高速缓存103或位于一个计算机系统中的可使用LRU算法的任何其他高速缓存,如盘高速缓存。
参考图5,n路组关联高速缓存500可包含n个数据阵列或“路(way)”501A-B。数据阵列501A可包含条目502A-E,数据阵列501B可包含条目502F-J。数据阵列501A-B可集体地或单个地分别称作一些数据阵列501或一个数据阵列501。条目502A-J可集体地或单个地分别称作一些条目502或条目502。n路组关联高速缓存500可进一步包含n个标记阵列503A-B。标记阵列503A-B可集体地或单个地分别称作一些标记阵列503或一个标记阵列503。标记阵列503A可包含条目504A-E,标记阵列503B可包含条目504F-J。条目504A-J可集体地或单个地分别称作一些条目504或一个条目504。n路组关联高速缓存500可进一步包含一个带有条目506A-E的LRU机制505。条目506A-E可集体地或单个地分别称作一些条目506或一个条目506。n路组关联高速缓存500可进一步包含一个带有条目508A-E的使用位阵列507。条目508A-E可集体地或单个地分别称作一些条目508或一个条目508。n路组关联高速缓存500可进一步包含一个带有条目510A-E的候选者标记阵列509。条目510A-E可集体地或单个地分别称作一些条目510或一个条目510。应该指出,图5是一个n路组关联高速缓存的示例性说明。还应指出,数据阵列501、标记阵列502、LRU机制505、使用位阵列507和候选者标记阵列509每个可包含相同数量的条目,而该数量可与图中所示数量不同。
现在参考图5,可与标记阵列201(图2)类似的配置标记阵列503,只是标记阵列503包含对应于n个数据阵列501的n个阵列。标记阵列503中的每个条目504可标识数据阵列501中的一个特定数据元素(与条目504中存储的那个标记所标识的地址相关联的数据的副本)。例如,标记阵列503A的条目504A可包含一个标记,用于标识数据阵列501A的条目502A中存储的数据元素。类似地,标记阵列503B的条目504F可包含一个标记,用于标识数据阵列501B的条目502F中存储的数据元素。
一个“组(set)”可指跨标记阵列503的一个特定条目行。例如,组511可包括条目504A和504F组成的行。每个组还可被分类为实现LRU算法的一个“堆栈”或“同余类”。例如,组511可包括一个堆栈,该堆栈的元素存储在条目504A和504F中。LRU机制505可指出一个堆栈中的哪个元素是最近最少使用的项目。例如,在条目506A中的数据可指出堆栈511的存储在条目504A中的标记或存储在条目504F中的标记是否为最近最少使用的标记。当堆栈中的一个条目被访问时,在LRU机制505中的同一个同余类中的相应条目506被更新,以指出未被访问的条目504。
当处理器101(图1)请求一个地址,它被映射到一个特定的同余类。例如,如果处理器101请求一个地址,该地址被映射到由标记阵列条目504A和504B构成的一个同余类,则这两个标记将与该地址进行比较,以确定是否其中有一个与其匹配,即是否有一个高速缓存命中。例如,如果在所请求的地址和条目504A中的标记之间有一个匹配,则从条目502A中提取数据。
参考图5,每个堆栈或组可与使用位阵列507中的一个条目508关联。因此,数据阵列501中的每个条目502可与使用位阵列507中的一个条目508关联。与上述使用位302(图3)类似地配置使用位阵列507中的每个条目508。类似地,每个堆栈或组可与候选者标记阵列509中的一个条目510关联。因此,数据阵列501中的每个条目502可与候选者标记阵列509中的一个条目510关联。与上述候选者标记301(图3)类似地配置候选者标记阵列509中的每个条目510。下面结合图6描述使用本发明原理改善n路组关联高速缓存性能的方法。
图6——改善n路组关联高速缓存性能的方法图6是用于改善n路组关联高速缓存500性能的方法600的本发明一个实施例的流程图,在该方法中,在n路组关联高速缓存中本来会被不再用的数据(如来自一个中断例程的数据)所替换的数据将不被挤出。
参考图6,结合图1至图3以及图5,在步骤601,以有效数据加载n路组关联高速缓存。就是说,每个数据阵列501的每个条目502被以有效数据加载。在一个实施例中。与每个数据阵列501中的每个条目502关联的每个使用位508可在以有效数据加载高速缓存500后立即预置成逻辑值“1”。
在步骤602,高速缓存500接收来自处理器101的对数据地址的请求。在步骤603,高速缓存500确定所请求的地址的数据是否位于高速缓存500中。就是说,在步骤603,高速缓存500确定是否存在一个高速缓存命中。
如果存在一个高速缓存命中,则在步骤604,高速缓存500将使用位508设置为逻辑值“1”,使用位508与条目502关联,条目502含有由处理器101请求的地址的数据。在步骤605,代表含有处理器101所请求数据地址的堆栈或行的同余类的那个堆栈或行被更新。在一个实施例中,与用于处理器101所请求数据的堆栈或行(同余类)关联的LRU元素被更新,以反映该同余类的哪个元素是最近最少使用的。例如,参考图5,如果处理器101曾请求存储在条目502F中的数据,则那个同余类的LRU会被更新,以指出条目502A中包含的数据含有最近最少使用元素。
然而,如果处理器101所请求的数据不位于高速缓存500中(高速缓存未命中),则在步骤606,高速缓存500确定所请求的地址是否与用于有效堆栈或行的候选者标记510的内容相同。就是说,高速缓存500确定由处理器101访问的地址是否由该有效堆栈所关联的候选者标记510中存储的标记来标识。
如果所请求的地址与该有效堆栈所关联的候选者标记510的内容不同,则在步骤607,与该有效堆栈关联的候选者标记510的内容被标识处理器101所请求地址的标记所取代。这样,与有效堆栈关联的候选者标记510存储的标记标识由处理器101请求的其数据没被存储在高速缓存500中的最后一个地址。在步骤608,高速缓存500将使用位508重新设置为值“0”,该使用位508与有效堆栈中的最近最少使用条目502(位于该有效堆栈底部)关联。只有与最近最少使用条目502关联的使用位508被重新设置为值“0”,因为假定在有效堆栈中位于条目502中最近最少使用条目502(即条目502F)之上的数据(即条目502A)曾在位于最近最少使用条目502的数据之前被访问过。
如果所请求的地址与有效堆栈所关联的候选者标记510的内容相同,则在步骤609,高速缓存500确定与该有效堆栈中的最近最少使用条目502关联的使用位508是否等于逻辑值“1”。如果使用位508等于逻辑值“1”,则在步骤610,高速缓存500将有效堆栈中最近最少使用条目502(位于有效堆栈底部)所关联的使用位508重置为值“0”。如上所述,当使用位508含有逻辑值“1”时,则表明自这一同余类所关联的候选者标记510最后一次被检验以来在这一同余类中已发生了一个高速缓存命中。由于自候选者标记510最后一次被检验以来已发生了一次高速缓存命中,高速缓存500可将使用位508重设为值“0”,以确定处理器101是否将第二次请求由候选者标记510中存储的标记所标识的地址。
然而,如果与有效堆栈中的最近最少使用条目502关联的使用位508等于逻辑值“0”,则在步骤611,高速缓存500把有效堆栈所关联的候选者标记510中存储的标记加载到与该有效堆栈关联的条目504中。
在步骤612,高速缓存500把先前的有效标记(在与有效堆栈关联的条目504中存储的标记)加载到与有效堆栈关联的候选者标记510中。
在步骤613,在高速缓存500中的当前数据元素被与有效堆栈所关联的候选者标记510的先前内容标识的地址关联的数据取代,候选者标记510现在成为与有效堆栈关联的新条目503。在一个实施例中,条目502中的数据(它是同余类的最近最少使用元素)被与候选者标记510的内容标识的地址关联的数据取代,该数据现在被认为是该同余类的最近最多使用元素。当使用位508有值“0”而且由处理器101请求的地址与候选者标记510中标识的地址相同时,则表明处理器101已经第二次请求其数据没有存储在高速缓存500中的这个特定地址。当处理器101第二次请求其数据没有存储在高速缓存500中的一个地址时,处理器101可以挤出存储在数据阵列501中的有效堆栈中的数据并将该有效堆栈所关联的候选者标记510标识的数据插入数据阵列501中的有效堆栈中的最近最少使用条目502中。这样,将不会从高速缓存500中挤出数据,除非有显著概率表明放在高速缓存500中的数据将很可能再次被访问。因此,数据不会被处理器101以不会再用的数据(如一个中断例程中的数据)挤掉。
在步骤614,高速缓存500将与有效堆栈中的最近最少使用条目502(位于有效堆栈底部)关联的使用位508重置为值“0”。只有与最近最少使用条目502关联的使用位508被重置为值“0”,因为假定位于有效堆栈中的最近最少使用条目502之前的那些条目502中的数据曾在位于最近最少使用条目502中的数据之前被访问过。
应该指出,方法600可包括其他的和/或附加的步骤,为清楚起见,图中未予描绘。还应指出,方法600的执行顺序可与呈现出来的不同,而且在图6的讨论中呈现的顺序只是示例性的。还应指出,方法600中的某些步骤可以以基本上同时的方式执行。
本发明的原理以不挤出本来会被不再用的数据(如来自一个中断例程的数据)替换的数据来改善一个高速缓存(如直接映射高速缓存,n路组关联高速缓存)的性能,除此之外,本发明的原理可用于检测高速缓存抖动。
高速缓存抖动可指这样的场景,其时处理器101执行一个相对较大的指令循环,其中该指令循环含有交替的指令,使得候选者标记301、510被交替的标记替换。例如,在时钟周期#1,标识地址#1的标记#1被插入候选者标记301、510中。下一次候选者标记301、510被访问;标识地址#2的标记#2被插入候选者标记301、510中。在此更新之后,下一次候选者标记301、510被访问,标识地址#1的标记#1被插入候选者标记301、510中,如此继续。因此,高速缓存抖动可使候选者标记301、510持续地被更新,因此永远不会指出一个在高速缓存中挤掉数据和插入数据的时刻。通过包括一个“候选者计数器”,至少可部分地解决高速缓存抖动问题,如下面结合图7讨论的那样。
图7——候选者计数器图7是与候选者301、510关联的候选者计数器701的本发明一个实施例。在一个实施例中,高速缓存200(图2)中的每个候选者标记301或高速缓存500(图5)中的每个候选者标记510可与一个候选者计数器701关联。计数器701可被配置成对候选者标记301、510中的内容被连续替换的次数进行计数。下文中结合图8描述一种方法,该方法通过不挤出本来会被不再用的数据(如来自一个中断例程的数据)替换的数据来改善n路组关联高速缓存500的性能而且还检测高速缓存抖动,应该指出,图8中描述的本发明的原理可应用于直接映射高速缓存200,但为简练,这里不详细讨论。
图8——改善n路组关联高速缓存性能的同时检测高速缓存抖动的方法图8是方法800的本发明一个实施例的流程图,方法800通过不挤出本来会被不再用的数据(如来自一个中断例程的数据)替换的数据来改善n路组关联高速缓存的性能而且还检测高速缓存抖动。
现在参考图8,并结合图1至3及图5,在步骤801,以有效数据加载n路组关联高速缓存500,就是说,一旦初始化,高速缓存500中的数据阵列501可被有效数据加载,由于初始请求为高速缓存未命中,于是使数据从存储器105中检索出来并加载到高速缓存500中。在一个实施例中,在以有效数据加载高速缓存500后,与每个数据阵列501中的每个条目502关联的每个使用位508可被预置成逻辑值“1”。
在步骤802,高速缓存500接收来自处理器101的对数据地址的请求。在步骤803,高速缓存500确定被请求的地址的数据是否位于高速缓存500中。就是说,在步骤803,高速缓存500确定是否存在一个高速缓存命中。
如果存在一个高速缓存命中,则在步骤804,高速缓存500将使用位508设置为逻辑值“1”,这里使用位508与条目502关联,而条目502包含由处理器101请求的地址的数据。在步骤805,代表含有由处理器101请求的数据地址的堆栈或行的同余类的堆栈或行被更新。在一个实施例中,与处理器101请求的数据所用堆栈或行(同余类)关联的LRU元素被更新,以反映该同余类的哪个元素是最近最少使用的。例如,参考图5,如果处理器101请求的数据存储在条目502F中,则那个同余类的LRU会被更新,以指出条目502A中包含的数据含有最近最少使用元素。在步骤806,高速缓存500将候选者计数器701重置为零。
然而,如果处理器101请求的数据不位于高速缓存500中(一个高速缓存未命中),则在步骤807,高速缓存500确定所请求的地址是否与该有效堆栈或行的候选者标记510的内容相同。就是说,高速缓存500确定处理器101请求的地址是否由有效堆栈所关联的候选者标记510中存储的标记来标识。
如果所请求的地址不同于与有效堆栈关联的候选者标记510的内容,则在步骤808,高速缓存500确定候选者计数器701之值是否等于一个最大值。如果候选者计数器701之值不等于该最大值,则在步骤809,与有效堆栈关联的候选者标记510的内容被标识处理器101所请求地址的那个标记所取代。这样,候选者标记510存储的标记标识由处理器101请求的没有存储在高速缓存500中的最后一个地址。在步骤810,高速缓存500更新候选者计数器701。例如,高速缓存500可使候选者计数器701递增1,指出候选者标记510中存储的标记被更新了。在步骤811,高速缓存500将使用位508重置为值“0”,该使用位与有效堆栈中的最近最少使用条目502(位于有效堆栈底部)关联。只有与最近最少使用条目502关联的使用位508被重置为值“0”,因为假定在有效堆栈中位于那些条目502中的那些在最近最少使用条目502之前的数据是在位于最近最少使用条目502中的数据之前被访问。
然而,如果候选者计数器701之值等于最大值,则在步骤812,高速缓存500将有效堆栈所关联的候选者标记510中存储的标记加载到与该有效堆栈关联的条目504中。
在步骤813,高速缓存500将先前的有效标记(在与有效堆栈关联的条目504中存储的标记)加载到与有效堆栈关联的候选者标记510中。
在步骤814,在高速缓存500中的当前数据元素被候选者标记510的先前内容标识的地址所关联的数据取代,该候选者标记现在变为与有效堆栈关联的新条目503。在一个实施例中,位于有效堆栈的最近最少使用位置中的条目502中的数据被与有效堆栈所关联的候选者标记510的内容所标识的地址关联的数据所取代,它现在被认为是相关同余类的最近最多使用元素。当使用位508有值“0”而且由处理器101请求的地址与有效堆栈所关联的候选者标记510中标识的地址相同时,则表明处理器101已第二次请求这一特定地址,它的数据没有存储在高速缓存500中。当处理器101第二次请求一个其数据没有存储在高速缓存500中的地址时,处理器101则可挤出数据阵列501中的有效堆栈中存储的数据并将该有效堆栈关联的候选者标记510所标识的数据插入数据阵列501中的有效堆栈中的最近最少使用条目502。这样,数据将不会被挤出高速缓存500,除非有显著概率表明放在高速缓存500中的数据很可能被再次访问。因此,数据可不被处理器101以不被再用的数据(如中断例程中的数据)挤出。
在步骤815,高速缓存500将使用位508重置为值“0”,该使用位508与有效堆栈中的最近最少使用条目502(位于有效堆栈的底部)关联。只有与最近最少使用条目502关联的使用位508被重置为值“0”,因为假定在有效堆栈中位于那些条目502中的那些处在最近最少使用条目502之前的数据是在最近最少使用条目502中的数据之前被访问。
在步骤816,高速缓存500将候选者计数器701重置为零,因此,与有效堆栈关联的候选者标记510的内容被替换。
然而,参考步骤807,如果所请求的地址与有效堆栈所关联的候选标记510的内容相同,则在步骤817,高速缓存500确定与有效堆栈中的最近最少使用条目502关联的使用位508是否等于逻辑值“1”。如果使用位508等于逻辑值“1”,则在步骤818,高速缓存500将与有效堆栈中的最近最少使用条目502(位于有效堆栈的底部)关联的使用位508重置为值“0”。如上所述,当使用位508含有逻辑值“1”时,表明自有效堆栈所关联的候选者标记510最后一次被检验以来已发生一次高速缓存命中。由于自有效堆栈所关联的候选者标记510最后一次被检验以来已发生一次高速缓存命中,高速缓存500可将有效堆栈所关联的使用位508重置为值“0”以确定处理器101是否将第二次请求由候选者标记510中存储的标记所标识的地址。在步骤819,高速缓存500将候选者计数器701重置为零,因为与有效堆栈关联的候选者标记510的内容未被替换。
然而,如果与有效堆栈中的最近最少使用条目502关联的使用位508等于逻辑值“0”,则在步骤812,高速缓存500将有效堆栈所关联的候选者标记510中存储的标记加载到与有效堆栈关联的条目504中。
在步骤813,高速缓存500将先前的有效标记(存储在与有效堆栈关联的条目504中的标记)加载到与有效堆栈关联的候选者标记510中。
在步骤814,高速缓存500中的当前数据元素由有效堆栈所关联的候选者标记510的内容所标识的地址所关联的内容取代。在一个实施例中,位于该有效堆栈的最近最少使用位置中的条目502中的数据被候选者标记510的内容所标识的地址所关联的数据取代。当使用位508有值“0”而且处理器101所请求的地址是候选者标记510中标识的同一地址时,表明处理器101已第二次请求这一个其数据不存储在高速缓存500中的特定地址。当处理器101第二次请求一个其数据没有存储在高速缓存506中的地址时,处理器101可挤出数据阵列501中的有效堆栈中存储的数据,并将候选者标记516所标识的数据插入数据阵列501中的有效堆栈中的最近最少使用条目502。这样,数据将不会被挤出高速缓存500,除非有显著概率表明放在高速缓存500中的数据很可能被再次访问。因此,数据可不被处理器101以不被再用的数据(如中断例程中的数据)挤出。
在步骤815,高速缓存500将使用位508重置为值“0”,该使用位508与有效堆栈中的最近最少使用条目502(位于有效堆栈的底部)关联。只有与最近最少使用条目502关联的使用位508被重置为值“0”,因为假定在有效堆栈中位于那些条目502中的那些处在最近最少使用条目502之前的数据是在最近最少使用条目502中的数据之前被访问。
在步骤816,高速缓存500将候选者计数器701重置为零,因为,与有效堆栈关联的候选者标记510的内容被替换。
应该指出,方法800可包括其他和/或附加的步骤,为清楚起见,图中未予描绘。还应指出,方法806的执行顺序可与呈现出来的不同,而且在图8的讨论中呈现的顺序只是示例性的。还应指出,方法800中的某些步骤可以以基本上同时的方法执行。
尽管已经结合若干实施例描述了系统和方法,但并非要将其限定于这里提出的具体形式,相反,是要覆盖能被合理地包括在如所附权利要求定义的本发明精神和范围内的那些变体、修改和等效物。应该指出,各标题只是为了组织本说明书,不意味着要限定本说明书或权利要求的范围。
权利要求
1.一种改善高速缓存性能的方法,包含如下步骤接收对一个数据地址的请求;确定所述被请求的数据是否位于所述高速缓存中;如果所述被请求的数据不位于所述高速缓存中,则确定所述被请求的地址是否与第一标记的内容关联;以及如果所述被请求的地址是与所述第一标记的所述内容关联,而且如果与所述第一标记关联的一位处于第一状态,则使用所述第一标记的所述内容取代所述高速缓存中的一个数据元素,其中如果所述第一标记的所述内容先前被请求过而且不位于所述高速缓存中,则与所述第一标记关联的所述位处在所述第一状态。
2.如权利要求1中叙述的方法,进一步包含如下步骤如果所述被请求的数据位于所述高速缓存中,则将与所述第一标记关联的所述位设置为第二状态。
3.如权利要求1中叙述的方法,进一步包含如下步骤如果所述被请求的地址不与所述第一标记的所述内容关联,则以第二标记的内容取代所述第一标记的所述内容。
4.如权利要求3中叙述的方法,进一步包含如下步骤如果所述被请求的地址不与所述第一标记的所述内容关联,则将与所述第一标记关联的所述位重新设置为所述第一状态。
5.如权利要求1中叙述的方法,进一步包含如下步骤如果所述被请求的地址与所述第一标记的所述内容关联,而且如果与所述第一标记关联的所述位处在第二状态,则将与所述第一标记关联的所述位重新设置为所述第一状态。
6.如权利要求1中叙述的方法,进一步包含如下步骤如果所述被请求的地址与所述第一标记的所述内容关联,而且与所述第一标记关联的所述位处在第二状态,则将第二标记的内容加载到所述第一标记的所述内容中。
7.如权利要求6中叙述的方法,进一步包含如下步骤如果所述被请求的地址与所述第一标记的所述内容关联,则将与所述第一标记关联的所述位重新设置为所述第一状态。
8.如权利要求1中叙述的方法,进一步包含如下步骤如果所述被请求的地址与所述第一标记的所述内容关联,而且与所述第一标记关联的所述位处在第二状态,则将所述第一标记的所述内容加载到第二标记的内容中。
9.如权利要求1中叙述的方法,进一步包含如下步骤如果所述被请求的地址不与所述第一标记的所述内容关联,则确定一个计数器是否等于一个最大值,其中所述计数器跟踪所述第一标记的所述内容在未被重新设置的情况下被取代的次数。
10.如权利要求9中叙述的方法,进一步包含如下步骤如果所述计数器不等于所述最大值则更新所述计数器。
11.一个系统,包含一个处理器,其中所述处理器有一个与它关联的高速缓冲存储器;一个系统存储器,用于存储所述处理器的数据;一个总线系统,使所述处理器与所述系统存储器器耦合;其中所述高速缓冲存储器包含第一标记,用于存储一个指示,表明先前由所述处理器请求的一个地址没有存储在所述高速缓冲存储器中;用于从所述处理器接收一个对数据地址的请求的逻辑;用于确定所述被请求的数据是否位于所述高速缓冲存储器中的逻辑;用于确定如果所述被请求的数据没有位于所述高速缓存中那么所述被请求的地址是否与所述第一标记的内容相关联的逻辑;以及如果所被请求的地址是与所述第一标记的所述内容相关联而且如果与所述第一标记关联的一位处于第一状态则使用所述第一标记的所述内容取代所述高速缓存中的一个数据元素的逻辑,其中如果所述第一标记的所述内容先前被请求过而且不位于所述高速缓存中,则与所述第一标记关联的所述位处在所述第一状态。
12.如权利要求11中叙述的系统,其中所述高速缓冲存储器进一步包含如果所述被请求的数据位于所述高速缓存中则将与所述第一标记关联的所述位设置为第二状态的逻辑。
13.如权利要求11中叙述的系统,其中所述高速缓冲存储器进一步包含如果所述被请求的地址不与所述第一标记的所述内容关联则以第二标记的内容取代所述第一标记内容的逻辑,其中所述第二标记与所述高速缓冲存储器中的一个数据元素相关联。
14.如权利要求13中叙述的系统,其中所述高速缓冲存储器进一步包含如果所述被请求的地址不与所述第一标记的所述内容关联则将与所述第一标记关联的所述位重新设置为所述第一状态的逻辑。
15.如权利要求11中叙述的系统,其中所述高速缓冲存储器进一步包含如果所述被请求的地址与所述第一标记的所述内容关联而且如果与所述第一标记关联的所述位处在第二状态则将与所述第一标记关联的所述位重新设置为所述第一状态的逻辑。
16.如权利要求11中叙述的系统,其中所述高速缓冲存储器进一步包含如果所述被请求的地址与所述第一标记的所述内容关联而且与所述第一标记关联的所述位处在第二状态则将第二标记的内容加载到所述第一标记的所述内容中的逻辑,其中所述第二标记与所述高速缓冲存储器中的一个数据元素关联。
17.如权利要求16中叙述的系统,其中所述高速缓冲存储器进一步包含如果所述被请求的地址与所述第一标记的所述内容关联则将与所述第一标记关联的所述位重新设置为所述第一状态的逻辑。
18.如权利要求11中叙述的系统,其中所述高速缓冲存储器进一步包含如果所述被请求的地址与所述第一标记的所述内容关联,而且与所述第一标记关联的所述位处在第二状态,则将所述第一标记的所述内容加载到第二标记的内容中的逻辑,其中所述第二标记与所述高速缓冲存储器中的一个数据元素相关联。
19.如权利要求11中叙述的系统,其中所述高速缓冲存储器进一步包含如果所述被请求的地址不与所述第一标记的所述内容关联则确定一个计数器是否等于一个最大值的逻辑,其中所述计数器跟踪所述第一标记的所述内容在未被重新设置的情况下被取代的次数。
20.如权利要求19中叙述的系统,其中所述高速缓冲存储器进一步包含如果所述计数器不等于所述最大值则更新所述计数器的逻辑。
全文摘要
改善高速缓存性能的方法和系统。该高速缓存可包括一个标记条目,它标识由处理器先前访问过的地址,而该地址的数据当时没有位于该高速缓存中。如果该处理器第二次请求那个地址,则该地址将再次被访问的概率是显著的,当处理器第二次请求由该标记条目标识的地址时,通过插入位于那个地址的数据并挤出位于最近最少使用条目的数据来更新该高速缓存。这样,数据将不会被挤出高速缓存,除非有显著概率表明放在高速缓存中的数据将很可能再次被访问。因此,在高速缓存中的数据不会被处理器挤出并以不会再用的数据(如在中断例程中的数据)取代。
文档编号G06F12/08GK1607510SQ20041008401
公开日2005年4月20日 申请日期2004年10月13日 优先权日2003年10月14日
发明者G·T·戴维斯, T·B·贞杜索 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1