背景技术
存储器的分层体系结构用于桥接快速处理器循环时间和慢速存储器访问时间之间的间隙。在一般情况下,这样一种存储器的分层包括一个与处理器耦合的相当小但快速的第一层(level)高速缓冲存储器(最高等级(ranked))和一个与所说的第一层高速缓冲存储器耦合的较慢的但相当大的第二层高速缓冲存储器。下一个较低等级层可以是一个主存储器,但按照另一种方式,也可以是位于第二层高速缓冲存储器和该存储器之间的另一个较大的高速缓冲存储器。在最低的等级层,存储器分层结构例如有一个大容量的存储介质,如磁盘或光盘。按照另一种方式,可以经过一个传输系统如网络或调制解调器连接为主存储器提供数据。在一系列参考文献中可以发现在本申请中讨论的某些基本概念的更加详细的描述,其中包括Hennessy,John L等人的“计算机体系结构--定性处理方法”(Morgan Kaufmann出版公司,San Mateo,Calif.,1990)。Hennessy的教科书,特别是第8章,对于本发明要解决的高速缓冲存储器问题提供了极好的解释。
许多高速缓冲存储控制器使用了“在写入时提取(fetch-on-write)”的方案。这就意味着,在写入丢失时,要从存储器提取一个完全的高速缓存行,将其插入高速缓冲存储器中,并且在高速缓冲存储器中更新寻址的字。这个行在高速缓冲存储器保存某些时间,在同一个区域内参加另外的写入。在这个方案有希望减小存储器的业务量的时候,通常选择这个方案,因为大多数的写入都要选中高速缓冲存储器,不会直接地产生存储器的业务量。这个方案的要求是,每个高速缓存行要管理2个位(数据内容和地址标记除外),以便表明地址标记是有效的还是无效的,并且表明数据内容是干净的还是脏的(dirty) (已被写入过)。当高速缓冲存储器想要为一个新的字再使用这个位置的时候,或者(例外地),当由处理器执行一个明显的“刷新”操作的时候,将“脏的”高速缓存行写回到存储器。
当对于流式的(多媒体)数据进行操作的时候,任务通常是区分输入和输出流。输出流是通过处理器写入到基于存储器的缓冲器中的。对于这样的流(这样的写入),“写入时提取”方案通过首先提取存储模块使其进入高速缓冲存储器内将要产生无用的存储器业务量(引起功率损耗和时间延迟)。进而,由于在写入操作完成之前读出数据使其进入高速缓冲存储器需要等待时间,因而使效率降低。显然,这个读出的数据是无用的,全都需要重新改写。
避免“写入时提取”的写入丢失的已知的技术是一种“无写入的分配”方案,这里的写入数据只旁路高速缓冲存储器。这个方案不能提供通常期望的存储器的业务量的减小。
一种不太使用的技术可以避免在写入分配方案中出现“写入时提取”。这项技术使高速缓冲存储器的管理增加更多的位:对于每个高速缓存行的每个数据字节增加一个“有效”位。每个高速缓冲行,这一组“有效数据”位现在代替了单个的“脏”位(dirty bit)。按照本文开始段定义的这样一种处理系统是在US5307477中公开的。在发生写入丢失时,要“分配”一个新的高速缓存行(即,在高速缓冲存储器中指定一个位置,置位地址标记和地址“有效”位),写入操作是通过只插入实际写入的字节并且置位对应的“有效数据”位完成的。当这个高速缓存行需要刷新以便存储的时候,它的数据只有一部分可能是“有效的”,这部分有效数据通常由一个存储系统利用,这个存储系统允许利用存储写入操作规定一个“字节脏屏蔽(byte dirtymask)”。显然,这个方案从总体上看是可以避免“写入时提取”的,其代价是扩大的高速缓存管理(每个字节的有效位)和更加繁琐的存储器接口(具有附加的写入以传输“脏屏蔽(dirty mask)”)。
发明内容
本发明的一个目的是通过避免无用的“写入时提取”来减小存储器业务量并且减小存储器等待时间损失(penalty),同时与存储器分层结构的总容量相比要保持辅助数据总量适度。按照本发明,数据处理系统的特征在于权利要求1的特征部分的特征。
在按照本发明的数据处理系统中,如果避免无用的写入时提取,较低等级的高速缓冲存储器中的高速缓存控制器就要从写屏蔽(writemask)中识别:较高等级的高速缓冲存储器是代替较低等级的高速缓冲存储器中高速缓存行的一个子组、还是代替整个高速缓存行。如果要代替高速缓存行的一个子集,则必须从存储器分层结构的下一个较低的层中首先提取这个高速缓存行,如果这个高速缓存行还没有在较低等级的高速缓冲存储器中得到的话。然而,如果较高等级的高速缓冲存储器代替较低等级的高速缓冲存储器中的整个高速缓存行,则较低等级的高速缓冲存储器的高速缓存控制器要从这个写屏蔽中识别这种情况并避免不必要的写入时提取。因为避免了在写入时提取,所以在这些情况下数据处理系统的整体操作速度得以改善。虽然较高等级的高速缓冲存储器维持的是一个相对来说扩大的管理,但总的管理开销是适度的,因为在较低等级的高速缓冲存储器中的辅助信息涉及的是颗粒度比较低等级的高速缓冲存储器中的颗粒度粗的数据元,并且因为较高等级的高速缓冲存储器小于较低等级的高速缓冲存储器。
本发明对于根据权利要求2所述的多处理器系统是特别有益的。以此方式可以减小两个处理器需要同时访问共享的存储器的频度。这对于多处理器系统的操作速度是有益的。为了得到最好的结果,优选的作法是,在多处理器系统中的每个处理器都有它自已的如根据权利要求1所述的存储器分层结构。
较低等级的高速缓冲存储器和较高等级的高速缓冲存储器的行长度(linesize)之间的比例可以是大于1(例如2)的整数倍。在这种情况下,如果一个较高等级的高速缓冲存储器要想将第一行写入较低等级的高速缓冲存储器的、写屏蔽指示要全部替换其内容的那一行的时候,较低等级的高速缓冲存储器在一般情况下对于分成两半的高速缓冲存储器中的每一半都要有一个“有效数据”位,并且,较低等级的高速缓冲存储器可能分配一个新的而且很大的高速缓存行、存储写入的数据、和只置位对应的“有效数据”位。从具有完整写屏蔽的较高等级的高速缓冲存储器向较低等级的高速缓冲存储器的另一半的第二次写入可以使较大的高速缓存行变为完整。按照另一种方式,如果第二次写入的写屏蔽指示要部分替换它的内容,则必须在所说的较低等级的高速缓冲存储器中首先提取一个整个行。所提取的数据还包括从较高等级的高速缓冲存储器的第一次写入期间已经写入的位置的数据。在这种情况下,从存储器来到的数据要与在高速缓冲存储器中已经有的数据进行合并,用这样一种方法使先前写入高速缓冲存储器的并且通过“有效数据”位标识的数据胜过(prevail over)从存储器读出的数据。随后,通过来自较高等级的高速缓冲存储器的并且由写屏蔽表示的数据,部分地改写较低等级的高速缓冲存储器中的来自存储器的数据。在权利要求3的优选实施例中,不需要进行与较低等级的高速缓冲存储器中已经有的数据的合并,按照写屏蔽与来自较高等级的高速缓冲存储器进行合并足矣。
在权利要求4的实施例中,作为写入丢失的结果在高速缓冲存储器中的数据分配与在一个分开的读出高速缓冲存储器中作为读出丢失的结果的数据分配要完全分开。读出高速缓冲存储器相对于写入高速缓冲存储器的分配区域这种分开有助于改善系统的性能,特别是对于流式数据的情况,因为写入的分配不可能使有潜在价值的读出数据从高速缓冲存储器推出。对于分开的读出高速缓冲存储器和写入高速缓冲存储器,需要附加的(公知的)技术以便在这两个高速缓冲存储器之间维持统一的存储视图(memory view)。在一般情况下,这就要求在写入高速缓冲存储器中检查读出操作的地址,并且在匹配时,或者从写入高速缓冲存储器直接读出,或者在写入高速缓冲存储器中对存储器进行刷新。
权利要求5的实施例是一个成本特效的解决方案。模拟结果表明,即使在按照本发明的其中的较高等级的高速缓冲存储器只有一行的处理系统中,也能导致后台存储器(background memory)的通信带宽的明显减小。
具体实施方式
在存储器的分层结构中,较高等级的高速缓冲存储器C1具有按照写入分配方案操作的高速缓存控制器CC1,较低等级的高速缓冲存储器C2耦合到较高等级的高速缓冲存储器C1并且具有高速缓存控制器CC2。在图中所示的实施例中,较高等级的高速缓冲存储器也是最高等级的(第一层)高速缓冲存储器C1,较低等级的高速缓冲存储器是第二层高速缓冲存储器C2。然而,为了本发明的目的,较高等级的高速缓冲存储器和较低等级的高速缓冲存储器在存储器的分层结构中是两个相互衔接的高速缓冲存储器,例如第二和第三层的高速缓冲存储器,这就足够了。通常,最高层的高速缓冲存储器直接绘制(mapped)或者是与较小的组相关的组。这有助于响应速度。较低等级的高速缓冲存储器通常是与相当大的组相关的组,从而可以提高命中率。
较高等级的高速缓冲存储器C1的容量小于较低等级的高速缓冲存储器C2的容量。两个高速缓冲存储器管理表示其中存在的数据是否有效的辅助信息。
较低等级的高速缓冲存储器还要耦合到主存储器M上。
为了说明本发明,在图2中更加详细地表示出较低等级的高速缓冲存储器C2和较高等级的高速缓冲存储器C1。
在所示的实施例中,较高等级的高速缓冲存储器C1具有4行。每行包括一个标记信息单元,表示对应于所说的高速缓存行中的数据的存储器地址。这个数据在这里包括4个数据元D1。此外,高速缓存行存储处于有效性位形式的辅助信息V1,每个数据元有一个有效性位。
在一般情况下,C1在L1高速缓存行中每个字节有一个“有效”位V1(处理器写入操作的颗粒度)。优选实施例使图2与以C1高速缓存行的颗粒度在C2中选择一个“有效”位相匹配。一个可替换的实施例在C2中可能具有“有效”位V2,字的颗粒度为4个字节或8个字节。
本发明的数据处理系统的特征在于:较低等级的高速缓冲存储器C2的行长度是较高等级的高速缓冲存储器C1的行长度的整数倍。在图2所示的实施例中,较低等级的高速缓冲存储器C2的行长度是较高等级的高速缓冲存储器C1的行长度的2倍,即,与C1中一个行相比,在C2中的一行包括2倍数据元的数目。在较高等级的高速缓冲存储器C1中的辅助信息V1涉及颗粒度比较低等级的高速缓冲存储器C2中的这个颗粒度要精细一些的数据元。更加具体地说,在较高等级的高速缓冲存储器C1中,高速缓存行包括辅助信息(有效信息)V1,辅助信息V1表示每个数据元D1的有效性。在较低等级的高速缓冲存储器中,有效信息V1涉及4个数据元D2(对应于较高层的高速缓存行的容量)的颗粒度。对于较高等级的高速缓冲存储器C1进行安排,以便与数据DL的一行相结合向较低等级的高速缓冲存储器C2发送一个写屏蔽,用于指示在较低等级的高速缓冲存储器C2中的哪些数据要按照较细的颗粒度进行改写。写屏蔽WM是从属于一个C1高速缓存行的4个有效位V1构成的。
下面参照图3进一步描述按照本发明的数据处理系统的操作。
在步骤1,C2接收具有写屏蔽和地址的C1的高速缓存行。
在步骤2,确认C2中的一个标志是否匹配地址。
如果没有找到这样的标志(N),则执行步骤3,其中:在C2中识别可能被替换的一个“牺牲的”行。可以使用几种策略来选择要替换的这一行,但这些策略均在本发明的范围之外。例如最近使用的(LRU)方法是众所周知的。否则,可以使用例如随机选择方法。
步骤3的后面是步骤4,其中:确认这个“牺牲的”标记信息是否具有“有效地址”和“脏的”地址。
如果是这样(Y),则在步骤5确认这个“牺牲的”标记信息是否具有所有的“有效信息”位组。如果不是这种情况(N),则执行步骤6,其中
为C2牺牲行的内容发出来自存储器的读出
利用存储器数据更新该牺牲,这里没有置位“有效信息”。置位这个牺牲的高速缓存行的所有的“有效信息”位。
步骤6之后是步骤7,其中:刷新这个牺牲的行以便存储。如果在步骤5中的测试结果是肯定的(Y),则跳过步骤6,立即执行步骤7。
步骤7之后是步骤8,其中:分配新的行,其中包括下面的操作。
对于新的地址置位标志信息,
将这个地址置位成有效的,
复位所有的“有效信息”位。
如果步骤4的结果是否定的,则立即执行步骤8,跳过步骤5、6、7。
步骤8之后是步骤9。其中,对于C2中(现在)具有匹配标志的一行确定:是否像对于C2中地址匹配的数据元那样置位了“有效信息”。如果在步骤2中的测试结果是肯定的,立即执行步骤9。
步骤9之后是步骤10,其中:确认是否没有置位这个“有效信息”,并且写屏蔽只是部分地置位。
如果满足这个条件,则执行步骤11,其中涉及如下的操作:
发出对于C2高速缓存行内容的存储器读出,
更新具有其中没有置位“有效信息”的存储器数据的C2高速缓存行中的一些部分,
置位这个C2高速缓存行的所有的“有效信息”位。
步骤11之后是步骤12,其中包括如下的子步骤:
执行在C2数据元中C1数据的屏蔽写入(masked write)
对于这个高速缓冲存储器位置,置位“有效信息”
对于这个C2高速缓存行,置位在标志信息中的“脏位”
如果在步骤10的测试结果是否定的,则立即执行步骤12。
图4表示本发明的第二实施例,其中的数据处理系统包括一个或多个另外的处理器P、P`、P``,并且,其中的处理器P的存储器分层结构C1、C2、M包括等级低于所说较低等级的高速缓冲存储器的等级的存储器,并且所说的存储器的等级与所说的另外的处理器共享。在所示的实施例中,多处理器系统中的多个处理器的每个处理器都有它自已的存储器的分层结构,处理器P`的分层结构包括较高等级的高速缓冲存储器C1`和较低等级层的高速缓冲存储器C2`。处理器P``的分层结构包括较高等级的高速缓冲存储器C1``和较低等级层的高速缓冲存储器C2``。