在__年_月_日递交的序号为XX/XXX,XXX的“SYSTEM,METHOD AND COMPUTER PROGRAM PRODUCT FORAPPLICATION-LEVEL CACHE-MAPPING AWARENESS ANDREALLOCATION”。
背景技术
传统的多处理器数据处理系统可以包括一个系统总线,这个系统总线上接有一个系统存储器和若干个各可以包括一个处理器和一级或多级高速缓冲存储器的处理单元。高速缓存是用来以不同的等待时间存储数据处理系统的主存储器的子集的暂时存储器材。在一个高速缓存体系的各级,要在给定的体系这级的高速缓存的容量与访问等待时间之间进行折衷。直接接到一个处理单元上的高速缓存通常称为第一级或“L1”高速缓存,通常具有最小的等待时间,但在各高速缓存中是最小的。类似,体系中处在最低级的高速缓存通常具有较大的存储容量,一般要比L1高速缓存大一两个数量级,但是具有较大的访问等待时间。
通常的情况是(虽然不一定是)处在高速缓存体系内较低级别的高速缓存含有在处在高速缓存体系内较高级别的这些高速缓存内含有的所有数据的一个拷贝。这种属性称为“蕴含(inclusion)”,这必然导致要求一个处在高速缓存体系的较低级别的高速缓存至少要有处在体系的比它高一级的高速缓存那样大,以便使这个较低级的高速缓存包括存储器的高速缓存在高一级高速缓存内的内容。如熟悉该技术的人员所周知,按照可用的实现技术构成一个使高速缓存体系各级的访问等待时间和容量最优化的多级高速缓存体系可以使系统性能达到最佳。
一个处在体系的给定级别的高速缓存通常的由若干部分组成,包括一个高速缓存目录阵列、一个高速缓存数据阵列和更新和管理本高速缓存所必需的那些功能逻辑单元。高速缓存的数据阵列部分是一组用来存储主存储器一些部分的拷贝的数据存储元。数据阵列被分成一系列所谓的“高速缓存块”。这些高速缓存块是用来存放数据处理系统内主存储器的一些连续部分的拷贝。这些块通常容量各为128字节的量级,配置成一些通常各由8到16个块组成的组(set)。整个数据阵列含有若干个这样的组。在将存储器的一部分内容放在高速缓存内时,通常用存储器的块的地址的一些比特作为指向高速缓存组的索引,确定存储器的块要装入的组。也就是说,数据处理系统内主存储器的每个连续排列的部分映像到一个特定的组。在高速缓存组内,使用各种分配策略从组内这些构件中选出装入这个块的构件。概括地说,数据阵列被分成多个各含有多个高速缓存块的高速缓存组。存储器内任何给定的块通常指配到一个由与主存储器内这个块的地址相应的一些地址比特的映像功能选择的特定的组内的某个所选的块。
高速缓存通常还包括一个高速缓存目录阵列。这个阵列包括列出整个数据处理系统存储器的当前在本高速缓存内存在的部分和它们的处理状态的薄记信息(bookkeeping information)。典型的是,高速缓存数据阵列内的每个块在高速缓存目录阵列内也有一个相应的表项,列出主存储器的在本高速缓存数据块内存在的部分和它的处理状态。每个目录表项通常包括若干段,可以是包括TAG(标签)段、STATE(状态)段、LRU(最近最少使用)段、INCLUSION(蕴含)段和ECC(纠错检错)段。
目录表项内的TAG段相应于确定在与这个目录表项关联的高速缓存数据阵列表项内存在的是主存储器内的哪个块所必需的那些高位地址比特。TAG段通常在一个高速缓存目录表项内占了大部分比特。STATE段通常指出本高速缓存行的处理STATE。例如,这段通常用来按照诸如众所周知的“MESI”协议之类的某个高速缓存相关性协议维护高速缓存块的高速缓存相关性状态。LRU段通常含有最近访问高速缓存行的情况的信息,用来在高速缓存组内分配新地址的高速缓存块时指导高速缓存块替换策略。最后,蕴含段通常指示在上一级高速缓存内是否存在当前的高速缓存块。熟悉该技术的人员可以理解,在这里所述的目录表项的格式和内容仅仅是可行的一种典型格式。
为了使较大而级别较低的高速缓存不剧烈增加高速缓存目录阵列的开销,通常使用一种称为“分段(sectoring)”的技术。在分段中,一个级别较低的高速缓存内的高速缓存块通常包括若干不同的“段(sector)”。也就是说,在级别较低的高速缓存内,将如上面所说明的这些高速缓存块进一步分成两个或更多个同样大小的子区。这些段通常在容量上等于高速缓存体系内比本高速缓存高一级的高速缓存的高速缓存块容量。
此外,每个段通常可以单独处置和管理。例如,一个高速缓存块中的一个段可能存在于较低级的高速缓存内,而另一个段可能不存在。为了支持对各段的独立处理,目录表项通常格式化成包括每个段的STATE段。重要的是,在高速缓存目录表项内占高速缓存目录表项容量大部分的单个TAG段现在相应于一个较大的高速缓存块。也就是说,带有按照段附加的一些STATE段的同样数量的目录表项可以在同样的高速缓存目录区域内支持比以不分段的对于每个段会需要一个附加的TAG段的实现方式可以支持的大的高速缓存。
最后,高速缓存还含有一些功能逻辑队列,这些队列包括更新高速缓存、为较高级的高速缓存或处理单元提供数据和承受来自系统互连或较低级的高速缓存的窥探(snoop)请求所必需的功能逻辑。这些功能队列通常分成读队列和窥探队列两类队列,分别处理来自较高级的高速缓存或处理单元的请求或者来自系统互连或较低级的高速缓存的请求。作为它们的一部分功能,这些队列负责更新高速缓存数据阵列和目录阵列。
现在所用的优化高速缓存性能的方法包括对准和高速缓存行填充。在高速缓存内还可以用大的页来提供均匀分配。这三个途径各有各的不能令人满意的问题。对准在高速缓存内虽然提供了对象分离(例如,两个块分开在两个高速缓存行上,以避免冲突),但可用的高速缓存资源由于大量未使用的空间而利用率不高。高速缓存行填充也存在类似的问题。大的页提供较好的分配,因为大的页内的实际地址相继映像入一些全等类组(congruence class set)。然而,在一些大页映像成为相同时,多个大页导致在高速缓存内的冲突。此外,任何应用的访问模式可能不是整个在理论上都适合大页的(例如,应用可以得益于交织高速缓存内的对象)。
具体实施方式
下面来看这些附图,特别是图1,图中例示了按照本发明设计的一个多处理器数据处理系统的高层方框图。如图所示,数据处理系统100包括若干个接到系统互连装置112上进行通信的处理单元110a-110c。处理单元110a-110c各是一个包括一个或多个处理器114a-114c的集成电路。除了用来执行程序指令的寄存器、指令流逻辑和执行单元之外,处理器114a-114c各自还包括一个暂时存储所关联的处理器114a-114c可能要访问的指令和数据的第一级(L1)高速缓存116a-116c。虽然在图1中将L1高速缓存116a-116c例示为存储指令和数据(以下将这两者统称为数据)的统一的高速缓存,但是熟悉该技术的人员可以理解,L1高速缓存116a-116c也可以实现为指令和数据分为两支的高速缓存。
如图1中还示出的,数据处理系统100的存储体系还包括一些形成存储体系内级别最低的易失性数据存储器的分布系统存储器122a-122c和一级或多级级别较低的高速缓存,诸如芯片上的第二级(L2)高速缓存118a-118c和芯片外的L3高速缓存120a-120c,用来存储系统存储器122a-122c给处理器114a-114c的数据。此外,处理器114a-114c各包括一个转换后援缓冲器(translation lookaside buffer,TLB)128a-128c,用来高速缓存来自分布于各系统存储器122a-122c的分布页帧表126a-126c的表项的拷贝。
如熟悉该技术的人员所理解的,存储器体系的各级别较低的存储器通常能存储比级别较高的存储器更多的数据,但访问等待时间较长。例如,在一个典型的实施例中,L1高速缓存116a-116c可以各具有512个64字节的高速缓存行,总存储容量为32K字节(kB),等待时间为单个周期。L2高速缓存118a-118c可以各具有2048个128字节的高速缓存行,总存储容量为256kB,而等待时间为10个周期左右。L3高速缓存120a-120c可以各具有4096个256字节的高速缓存行,总存储容量为1MB,等待时间为40-60个周期左右。最后,系统存储器122a-122c各可以存储几十或几百兆字节的数据,等待时间更长,例如为300-400个周期。存储器体系的各级之间的访问等待时间差别那样大,因此有益的是尽量减少对存储器体系内级别较低的特别是对系统存储器122a-122c的访问。
系统互连装置112可以包括一个或多个总线或一个交叉点交换器,用作在处理单元110a-110c和其他接到系统互连装置上的窥探装置(例如,L3高速缓存120a-120c)之间事务通信的渠道。系统互连装置112上的典型事务以一个请求开始,这个请求可以包括一个指出事务类型的事务段、一些分别指出事务的源和预定接收方的源和目的地标签和一个地址和/或数据。优选的是,接到系统互连装置112上的每个装置窥探系统互连装置112上的所有事务,如果适当的话就用一个窥探响应来响应这个请求。这样一些窥探响应由响应逻辑124接收和汇编,提供一个组合响应,指出每个窥探装置在响应这个请求中需采取的行动(如果有的话)。这些行动可以包括将数据送到系统互连装置112上、存储由请求的窥探装置提供的数据等。
熟悉该技术的人员可以理解,数据处理系统100可以包括许多其他组成部分,诸如与其他互连装置互连的桥接器、I/O设备、非易失性存储器和连接网络或附属设备的端口之类。由于这些其他组成部分对于理解本发明并不是必需的,因此在图1中没有示出,在这里也不再进一步说明。
现在来看图2,图中示出了一个可以用来实现按照本发明所设计的任何L1高速缓存116、L2高速缓存118和L3高速缓存120的高速缓存230的例示性实施例的较为详细的方框图。在这个例示性实施例中,高速缓存230是一个4路组关联高速缓存(four-way set associativecashe),包括一个目录阵列232、一个数据阵列234和一个高速缓存控制器236。因此,高速缓存230的数据阵列234包括一系列各含有四路存储高速缓存行的全等类(或组)。如在传统的组关联高速缓存中那样,用系统存储器地址内的一些预定的索引比特将系统存储器222内的存储单元映像到数据阵列234内的特定的全等类(或组)。
还如图2所示,数据阵列234内的每个高速缓存行分成一个或多个可以单独访问和修改的段238a-238n。虽然本发明并不需要,但如果每个高速缓存所用的段容量与所关联的比它高一级的高速缓存(如果有的话)的高速缓存行容量相同的话是很方便的。例如,如果L1高速缓存216具有64字节的高速缓存行,L2高速缓存218和L3高速缓存220优选的是分别配置成提供256字节(四个64字节的段)和512字节(四个128字节的段)的高速缓存行。
存储在数据阵列234内的高速缓存行记录在高速缓存目录阵列232内,高速缓存目录阵列232含有数据阵列234内每个高速缓存块一个的目录表项。每个目录表项包括一个标签(TAG)段240、一个或多个状态(STATUS)段242a-242n、一个最近最少使用(LRU)段244、一个蕴含(I)段246和一个ECC段268。标签段240通过存储高速缓存行的系统存储器地址的标签比特标明在数据阵列234的相应块内存储的是哪个高速缓存行。状态段242用预定的比特组合分别指出存储在数据阵列234的相应块内的高速缓存行的每个段的相关性和/或一致性状态。LRU段244指出数据阵列234的相应块相对它的全等类内其他块最近受到访问的情况,从而指出在高速缓存未命中的情况下应该从全等类内收回哪个高速缓存行。令牌(TOKEN)段269存放令牌数据,情况如下面结合图3所说明的。
蕴含段246指出存储在数据阵列234的相应路内的高速缓存行的每个段是否也存储在存储器体系的低一级的局部存储单元(即,高速缓存或系统存储器)内。最后,ECC段268提供一些校验比特,用来校正和/或检测高速缓存目录表项内的软比特差错。应注意的是,对目录表项内的任何段或子段的更新要求根据目录表项内所有各段的新的值重新计算ECC段的值。
还如图2所示,高速缓存控制器236管理在数据阵列234内的数据存储和检索,响应从存储器体系的所关联的部分接收到的信号和在互连装置212上窥探到的事务更新高速缓存目录232。如所示出的那样,高速缓存控制器236维护一个读队列250和一个窥探队列252,根据读队列250和窥探队列252执行对高速缓存目录232的更新和对数据阵列234的访问。
响应一个接收到的操作,一个窥探队列或读队列通常执行若干个子任务,更新(如果必要的话)高速缓存目录阵列232只是其中一个子任务。这些子任务可以包括使级别较高的高速缓存目录无效、从高速缓存数据阵列234读取高速缓存数据,以及插入、传送或推进高速缓存数据等。一些较高层的相关性通常要求包括目录阵列更新在内的子任务以某个次序执行,使得一些子任务不相互交叠。
现在来看图3,图中以方框图示出了按照本发明的一个实施例交互作用的一组数据处理操作。如图3所示,这种软件配置包括与数据处理系统100的底层硬件交互作用的固件300。这种软件配置还包括一个操作系统302、一组应用程序接口(API)306和一些应用308a-308c。
在操作系统302内,内核304提供一组内核业务310-318。这些内核业务中第一内核业务是提供内时钟的时钟服务310。中断内核业务312提供中断服务。任务管理内核业务314平衡任务之间的资源。数据流和I/O内核业务316提供与各I/O单元互动服务。存储器管理器318为各任务分配诸如分布系统存储器122a-122c、L2高速缓存118a-118c和L3高速缓存120a-120c之类的存储资源。熟悉该技术的人员很快就可以认识到还可以包含一些其他未示出的内核业务。
存储器管理器318通过所规定的诸如消息320和322之类的接口与固件300交互作用。存储器管理器318的功能中有一组高速缓存映像业务324。存储器管理器318提供为将应用308a-308c所用的虚拟地址转换成分布系统存储器122a-122c、L2高速缓存118a-118c和L3高速缓存120a-120c所用的物理地址所必需的服务。物理地址与虚拟地址之间的转换称为地址转换。扣住存储器(Pinning memory)是为转换固定一个虚拟地址与一个物理地址之间的关联的结构。存储器管理器318用令牌数据369提供高速缓存映像服务,指出对于一个给定目录表项的令牌范围。每个高速缓存全等类组通常将指配有一个唯一的令牌值。令牌值将在0到‘n’的范围内,其中‘n’相应于最大的令牌值。最大令牌值为最后一个全等类组的产物。例如,在一个具有2048个各有16个高速缓存行的全等类组的高速缓存内,令牌值可以从0到32,767。最大令牌值与实现方式有关,在一个有2048个全等类而高速缓存行不指配令牌差别的实施例中最大令牌值可以是2048。而在一个有2048个全等类而每个高速缓存段令牌值不同的实施例中令牌值可以从0到131,071。本发明适合于任何划分高速缓存的方法,因为本发明为高速缓存内每个有区别的区段指定唯一的令牌。存储器管理器318还提供再分配业务327的服务。
本发明通过向内核304的存储器管理器318内的高速缓存映像业务324发送一个高速缓存映像请求326使应用308c可以接收到一个高速缓存映像。存储器管理器318内的高速缓存映像业务324于是将消息320发送给固件300,从而接收到列有对高速缓存映像的情况的消息320,如在该技术领域内所周知。内核304的存储器管理器318内的高速缓存映像业务324于是将高速缓存映像328发送给应用308c。
同样本发明使应用308c可以向内核304的存储器管理器318上的再分配业务320发送一个再分配请求330。再分配业务320于是可以将消息322发送给固件300,将一些虚拟地址物理再分配给RAM的不同部分,从而可以响应应用308c,将一个再分配响应332发送给应用308c。
现在参见图4,图中示出了按照本发明的一个优选实施例设计的一个在一个请求和接收一个内核产生的高速缓存映像和设计一个高速缓存再分配方案的应用上的过程的高层逻辑流程图。这个过程开始于步骤400。然后,过程进至步骤402,示为应用308c通过向内核304的存储器管理器318的高速缓存映像业务324发送一种高速缓存映像请求326请求一个高速缓存映像。然后,过程进至步骤404。步骤404示为应用308c从内核304的存储器管理器318上的高速缓存映像业务324接收到一个高速缓存映像328。应用308可以自由地请求对于任何时间分配的任何页的任何高速缓存描述。这样的高速缓存描述将包括与适当的高速缓存行关联的令牌段269的值。
然后,过程进至步骤412。在步骤412,应用308c确定对于需要一个新的高速缓存映像的设计的应用308c在当前的高速缓存映像中是否存在什么问题。如果是这样的话,过程进至如下所述的步骤406。如果当前高速缓存映像是可接受的,过程就在步骤414结束。
然后,过程进至步骤406,示为应用308c设计最佳的高速缓存覆盖区。在本发明中,应用可以用高速缓存令牌值来评估为它的对象分配的一个范围或所有的所扣住的存储器,判定是否已经分配了适当的高速缓存分配。应用判定是否已经分配了适当的高速缓存分配的方法是与应用有关的。有些应用需要一个使用可用范围内的所有高速缓存令牌的分配方案。其他一些应用需要令牌的统计分配遵循一个给定模式的分配。再分配例行程序的优化可以包括一个列有一些不是候选页的最近重新分配的页的清单。列清单可以按线程、过程或系统范围进行。经优化的高速缓存覆盖区的一个例子表现为将数据集中在单个全等类或一个由一些全等类组成的有限组内,诸如第一高速缓存行280和第二高速缓存行282内。这样一个例子在应用传送一些在时间上分开的数据流的情况下是适当的,这些数据流会占用相同的全等类和由相同的令牌269支持。相反,来自诸如执行矩阵变换之类的其他应用的数据组可以分配到多个全等类上(以使高的高速缓存访问利用率和效率的可能性达到最大)。如在该技术领域内所周知,许多高速缓存设计为对同一个全等类内的数据的多个连续访问服务效率不高。
然后,过程进至步骤408。在步骤408,应用308c将一个存储器再分配消息330发送给内核304的存储器管理器318的再分配业务327。各个应用将设计什么时候分配是适当的判定和再分配页的可接受的尝试数。应用最终将接收到一个可接受的高速缓存映像或放弃对再分配的尝试。内核304的存储器管理器318的再分配业务327然后将一个再分配存储器的消息332发送给固件300和对再分配请求330作出响应。
过程然后进至步骤410,示为应用308c从内核304的存储器管理器318的再分配业务320接收到再分配请求响应332。然后,过程返回到上面所说明的步骤402。
现在来看图5,图中示出了按照本发明的一个实施例设计的一个使内核业务产生一个高速缓存映像发送给应用的过程的高层逻辑流程图。这个过程开始于步骤500。然后,过程进至步骤502,示为内核304的存储器管理器318上的高速缓存映像业务324从应用308c接收到高速缓存映像请求326。然后,过程进至步骤504。在步骤504,内核304的存储器管理器318的高速缓存映像业务324从高速缓存映像请求326a中提取一个虚拟指针。然后,过程进至步骤506,示为高速缓存映像业务324将在步骤504提取的虚拟指针变换成一个物理地址。
然后,过程进至步骤508,内核304的存储器管理器318的高速缓存映像业务324根据高速缓存230的目录阵列232内的令牌段269产生一个描述物理地址的令牌范围的高速缓存映像结构。然后,高速缓存映像业务324通过用消息320与固件300交互作用产生一个高速缓存映像结构。然后,过程进至步骤510,示为内核304的存储器管理器318上的高速缓存映像业务324将一个高速缓存映像328发送给提出请求的应用308c。于是,过程在步骤512结束。
现在来看图6,图中示出了按照本发明的一个实施例设计的一个使一个内核响应来自应用的请求再分配高速缓存资源的过程的高层逻辑流程图。过程开始于步骤600,然后进至步骤602。在步骤602,内核304的存储器管理器318的再分配业务327从应用308c接收到一个高速缓存再分配请求330。
接着,过程进至步骤604,示为内核304的存储器管理器318的再分配业务320确定高速缓存再分配请求330是否请求访问受限制的资源,诸如一个受限制的地址范围。应用可以自由地再分配任何不受限制的页,无论这页是否先前已重新分配。如果内核304的存储器管理器318上的再分配业务327确定来自应用308c的高速缓存再分配请求330请求访问的是受限制的资源,过程就进至步骤618,示为再分配业务327将一个含有一个出错消息的再分配请求应答332发送给应用308c。于是,过程在步骤620结束。
回到步骤604,如果内核304的存储器管理器318上的再分配业务327确定应用308c所发送的再分配请求330不是请求受限制的资源,过程就进至步骤606。步骤606示为再分配业务327松开存储器管理器318内的一个物理页。过程于是进至步骤608,示为存储器管理器318从页帧表126a-126c中删除影响所重新分配的RAM的页帧表表项。接着,过程进至步骤610,示为内核304的存储器管理器318上的再分配业务327将一个不同的物理页分配给由再分配请求306表示的页。再分配一个物理页将一个虚拟地址保留在适当的位置,并不改变应用对象对页对象的访问的语义。因此,从这个应用来看一个具有一些连续的页的多页对象将继续具有一些连续的页。分配一个不同的物理页将需要更新转换后援缓冲器128a-128c。然后,过程进至步骤612,示为内核304的存储器管理器318上的再分配业务320将页框表126a-126c增添一个新的页帧表表项,反映再分配请求330内所指出的再分配。
接着,过程进至步骤614,示为内核304的再分配业务320和存储器管理器318确定再分配请求330内所请求的再分配是否成功得到执行。如果包含在再分配请求330内的再分配请求由内核304的存储器管理器318上的再分配业务成功执行,过程就进至步骤616,示为向应用308c发送一个含有确认再分配请求330成功执行的消息的再分配请求应答332。于是,过程在步骤620结束。如果再分配请求330没有成功执行,过程就进至上面已说明的步骤618。
本发明提供了一种使内核业务向应用提供有关特定的存储资源的高速缓存特性的信息的方法。本发明允许应用在执行时利用内核业务所提供的信息来优化它的高速缓存覆盖区。所预期的使用这内核业务会长期运行为改善优化的高速缓存规划而可能支付较高代价的计算工作负荷。这些应用可以是对高速缓存效率非常敏感的,在科学工作负荷的情况下,吞吐量取决于最长等待时间。通过优化高速缓存覆盖区,本发明允许长时间运行的应用改善它们的性能。
虽然以上是结合本发明的一个优选实施例对本发明进行说明的,但熟悉该技术的人员可以理解其中无论在形式上还是在细节上都可以作出各种更改,这并不背离本发明的精神和专利保护范围。