在查找高速缓存中保持对象的系统和方法

文档序号:6655409阅读:191来源:国知局
专利名称:在查找高速缓存中保持对象的系统和方法
技术领域
本发明通常涉及改进的数据处理系统,并且尤其涉及用于在查找高速缓存中保持对象的系统和方法。
背景技术
集合关联的高速缓存(set associative cache)允许将来自任何地址的数据存储在高速缓存单元中。将高速缓存地址用作标记。由高速缓存保持的全部标记必须与所请求的地址进行比较。如果标记与所请求的地址相匹配,则存取匹配标记的相关数据。集合关联的高速缓存需要关联存储器来保持这些标记。集合关联的高速缓存基于唯一标识符将要缓存的对象分离为集合,而且每个对象将仅仅属于一个集合。由于将对象添加到高速缓存中,所以每个集合仅仅能够增大到有限的大小。一旦该集合已经达到它的满容量,则每当添加新对象时就必须丢弃现有的对象。通常,所丢弃的对象将会是该集合中最近最少使用(LRU)的对象。
名称查找高速缓存源自于通常的集合关联的高速缓存体系结构。因为名称查找高速缓存通常仅仅包含系统中所有现有对象的子集,所以当把对象添加到该高速缓存中时,每个集合仅仅可以增大到有限的大小。一旦该集合已经达到它的满容量,则每当添加新的对象时,就必须丢弃现有的对象(其通常是最近最少使用的对象)。通常,该集合是从头部开始以线性方式进行搜索的链表。当找到对象或者搜索到尾部对象时,搜索结束。如果找到了对象,则将它从它在列表中的当前位置移动到该列表的头部以实现LRU算法。以这种方式,最频繁存取的对象将趋向于移向列表的头部,而最近最少使用的对象将移向尾部,并且最终从该列表中被丢弃。
上述名称查找高速缓存和LRU实现在现代大型对称多处理器计算机中呈现出严重的性能问题。尤其是,LRU算法通过将对象移动到高速缓存列表的头部来实现,因此,对于新对象的每次高速缓存命中或者插入来说,都必须修改集合的列表锚(anchor)以指向新的列表头对象。由于现代存储器设计的各种特征,被频繁修改的全局数据在通过LRU算法组织起来的名称查找高速缓存中呈现出了严重的性能抑制。
设计出一种解决现有技术中的一些缺点、用于在查找高速缓存中保持对象的方法和系统是所期望的。

发明内容
因此,本发明提供了一种用于在查找高速缓存中保持对象的方法、计算机程序产品、和数据处理系统。主列表中包含有第一多个对象。主列表是第一多个对象的无序列表。次列表中包含有第二多个对象。次列表是第二多个对象的有序列表。定期地,将第一多个对象中的至少一个对象降级到次列表中,并且将第二多个对象中的至少一个对象升级到主列表中。
与传统的查找高速缓存实现相比,所要求保护的、将查找高速缓存组织成主次列表的处理可能导致对被高速缓存的对象列表的较不频繁的更新。


现在将参考附图描述仅仅作为示例的、本发明的优选实施例,在附图中图1是其中可以实现本发明的优选实施例的数据处理系统的图示;图2是其中可以实现本发明的优选实施例的数据处理系统的框图;
图3A是诸如目录名查找高速缓存或者文件高速缓存之类的、如传统上那样包含链表数据结构的高速缓存的示意图;图3B是如传统上那样、在调用或者请求对象304之后由LRU算法组织起来的链表300的示意图;图4A是根据本发明的优选实施例实现的、包含主列表和次列表的高速缓存系统;图4B是图4A中的高速缓存系统的示意图,其示出了在次列表的高速缓存命中之后该高速缓存系统的重新组织;图4C是在所请求对象的全局检索之后、图4A和4B所示的高速缓存系统的示意图;图4D是根据本发明的优选实施例实现的、在定期的高速缓存更新之后图4A-4C中的高速缓存系统的示意图;以及图5是根据本发明的优选实施例实现的、由高速缓存系统执行的用于返回所请求对象的处理的流程图。
具体实施例方式
现在参考附图并且特别参考图1,根据本发明的优选实施例描述了其中可以实现本发明的数据处理系统的图示。所描述的计算机100包括系统单元102、视频显示终端104、键盘106、可包括软盘驱动器及其他类型的永久和可移动存储介质的存储设备108、以及鼠标110。个人计算机100可以包括另外的输入设备,诸如例如操纵杆、触垫、触摸屏、跟踪球、麦克风等。可以使用任何适当的计算机,诸如作为位于纽约阿芒克(Armonk)的国际商业机器公司的产品的IBMeServer计算机或者IntelliStation计算机,来实现计算机100。虽然所描述的表示示出了计算机,但是本发明的其它实施例可以用诸如网络计算机之类的其它类型数据处理系统实现。计算机100优选为还包括图形用户接口(GUI),其可以借助于在计算机100内操作的、驻留在计算机可读介质中的系统软件实现。
参见图2,其中依据本发明的优选实施例描述了诸如图1中的数据处理系统100之类的数据处理系统的框图。数据处理系统200可以是包括多个连接到系统总线206的处理器202和204在内的对称多处理器(SMP)系统。做为选择,也可以使用单处理器系统。存储器控制器/高速缓存208也连接到系统总线206,并且提供了到本地存储器209的接口。I/O总线桥接器210连接到系统总线206,并且提供了到I/O总线212的接口。如所描述的那样,存储器控制器/高速缓存208和I/O总线桥接器210可以集成在一起。
连接到I/O总线212的外围部件互连(PCI)总线桥接器214提供了到PCI本地总线216的接口。多个调制解调器可以连接到PCI本地总线216。典型的PCI总线实现将支持四个PCI扩展槽或者内插(add-in)连接器。可以通过经由内插连接器连接到PCI本地总线216的调制解调器218和网络适配器220提供到图1中的客户端108-112的通信链路。
附加的PCI总线桥接器222和224提供了用于附加PCI本地总线226和228的接口,通过它们可以支持附加的调制解调器或者网络适配器。用这样的方式,数据处理系统200允许连接到多个网络计算机。如所描述的那样,存储映像的图形适配器230和硬盘232也可以直接或者间接地连接到I/O总线212。
本领域的普通技术人员将会理解图2所描述的硬件可以发生改变。例如,除描述的硬件之外,或者作为对它们的替代,还可以使用诸如光盘驱动器等之类的其他外围设备。所描述的示例不意味着暗含对本发明的结构限制。
图2所述的数据处理系统可以是例如作为纽约Armonk的国际商业机器公司的产品的、运行高级交互执行体(AIX)操作系统或者LINUX操作系统的IBM eServer pSeries系统。
本发明提供了一种可以减少对高速缓存系统的更新频率的高速缓存系统。此处被称为主列表和次列表的两个具有固定大小的不同的高速缓存列表最初是空的。当将对象添加到高速缓存中时,将它们插入到次列表的头部。按照预定的间隔,通过将一些对象从次列表移动到主列表来更新该高速缓存列表。因为高速缓存列表具有固定大小,所以在高速缓存更新期间,有相等数目的对象从主列表移动到次列表。除高速缓存更新之外,不改变主列表的锚,因此主列表包含无序对象。由LRU算法将次列表保持为有序列表。
图3A是诸如目录名查找高速缓存或者文件高速缓存之类的、包含如传统上那样配置的链表数据结构的查找高速缓存的示意图。链表300包含多个由最近最少使用算法组织起来的对象302-305。对象302-305每个都具有相关联的链接306-309。查找高速缓存包含引用链表300的锚310或者句柄(handle)。例如,锚310可以是包含链表300的头部或者第一对象的地址的指针。链接306-308包含链表300中的下一对象的指针或者地址。尾部对象305包含链表300中的最后对象,而且相关联的链接309包含空指针,以指定对象305作为链表300中的最后对象。因此,链表300包含逻辑上有序的列表,其具有在该列表头部的对象302,并且对象303-305从链表300的第二到最后对象顺序排列。
LRU算法按照某一组织结构保持对象302-305,以便将最近请求的对象定位于链表300的头部,而将最近最少请求的对象保持为链表300的尾部。根据相关联对象的相应请求次序,在链表300中定位在链表300的头部和尾部之间的中间对象。因此,在图3A的示例中,对象302是最近请求的对象,并且被定位为链表300的头部。对象305是最近最少请求的对象,并且被定位为链表300的尾部。因此,从最近请求的对象到最近最少请求的对象在链表300中定位对象302-305。
图3B是如传统上那样、在调用或者请求对象304之后由LRU算法组织起来的链表300的示意图。LRU算法根据链表中的对象被请求的次序来修改链表300的组织结构。在说明性示例中,请求了对象304,而且LRU修改该链表,以正确地指示对象304当前是最近使用的对象。例如,LRU算法可以通过将对象304的地址写入到锚中,并因此通过将对象304定位为头部对象来配置该链表,从而把锚310修改为引用对象304。另外,修改与对象304相关联的链接308,以正确地引用先前的头部对象。在该说明性示例中,由LRU算法修改链接308,以指向对象302,其中该对象302在请求或对象304之前被定位为链表300的头部。另外,修改与对象303相关联的链接307,以指向尾部对象305。
当请求的对象不位于查找高速缓存中时,可以例如通过文件管理系统执行全局搜索。如果全局地定位了所请求的对象,则将该对象返回到提出请求的实体,并且将其插入为链表300的头部对象。因此,如果在链表300内没有剩余额外的容量用于对象,则丢弃尾部对象305。如上面参考图3B所述的那样,要求类似的对链表300的更新。
在本发明的优选实施例中,锚可以包含两个指针,或者作为两个锚的一种实现方式,其分别指向此处被称为是主列表和次列表的两个不同的高速缓存列表。每个列表具有固定的大小而且最初是空的。当将对象添加到高速缓存中时,将这些对象插入到次列表的头部。按照预定的间隔,通过将一些对象从次列表移动到主列表来更新这些高速缓存列表。因为高速缓存列表具有固定的大小,所以在高速缓存更新期间,有相等数目的对象从主列表移动到次列表。除高速缓存更新之外,不改变主列表的锚,因此主列表包含无序对象。次列表由LRU算法保持为有序列表。
优选为,基于对象在次列表中的次序来选择在高速缓存更新中从次列表移动到主列表的对象(一个或多个)。特别而言,从次列表的头部或者包括次列表头部的连续对象集合中选择被选择用于从次列表升级到主列表的一个或者多个最近使用的对象。可以使用各种参数或者判定标准中的任何一个来选择将要在高速缓存更新期间从主列表降级到次列表的对象或者对象集合。例如,命中计数器可以用来积累对在主列表和/或次列表内的对象的请求计数。按照预定的高速缓存更新间隔,可以选择具有低于阈值的命中计数的一个或者多个对象用于降级到次列表。
做为选择,可以选择预定数目的、具有最小命中计数的对象用于降级到次列表。在又一个实施例中,高速缓存系统可以估算主列表中的对象的全部命中计数,并且将它们与次列表中的对象的命中计数进行比较。可以选择主列表中的、命中计数小于次列表中的对象的命中计数的任何对象用于降级到次列表,而将次列表中的、命中计数超过主列表对象的命中计数的对象升级到主列表。可以适当地替换用于选择主列表中的对象以便降级到次列表的其它实现方式。
图4A是根据本发明优选实施例实现的高速缓存系统。该高速缓存系统包含主列表400和次列表410。主列表400包含一个或多个对象402-405,每个对象具有相应的链接406-409。锚401引用主列表400。例如,锚401可以被实现为包含到对象402-405之一的地址的指针。在该说明性示例中,锚401包含到对象402的指针。链接406-408引用列表400内相应的对象。与对象405相关联的链接409包含空值,以指示相关联的对象405是主列表400的尾部对象。主列表400中的对象不是按照逻辑次序保持的。也就是说,LRU算法或者其它排序算法不保持列表400内的对象402-405的次序。
另外,高速缓存系统包含次列表410,其包含对象412-415和相关联的链接416-419。次列表410是包含头部对象412、尾部对象415、以及位于它们之间的中间对象413和414的有序对象列表。锚411包含通过指向被定位为次列表410的头部的对象而指向次列表410的指针。在图4A的说明性示例中,将对象412定位为头部对象,并且将对象415定位为尾部对象,由此来配置次列表410。
根据本发明的优选实施例,LRU或者其它适当的算法保持根据它们相关联的使用率而顺序排序的对象412-415,以便使对象412-415在次列表410内的位置对应于这些对象被请求或者被使用的次序。具体而言,将次列表410的头部对象保持为最近使用的对象,而使每个剩余的对象按照它们相关联的使用率以递减次序排序。
如上所述,主列表400中的对象不是根据任何使用率次序而被保持在列表400内的。例如,假定对对象403进行了请求。本发明的高速缓存系统首先搜索主列表400,以确定所请求的对象是否被保持在主列表400中。如果所请求的对象存储在主列表400中,则将该所请求的对象返回到提出请求的实体、例如应用或者文件系统。由于从主列表400中检索到所请求的对象,所以不执行对主列表的更新。
为了说明的目的,假定发出了对对象414的请求。高速缓存系统首先搜索主列表400,并且确定所请求的对象没有存储在主列表400中。高速缓存系统然后继续搜索次列表410。在该说明性示例中,将对象414返回到提出请求的实体。另外,对次列表进行更新,以正确地包含对象的根据其使用率的递减次序。因此,如图4B中根据本发明的优选实施例实现的高速缓存系统的示意图所示,高速缓存系统将指向次列表410的头部对象的锚411修改为指向最近请求的对象414。另外,将与对象414相关联的链接418修改为指向先前的头部对象412,该对象现在被降级为次列表410中的第二高的、或者次最近使用的对象。同样地,将链接417修改为指向尾部对象415。因此,更新次列表410以按照对象相关联的使用率的递减次序来保持对象的顺序排序。在图4B的说明性示例中,对象414逻辑上被定位为头部对象,这表明对象414是次列表410内最近使用的对象。根据对象的使用率,以递减次序配置对象412、413、和415。
现在假定请求了一个既不位于主列表400中又不位于次列表410中的对象。高速缓存系统在搜索了主列表和次列表之后可能试图进行所请求对象的全局定位。例如,该高速缓存系统可以与文件管理系统或者其它试图检索所请求对象的适当应用进行接口。如果全局地获得了所请求的对象,则将该所请求对象返回到提出请求的实体。另外,通过将该全局检索的对象添加到次列表410中来更新该高速缓存系统。具体而言,将该全局检索的对象作为头部对象添加到次列表410中,并且从次列表410中丢弃该次列表410中先前的尾部对象。
图4C是根据本发明的优选实施例、在对所请求对象进行全局检索之后、如图4A和4B所示的高速缓存系统的示意图。在该说明性示例中,假定所请求的对象(其被说明性地指定为object_X)不位于主列表400和次列表410中,而且后续的全局搜索产生了该所请求对象的位置。将全局检索的对象返回到提出请求的实体,并且将其作为头部对象插入到次列表410中。在该说明性示例中,对象421是全局检索的对象,而且其被插入到次列表410中。将锚411修改为指向全局检索的对象421。另外,将与对象421相关联的链接422配置为指向先前的头部对象414,并且将链接417修改为空指针,以指示相关联的对象413是尾部对象。丢弃先前的尾部对象(图4B中的对象415),以在次列表410内提供足够的容量用于新插入的对象421。
图4D是根据本发明的优选实施例实现的、在定期的高速缓存更新之后图4A-4C中的高速缓存系统的示意图。优选为,按照预定的间隔执行对高速缓存系统的更新。该高速缓存更新被设计为在有序的次列表和无序的主列表之间交换对象。优选为,与次列表中的对象进行交换的主列表中的对象与从次列表升级的对象相比更不频繁地被使用。因此,主列表和/或次列表内的对象的命中计数或者其它适当的机制可以用来评估是否在主次列表之间交换对象。图4D是对高速缓存更新评估的说明,其中该评估产生了用于降级到次列表410的对象403和404的标识、以及用于从次列表410升级到主列表400的对象414和421的标识。在该说明性示例中,从主列表400移动到次列表410的对象403和404被定位在次列表410的较低端。其它实现方式可以将从主列表400降级的对象定位在次列表410的较高端,或者相反,可以基于可与次列表410的对象进行比较的使用率度量或者其它参数,在次列表410内定位从主列表400降级的对象。
图5是根据本发明的优选实施例实现的、由查找高速缓存执行来用于定位所请求对象的处理的流程图。优选为,将查找高速缓存处理例程实现为计算机可读指令集,该指令集例如从本地存储器209中读取,并且由诸如处理器202或者204之类的处理单元执行。初始化该例程(步骤502),并且等待接收对对象的请求(步骤504)。响应于对对象请求的接收,然后对主列表执行对所请求对象的搜索(步骤506)。进行评估,以确定所请求的对象是否位于主列表中(步骤508)。如果所请求的对象位于主列表中,则该例程将该对象返回到提出请求的实体(步骤510),并且随后进行评估以确定是否继续该例程(步骤512)。如果例程要继续,则处理返回到步骤504以等待接收下一个对象请求。如果确定要退出该例程,则高速缓存查例程继续以便退出(步骤530)。
再次返回到步骤508,如果所请求的对象不位于主列表中,则该例程继续搜索次列表,并且评估所请求的对象是否位于次列表中(步骤514)。如果所请求的对象位于次列表中,则高速缓存查找例程返回所请求的对象(步骤516),并且将该对象移动到次列表的头部(步骤518),然后例程继续到步骤512,以评估该高速缓存查找例程是否要继续。
如果在步骤514中确定对象不位于次列表中,则执行全局搜索,并且进行评估以确定所请求的对象是否被全局地定位(步骤520)。如果该对象被全局地定位,则将所请求的对象返回到提出请求的实体(步骤522)。然后丢弃该次列表的尾部对象(步骤524),并且将全局检索的对象作为新的头部对象添加到次列表中(步骤526)。高速缓存查找例程然后返回到步骤512,以评估是否要执行附加的处理。如果在步骤520中未全局地定位该对象,则可以向提出请求的实体返回错误消息,并且该例程继续到步骤512,以评估是否要执行附加的处理。
因此,提供了一种优化的查找高速缓存,其具有可以减少高速缓存更新频率的优化的LRU功能。具体而言,该查找高速缓存包括由无序对象构成的主列表和由有序对象构成的次列表。执行定期的更新,以便将对象从次列表升级到主列表,以及将对象从主列表降级到次列表。通过定期地将次列表中最频繁使用的对象移到主列表中,主列表将趋向于保持最频繁使用的对象。从主列表中检索对象不会导致修改或者改变,这是因为主列表是无序的。因此,与传统的查找高速缓存系统相比,该查找高速缓存可以经受较不频繁的更新。
重要的是要注意到虽然已经在完全发挥作用的数据处理系统的上下文环境中描述了本发明,但是本领域的普通技术人员将会理解,本发明的处理能够以指令的计算机可读介质的形式以及以各种形式分发,而且可以同样地应用本发明而与实际上用于执行分发的信号承载介质的具体类型无关。计算机可读介质的示例包括诸如软盘、硬盘驱动器、RAM、CD-ROM、DVD-ROM之类的可记录型介质,以及诸如数字和模拟通信链路、使用诸如例如射频和光波传输之类的传输形式的有线或无线通讯链路之类的传输型介质。计算机可读介质可以采用编码格式的形式,可以对该编码格式进行解码以用于特定数据处理系统中的实际使用。
已经为了说明和描述的目的给出了本发明的描述,并且其不是穷举的,也不打算以所公开的形式限制本发明。对于本领域的普通技术人员来说,许多修改和变化将会是显而易见的。选择和描述这些实施例是为了最好地说明本发明的原理、实际应用,并且允许本领域的其它普通技术人员理解本发明的具有各种修改以适合于所考虑的特定使用的各种实施例。
权利要求
1.一种在查找高速缓存中保持对象的方法,包含用第一多个对象填充主列表,其中主列表是第一多个对象的无序列表;用第二多个对象填充次列表,其中次列表是第二多个对象的有序列表;以及定期地将第一多个对象中的至少一个对象降级到次列表中;以及将第二多个对象中的至少一个对象升级到主列表中。
2.如权利要求1所述的方法,还包含响应于接收到对第一对象的请求,在主列表中搜索第一对象。
3.如权利要求2所述的方法,还包含响应于对第一对象没有被包括在主列表中的确定,在次列表中搜索第一对象。
4.如权利要求3所述的方法,还包含响应于对第一对象位于次列表中的确定,修改该次列表,以便将该第一对象定位为次列表的头部对象。
5.如权利要求3所述的方法,还包含响应于对第一对象不位于次列表中的确定,执行对第一对象的全局搜索;以及响应于通过全局搜索对第一对象的定位,修改该次列表,以便将该第一对象定位为次列表的头部对象。
6.如权利要求1所述的方法,其中,所述第二多个对象中的至少一个对象包含次列表的头部对象。
7.如权利要求1所述的方法,其中,第一多个对象中的至少一个对象被标识为比第二多个对象中的至少一个对象更不经常被使用。
8.一种计算机可读介质中的、用于管理查找高速缓存的计算机程序产品,该计算机程序产品包含用于执行权利要求1到7中任何一项中的步骤的程序代码。
9.一种数据处理系统,包括存储器,包含指令集以及查找高速缓存,该查找高速缓存包含具有第一多个无序对象的第一数据结构以及具有第二多个有序对象的第二数据结构;以及处理单元,响应于对所述指令集的执行,定期地将第一多个对象中的至少一个对象从主列表降级到次列表,以及将第二多个对象中的至少一个对象从次列表升级到主列表。
10.如权利要求9所述的数据处理系统,其中,第一数据结构和第二数据结构每个都包含相应的链表数据结构。
11.如权利要求9所述的数据处理系统,其中,处理单元是多个处理单元之一,其中所述多个处理单元中的每一个都能访问该查找高速缓存。
12.如权利要求9所述的数据处理系统,其中,所述指令集包括用于对第二多个对象进行排序的最近最少使用算法。
13.如权利要求9所述的数据处理系统,其中,所述处理单元响应于接收到对第一对象的请求,在主列表中搜索第一对象,并且响应于对第一对象不位于主列表中的确定,在次列表中搜索第一对象。
全文摘要
提供了一种用于在查找高速缓存中保持对象的方法、计算机程序产品、和数据处理系统。主列表中包含有第一多个对象。主列表是第一多个对象的无序列表。次列表中包含有第二多个对象。次列表是第二多个对象的有序列表。定期地,将第一多个对象中的至少一个对象降级到次列表,并且将第二多个对象中的至少一个对象升级到主列表。
文档编号G06F12/12GK1934544SQ200580009604
公开日2007年3月21日 申请日期2005年5月18日 优先权日2004年6月17日
发明者格雷格·米维尼, 米索尔·萨斯亚纳拉亚纳·斯里尼瓦斯 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1