专利名称:利用永久历史页表数据预取数据到高速缓存的装置和方法
技术领域:
本发明涉及数字数据处理硬件,具体涉及用于数字数据处理设备的处理单元的、高速缓冲存储器和支持硬件的设计和操作。
背景技术:
在二十世纪的后半部分,开始了被称为信息革命的现象。虽然信息革命是范围比任何一个事件或机器更大范围的历史发展,但是没有任何设备可以比数字电子计算机更能代表信息革命。计算机系统的发展已经肯定是一场革命。每年,计算机系统更快地发展,存储更多的数据,并且向它们的用户提供更多的应用。
现代计算机系统典型地包括中央处理单元(CPU)和用于存储、检索和传送信息所需要的支持硬件,诸如通信总线和存储器。它还包括与外部世界通信所需要的硬件,诸如输入/输出控制器或存储控制器;与其附接的设备,诸如键盘、监视器、磁带驱动器、硬盘驱动器、耦接到网络的通信线路等。CPU是系统的心脏。它执行包括计算机程序的指令,并且指导其它系统部件的操作。
从计算机硬件的角度来看,多数系统以基本相同的方式来操作。处理器能够执行有限的一组很简单的操作,诸如算术、逻辑比较和从一个位置向另一个移动数据。但是每个操作被执行得很快。用于指导计算机执行大量这样的简单操作的程序给出计算机正在进行一些复杂事情的假象。通过执行实际上相同的一组很简单操作但是更快地执行它,可以使用户有可能感知到计算机系统的新的或改进的能力。因此,继续对计算机系统的改进需要使这些系统更快。
计算机系统的整体速度(也称为“流量”)可以被粗略地测量为每单元时间执行的操作的数量。在概念上,对于系统速度的所有可能改进中的最简单者是提高各种部件的时钟速度,尤其是处理器的时钟速度。例如,如果所有动作以两倍的速度运行但是以相同的方式工作,则系统将以一半的时间来执行给定的任务。由许多离散部件构成的早期的计算机处理器通过缩小和组合部件、最终将整个处理器封装为在单个芯片上的集成电路而容易得到较大的时钟速度改进,并且通过进一步缩小尺寸和其它改进而提高的时钟速度继续成为目标。除了提高时钟速度,有可能通过提高每个时钟周期执行的操作的平均数来提高单独的CPU的流量。
典型的计算机系统可以存储大量的数据,并且处理器可以被调用来使用这个数据的任何部分。通常用于存储海量数据的设备(诸如旋转的磁性硬盘驱动器存储单元)要求较长的等待时间来存取存储在其上的数据。如果处理器在每次执行一个操作时都要直接从这样的海量存储设备存取数据,则它将花费几乎它的所有时间来等待存储设备返回数据,而它的流量将实际上很低。结果,计算机系统在分层的存储器或存储设备中存储数据,每个在后的层具有更快的存取,但是存储较少的数据。在最低层是一个或多个海量存储单元,它们在较慢的设备上存储所有的数据。向上一层是主存储器,它一般是半导体存储器。主存储器具有比存储单元小得多的数据容量,但是具有快得多的存取。再向上是高速缓冲存储器,它们在层次上可以是单层或多层(第一级是最高层)的。高速缓冲存储器也是半导体存储器,但是比主存储器更快,并且也具有更小的数据容量。甚至可以考虑外部存储的数据——诸如可以通过网络连接访问的数据——是在计算机系统本身的海量存储单元以下的另一层,因为从网络连接(例如因特网)获得的数据数量可能更大,但是访问时间更慢。
数据被从海量存储器向主存储器、向高速缓冲存储器移动以便由处理器使用。理想地,数据在被处理器需要之前移动到最接近处理器的高速缓冲存储器层,以便当需要它时,处理器不必等待较长等待时间的数据存取的完成。但是,因为任何高速缓冲存储器层的容量都仅是主存储器的容量的一小部分,而主存储器本身又仅是海量存储单元的容量的一小部分,因此不可能简单地向所述高速缓冲存储器装载所有的数据。必须有某种技术可用于选择要存储在高速缓冲存储器中的数据,以便当处理器需要特定的数据项时,它将可能在那里。
高速缓冲存储器通常被划分为称为行的数据单位,行是可以独立地装载到高速缓冲存储器中或从高速缓冲存储器中去除的数据最小单位。在简单的高速缓冲存储器设计中,数据在需要时、即在出现高速缓存未中时被装载到高速缓冲存储器的行中。即,当处理器需要不在高速缓冲存储器中的一些数据(高速缓存未中)时,从较高速缓冲存储器低的层或从存储器获得所需要的数据,并将其装载到一个高速缓冲存储器行中。这意味着必须选择去除高速缓冲存储器数据的一现有行。存在用于选择要去除的高速缓冲存储器现有行的各种技术和设备。
根据要求装载在概念上是简单的,但是导致大量的高速缓存未中和结果所致的、处理器等待所需数据时的空闲时间。因此,许多复杂的处理器设计都采用某种形式的高速缓冲存储器数据预取。预取仅仅意味着存在预测技术,借此,在处理器实际需要数据之前,向一个或多个高速缓冲存储器层装载被认为可能不久就需要的数据。如果预测技术是准确和及时的,则数据将在第一级(L1)高速缓冲存储器未中发生之前位于第一级高速缓冲存储器中,或在高速缓冲存储器的其它层中,从那里可以比从主存储器更快地存取数据。
存在几种公知的预取技术,它们可以单独或组合使用。一种技术是顺序预取,即预取地址空间的下一顺序的行,其所基于的理论是这是接着需要的最可能的数据。可将一确认位用于顺序预取,其中,如果在高速缓冲存储器行中的数据当其被最后预取到高速缓冲存储器时被实际访问,则置位该位,否则将其复位。如果确认位对下一个顺序数据行置位,则该行将被预取到高速缓冲存储器中。
另一种技术涉及使用分支目标缓冲器。分支目标缓冲器是一组分支目标地址,每个地址与相应的高速缓冲存储器行相关联。分支目标缓冲器在处理器引用相关联的高速缓冲存储器行之后立即记录由处理器引用的地址。当一个高速缓冲存储器行被引用时,它的相关联的分支目标地址是预取的良好候选者。分支目标缓冲器比顺序预取更为通用,因为分支目标可以是任何地址,但是它要求实质更多的实现开销。
被称为“技术流预取”的另一种预取技术要求使用特殊的技术流地址缓冲器。每个缓冲器项是由处理器先前依序访问的地址的列表。如果该列表中的第一地址被处理器引用,则剩余的地址是预取的良好候选者。像分支目标缓冲器一样,这种技术涉及一些实现开销。
虽然诸如这些的传统预取技术具有一些预测值,但是它们仍然非常有限。已经观察到在许多环境中,处理器花费大量时间空闲在高速缓存未中上。利用更精确和全面的预取技术,实质的性能改进将是可能的,它们将大大降低高速缓存未中的频率。
发明内容
计算机系统包括主存储器、至少一个处理器和至少一层高速缓冲存储器。系统在存储器中、最好是在页表中维护相对于每个可寻址页面的引用历史数据。引用历史数据用于对页面中的数据进行预取决策。
在优选实施例的一个方面,对于页内的多个可高速缓存的子单元的每个维护引用历史数据。按照本发明的可高速缓存的子单元是可以与其它可高速缓存的子单元无关地被装载到第一级高速缓冲存储器中的页面的任何部分。最小可能的可高速缓存子单元是第一级高速缓冲存储器行,但是一个可高速缓存子单元可以是任何整数数量的高速缓冲存储器行。根据每个可高速缓存子单元的各自的引用历史来选择性地选择可高速缓存子单元用于预取。
在优选实施例的另一方面,引用历史数据是升计数或降计数,用于指示当页面中的数据被装载到高速缓冲存储器中时对其的引用频率。如果数据被装载到高速缓冲存储器中并且被处理器引用,则递增引用计数;如果同一数据被装载到高速缓冲存储器中并且在被从高速缓冲存储器中删除之前未被处理器引用,则递减引用计数。引用计数因此表示根据近期历史数据在近期将被引用的近似可能性。
在优选实施例的另一方面,计算机系统包括有效到实际地址翻译表(ERAT),它将由处理器产生的有效地址翻译为在主存储器中的实际地址。每当新的页面项被装载到ERAT中时将查看引用历史数据,并且根据引用历史数据来选择要预取到高速缓冲存储器中的数据。
在优选实施例中,将如在此所述的根据页表中的历史数据来向高速缓冲存储器预取页面子单元与根据段表中的与独立页面相关联的数据来向页面翻译机制预取页数据相结合。所述段表的使用是相关的共同待决的David A.Luick的申请第____号的主题,题目为“使用段表数据预取页面数据的装置和方法”(受让方的记录号为ROC920030255US1),它在与本申请相同的日期被提交。但是,本发明可以与任何这样的、根据段表中的数据来预取页面数据的技术无关地来使用,并且事实上甚至可以在没有段表的系统中使用本发明。
在本发明的优点中有与被高速缓存的数据相比较,存储在页表中的历史数据相对持久。同一数据可以被装载和从高速缓冲存储器中去除,甚至可以在包含历史数据的对应页表项的生命周期内多次从不同处理器中的不同高速缓冲存储器被装载和去除。这样持久地改善了数据的预测预取的范围和精度。按照本发明优选实施例的数据预取技术可以因此而大大降低高速缓存未中的频率和由此导致的处理器的空闲时间。这样的技术涉及在实现所需要的附加存储资源和控制结构上的较小的成本。
可以参照附图来最好地被理解关于本发明的细节、其结构和运行,其中同样的附图标记指的是相同的部件,并且其中图1是按照本发明的优选实施例的、使用根据持久的历史页表数据采用高速缓冲存储器预取的计算机系统的主要硬件部件的高层方框图。
图2是所述优选实施例的计算机系统中的CPU的主要部件的高层示意图。
图3是在优选实施例的计算机系统中支持的地址和地址翻译的不同形式的概念图。
图4更详细地示出按照所述优选实施例的、用于存储和寻址数据的各高速缓冲存储器和相关结构的层次结构。
图5示出按照所述优选实施例的、包含用于页面的可高速缓存子单元的历史引用数据的页表的结构。
图6示出按照所述优选实施例的、包含用于页面的可高速缓存子单元的历史引用数据的翻译后备缓冲器(TLB)的结构。
图7示出按照所述优选实施例的、包含历史页面引用数据的段表的结构。
图8示出按照所述优选实施例的、包含历史页面应用数据的段后备缓冲器(SLB)的结构。
图9示出按照所述优选实施例的、包含预取指示符的有效到实际地址表(ERAT)的结构。
图10示出按照所述优选实施例的、第一级高速缓冲存储器的结构。
图11示出按照所述优选实施例的预取引擎的结构,其中示出了预取引擎如何与各种其它硬件交互。
图12是用于在高层图解按照所述优选实施例的、由系统部件响应于由处理器产生的数据引用地址而提供数据所采取的行为的流程图。
图13是图解按照所述优选实施例的、由系统部件在第一级高速缓冲存储器中提供所需要的数据所采取的行为的流程图。
图14是图解按照所述优选实施例的、由系统部件在ERAT中提供所需要的页面项所采取的行为的流程图。
图15是图解按照所述优选实施例的、由系统部件在SLB中提供所需要的段项所采取的行为的流程图。
图16是图解按照所述优选实施例的、由系统部件在TLB中提供所需要的页面项所采取的行为的流程图。
图17是图解按照所述优选实施例的、用于预取高速缓冲存储器行的预取引擎的操作的流程图。
图18是图解按照所述优选实施例的、用于预取ERAT项的预取引擎的操作的流程图。
具体实施例方式
参见附图,其中在几个视图中,同样的标号表示同样的部件,图1是按照本发明的优选实施例的、使用根据持久历史页表数据采用高速缓冲存储器预取的计算机系统100的主要硬件部件的高层表示。计算机系统100的主要部件包括一个或多个中央处理单元(CPU)101A-101D,主存储器102、终端接口111、存储接口112、I/O设备接口113和通信/网络接口114,它们都经由总线103、104和总线接口105耦接以用于部件之间的通信。
系统100包括一个或多个通用可编程中央处理单元(CPU)101A-101D,在此通称为部件101。在所述优选实施例中,系统100包括多个典型的较大系统的处理器;但是,系统100或者还可以是单CPU系统。每个处理器101执行存储在存储器102中的指令。指令和数据被装载到一层或多层高速缓冲存储器中(图1中未示出)以进行处理。存储器102是随机存取半导体存储器,用于存储数据和程序。存储器102在概念上是单片实体,可以明白存储器实际上是更复杂的装置,包括高速缓冲存储器和其它存储器件。
存储器总线103提供数据通信路径,用于在CPU 101、主存储器102和输入/输出总线接口单元105之间传送数据。输入/输出总线接口105还耦接到系统输入/输出总线104,用于向/从各种输入/输出单元传送数据。输入/输出总线接口105通过系统输入/输出总线104与多个输入/输出接口单元111-114通信,输入/输出接口单元111-114也被称为输入/输出处理器(IOP)或输入/输出适配器(IOA)。系统输入/输出总线可以是例如工业标准PCI总线或任何其它适当的总线技术。输入/输出接口单元支持与各种存储和输入/输出设备的通信。例如,终端接口单元111支持一个或多个用户终端121-124的附接。存储接口单元112支持一个或多个直接存取存储设备(DASD)125-127(它们通常是旋转磁盘驱动器存储设备,虽然它们还可以是其它设备,包括被配置来作为对于主机的单个大存储设备出现的盘驱动器阵列)的附接。输入/输出和其它设备接口113提供到各种其它输入/输出设备或其它类型的设备的任何一个的接口。在图1的示范实施例中示出了两种这样的设备打印机128和传真机129,可以明白还有许多其它的这样设备,它们可以是不同类型的。网络接口114提供从系统100到其它数字设备和计算机系统的一个或多个通信路径;这样的路径可以包括例如一个或多个网络130,诸如因特网、局域网或其它网络,或者还可以包括远程设备通信线路、无线连接等等。
应当明白,图1意欲在高层上描述系统100的代表性的主要部件,各部件可以比图1所示的具有更大的复杂性,可以提供除了或补充图1所示的部件的部件,这样的部件的数量、类型和配置可以改变。在此公开了这样的附加复杂性或附加变化的几个具体示例,应当明白这些仅仅是举例,而不必仅是这些变化。
虽然主存储器102在图1被示出为单片实体,但是存储器102事实上包括至少一层、最好是多层高速缓冲存储器,如在此进一步详细描述的。存储器可以进一步被分布到和相关联于不同的CPU或不同的CPU组,如在各种所谓的非一致存储器存取(NUMA)计算机结构的任何一种中公知的。虽然存储器总线103在图1中被示为提供在CPU 101、主存储器102和输入/输出总线接口105之间的直接通信路径的较为简单的、单总线结构,但事实上存储器总线103可以包括多个不同的总线或通信路径,它们可以以任何一种形式来配置,诸如在分层、星型或万维网配置中的点到点链路、多级总线、并行和冗余路径等。此外,虽然输入/输出总线接口105和输入/输出总线104被示为单个的相应单元,但是系统100可以事实上包括多个输入/输出总线接口单元105和/或多个输入/输出总线104。虽然示出了多个输入/输出接口单元——它们将各种延伸到各种输入/输出设备的通信路径与系统输入/输出总线104分开,但是还可以将一些或所有的输入/输出设备直接连接到一个或多个系统输入/输出总线。
图1所示的计算机系统100具有多个附接的终端121-124,例如,这可能在多用户“大型”计算机系统是典型的。通常,在这样的情况下,所附接的设备的实际数量大于图1中所示的那些,尽管本发明不限于任何特定大小的系统。计算机系统100还可以是通常仅仅包括单个用户显示器和键盘输入的单用户系统,或是具有很少或没有直接用户界面但从其它计算机系统(客户端)接收请求的服务器或类似设备。
虽然以在高层描述和示出了各种系统部件,但是应当明白典型的计算机系统包括许多其它未示出的部件,它们对于理解本发明不是必要的。
图2是按照所述优选实施例的、包括某些相关联的高速缓冲存储器结构的CPU 101的主要部件的高层示图,其中以比图1所示的更详细地示出了CPU 101。在这个实施例中,图2所示的部件被封装在单个半导体芯片中。CPU 101包括指令单元部分201、执行单元部分211、第一级指令高速缓冲存储器(L1 I高速缓冲存储器)205、第一级数据高速缓冲存储器(L1 D高速缓冲存储器)206、有效到实际地址表(ERAT)207、第二级高速缓冲存储器(L2高速缓冲存储器)208、存储器接口209、地址翻译硬件216、段后备缓冲器(SLB)217、翻译后备缓冲器(TLB)218和预取引擎220。一般,指令单元201从L1 I高速缓冲存储器205获得指令,解码这些指令以确定要执行的操作,并且解析分支条件以控制程序流。执行单元211对在寄存器中的数据执行算术和逻辑运算,并且从L1 D高速缓冲存储器装载或存储数据。L2高速缓冲存储器208是第二级高速缓冲存储器,它一般大于L1 I高速缓冲存储器或L1 D高速缓冲存储器,用于向L1 I高速缓冲存储器205和L1 D高速缓冲存储器206提供数据。第二级高速缓冲存储器208耦接到外部存储器接口209,它从外部存储位置装载数据或向其存储数据,该外部存储器诸如第三级高速缓冲存储器或主存储器102。
ERAT 207是寻址高速缓冲存储器,用于为在其它高速缓冲存储器结构中的某些数据提供地址翻译。在SLB 217和TLB 218中的地址翻译数据被翻译硬件216访问和翻译以构造在ERAT 207中的地址翻译项。在此更全面地解释这些单元的操作。
指令单元201包括分支单元202、指令解码/分派单元203和指令寄存器和缓冲器204。来自L1 I高速缓冲存储器205的指令在执行之前被装载到缓冲器204中。依赖于CPU的设计,可以存在多个缓冲器(例如,一个用于一个顺序的指令序列,其它用于转到的位置),其中每个可以包含多个指令。解码/分派单元203从缓冲器之一接收要执行的当前指令,并且解码该指令以确定要执行的操作或分支条件。分支单元202通过评估分支条件来控制程序流,并且从L1 I高速缓冲存储器205重新填充缓冲器。
L1 I高速缓冲存储器205和L1 D高速缓冲存储器206是分立的指令和数据高速缓冲存储器,用于向指令和执行单元提供数据。第二级高速缓冲存储器是未区分的高速缓冲存储器,其中包含指令和非指令数据。通常,通过指令或执行单元从第一级高速缓冲存储器取出或向第一级高速缓冲存储器存储数据,如果在第一级高速缓冲存储器中不可获得数据,则从第二级高速缓冲存储器208向第一级高速缓冲存储器中装载该数据,第二级高速缓冲存储器208继而从外部位置获取所述数据,然后所述数据被从第一级高速缓冲存储器向对应的单元传送。依赖于处理器的设计,有可能绕过第一级高速缓冲存储器而从第二级高速缓冲存储器208向执行或指令寄存器装载数据。存储器总线接口209处理通过存储器总线103的数据传送,数据可以经由总线接口105传输到第三级高速缓冲存储器、主存储器或输入/输出单元。
执行单元211包括一组通用寄存器212,用于存储数据;整数算术逻辑单元(ALU)213,用于响应于由指令单元201解码的指令而对在GP寄存器212中的数据执行算术和逻辑运算。执行单元还包括复杂操作子单元214,用于执行数学密集的运算,诸如浮点运算。子单元214可以包括其本身的特殊寄存器(未示出)。整数ALU 213和复杂操作子单元214通常被实现为多级流水线。除了在图2中所示的部件之外,执行单元还可以包括附加的专用寄存器和计数器、用于从高速缓冲存储器或存储器、控制硬件等获取数据或向它们存储数据的装载和存储硬件。尤其是,除了整数ALU和复杂操作子单元214之外,执行单元211还可以包括流水线(未示出)。可以在处理器101内存在附加的流水线,诸如指令获取和解码流水线。
在指令单元或执行单元进行实际的数据引用之前,预取引擎220预先将数据取到ERAT 207和高速缓冲存储器中。预取引擎220特别使用历史引用数据来预测应当高速缓存哪些数据。在此更详细地描述预取引擎的操作。
在所述优选实施例中,CPU 101支持多个(最好两个)线程的同时执行。对于每个线程有独立的一组GP寄存器212(未示出)以及某些其它结构。但是,所支持的线程数可能不同,并且本发明也可以用于仅支持单线程的执行的处理器中。
虽然已经在高层上描述和示出了各种CPU部件,但是应当明白,所述优选实施例的CPU包括未示出的许多其它部件,它们对于理解本发明不是必要的。例如,在典型的设计中要求各种附加的专用寄存器。而且,可以明白,图2的CPU仅仅是CPU结构的一个示例,CPU 101内部件的数量、类型和布置上可以存在许多变化,除了所述的那些之外还可以存在未示出的部件,不是所有所述部件都存在于CPU设计中。例如,缓冲器和高速缓冲存储器的数量和配置可以不同;执行单元流水线的数量和功能可以不同;可以以不同的阵列或组来配置寄存器;专用的浮点硬件可有可无,等等。而且,CPU 101可以具有简单或复杂的指令集,它支持对于每个处理器周期的单个操作或多个操作的分派。
第一级高速缓冲存储器205和206和第二级高速缓冲存储器208被示出在图2中作为CPU 101的一部分,因为每个CPU具有其本身相应的第一级和第二级高速缓冲存储器。在结构上,高速缓冲存储器可以被考虑为存储器102的一部分,或被考虑为CPU的一部分,或可以被整体地考虑为独立的实体。图2的图示意欲是典型的,而不意欲将本发明限定到任何特定的物理高速缓冲存储器的实现,处理器芯片或芯片组可以包括比图2所示的更多或更少的高速缓冲存储器。
所述优选实施例的系统100支持多级地址翻译,如图3中逻辑地所示。三种基本的寻址构造是有效地址301、虚拟地址302和实际地址303。“有效地址”是从处理器的指令和执行单元来看的地址。即,由指令单元201或执行单元211产生的、用来引用指令或数据的地址是有效地址。可以以本领域内公知的各种方式产生有效地址,例如作为直接在指令中编码的地址(它可以或不可以与专用寄存器中的一些高位地址位连接,这种专用寄存器例如当开始执行新任务时不常改变);作为与通用寄存器中地址的计算的偏移;作为与当前执行的指令的偏移;等等。在所述优选实施例中,有效地址包括64位,被编号为0-63(0是最高位位)。“虚拟地址”是一种操作系统构造,用于分立不同执行任务的地址空间。即,如果每个任务可以引用有效地址的全范围,则不同任务的有效地址空间必须被映射到更大的虚拟地址空间中以避免冲突。在某些计算机系统结构中,虚拟地址也可以被映射到海量存储器中的位置以用于存取所存储的数据。虚拟地址不是像有效地址那样被存储在寄存器中的意义上的物理实体;它是逻辑结构,是通过连接52位的虚拟段ID 314和有效地址的低28位(总共80位)而产生的。实际地址表示在存储数据的存储器102中的物理位置。实际地址的位数对于具体的机器不同,但是一般小于有效地址的位数。在图3的图示中,实际地址包括标号为12-63的52位。在所述优选实施例中,使用实际地址来寻址第一级、第二级和第三级高速缓冲存储器。
如图3所示,有效地址301包括36位的有效段ID 311、16位的页号312和12位的字节索引313,有效段ID占用了最高位的位置。虚拟地址302是从通过下述方式由有效地址构造的将36位的有效段ID 311映射为52位的虚拟段ID 314,将结果产生的虚拟段ID314与页号312和字节索引313连接。通过下述方式从虚拟地址得到实际地址303将虚拟段ID 314和页号312映射为40位的实际页号315,并且将实际页号与字节索引313连接。因为主存储器的页面包含4K(即212)字节,因此字节索引313(最低12位地址位)指定页内地址,并且不论地址是有效的、虚拟的或实际的都相同。较高的位指定一个页面,并且因此有时被称为“有效页号”或“实际页号”,视情况而定。
可以明白,这些地址范围参数仅仅是可以改变的寻址方案的一个示例。尤其是,一个系统可以支持不同的页面大小和/或多种页面大小。当使用较大的页面大小时,可因此而期望提高可高速缓存的子单元的大小。
计算机系统100包括用于将由CPU 101产生的有效地址翻译为在存储器102或高速缓冲存储器中的实际地址的地址翻译机制。这个地址翻译机制在图3中以高概念层得到描述,并且在此更详细地描述。地址翻译机制包括段翻译机制321(包括段表和段后备缓冲器),用于将有效段ID 311映射为虚拟段ID314;页面翻译机制322(包括页表和翻译后备缓冲器),用于将虚拟段ID 314和页号312映射为实际页号315。
图4更详细地示出按照所述优选实施例的、用于存储和寻址数据的各种高速缓冲存储器和相关联的结构的层次结构。在这个实施例中,除了主存储器之外还有三层高速缓冲存储器。来自主存储器的数据被首先装载到第三级的高速缓冲存储器(L3高速缓冲存储器)401A、401B(在此通称为部件401),然后从这里被装载到第二级高速缓冲存储器208中,最后被装载到L1 I高速缓冲存储器205或L1 D高速缓冲存储器206中。根据设计,也可能在装载数据时绕过高速缓冲存储器层,例如从第三级高速缓冲存储器直接向第一级高速缓冲存储器中装载数据。在所述优选实施例中,多个处理器共享第三级高速缓冲存储器401,并且在系统100中可能存在多个第三级高速缓冲存储器。优选的是,第三级高速缓冲存储器被多达四个处理器共享,虽然在图4中仅示出了两个。在物理上,L3高速缓冲存储器被封装得比主存储器更靠近它所关联的处理器。例如,第三级高速缓冲存储器和它服务的处理器可以被封装在共同的印刷电路板上,或者甚至被封装在共同的集成电路芯片上。
来自存储器中的页表402或段表403的数据可以直接被装载到TLB 218或SLB 217中而绕过通用高速缓冲存储器。还可以向第三级高速缓冲存储器401中装载页表数据,并且从第三级高速缓冲存储器填充TLB。TLB比SLB大得多,它经常用于高速缓存TLB数据。SLB很小,以至于在第三级高速缓冲存储器中高速缓存SLB数据是不必要的。
在越高的层(越靠近处理器),高速缓冲存储器变得更快,并且存储越少的数据。在此所述的示范实施例中,在典型的大型计算机系统中,每个第一级高速缓冲存储器具有128字节大小的高速缓冲存储器行,存储64KB数据,并且需要3个周期来存取。第二级高速缓冲存储器具有256字节大小的高速缓冲存储器行,存储2MB数据,并具有20个周期的存取时间。第三级高速缓冲存储器具有512字节大小的高速缓冲存储器行,存储32MB数据,并具有100周期的存取时间。对于主存储器的存取时间更慢,可能接近1000个周期。但是可以明白,这些参数仅表示在使用当前技术的大型系统中的典型高速缓冲存储器。这些典型的参数可以随着技术的发展而改变。较小的计算机系统一般具有相应较小的高速缓冲存储器,并具有较少的高速缓冲存储器层。本发明不限于任何特定的高速缓冲存储器尺寸、存取时间、高速缓冲存储器行的大小、高速缓冲存储器层的数量、是否高速缓冲存储器在特定层被多个处理器共享或被专用于单处理器、或者类似的参数。
除了可执行的程序代码和由应用程序操纵的其它数据之外,存储器102还包括用于支持地址翻译的某些数据结构。特别是,存储器包括页表402和多个段表403A-403C(在此统称为部件403)。图4中图解了三个段表,可以明白段表的数量可以不同,并且通常大得多。页表402用于记录向当前在主存储器102中的实际页面的虚拟地址范围的分配。页表402还包括用于支持操作系统页面算法和其它功能所需要的数据。具体上,页表402包括用于支持预取的、页面的可高速缓存子单元的引用历史数据,如以下更详细所述。段表403记录在有效地址中的段ID到在虚拟地址中的段ID的分配。因为每个执行任务具有其本身的、从有效地址向虚拟地址的映射,并且不同任务的有效地址可以重叠(虽然虚拟地址是唯一的,并且不重叠),因此每个任务具有其本身的段表403。
在运行中,每个SLB 217高速缓存来自对应于SLB定位其中的处理器正在执行的任务的段表403的信息,用于将有效地址翻译为虚拟地址。每个TLB 218高速缓存来自页表402的信息,用于将虚拟地址翻译为实际地址。ERAT 207是较高层的寻址高速缓冲存储器,包括用于直接将有效地址翻译为实际地址的项。这些项是使用来自TLB 218和SLB 217的信息构造的。
图5是页表402结构的图示,示出了某些重要部件,其中包括用于页面的可高速缓存子单元的历史引用数据。参见图5,页表402包括多个页表项(PTE)501。在运行中,页表用于响应于输入虚拟页号(即,虚拟段ID 314和页号312的连接)而提供实际页号315。索引机制502确定与输入的虚拟地址的虚拟页号部分对应的页表项。索引机制的操作细节与本发明不相关,并且可以使用现在已知的或以后开发的任何形式的页表索引。
每个页表项包括虚拟页号字段511、实际页号字段512、各种附加的控制和维护数据513、高速缓冲存储器行引用计数器阵列514、页引用计数器516。在阵列514内的每个计数器515是3位的计数器,分别对应于由页表项引用的实际页面各可高速缓存子单元。在所述优选实施例中,页面大小是4KB,每个阵列514包括16个计数器515,每个计数器对应于256字节的可高速缓存的子单元。例如,在阵列514中的第一个3位计数器515对应于字节地址范围(在页面内的字节地址313的范围)′000′X到′0FF′X;阵列514中的第二个3位计数器对应于字节地址范围′100′X到′1FF′X,等等。可以观察到,在这个实施例中,可高速缓存子单元的大小与第二级高速缓冲存储器行的大小相同。但是,可高速缓存的子单元也可以更大或更小,并且可以是第一级高速缓冲存储器、第三级高速缓冲存储器行的大小或一些更大的尺寸。页面引用计数器516是对应于整个页面的计数器(优选的是3位)。
计数器515和516表达了历史数据引用模式。在所述优选实施例中,每个计数器是升或降计数器,它在发生某些事件时增量,而在发生其它事件时减量。计数器不能被增量到超过其上限(例如‘111’B)或被减量到低于其下限(‘000’B)。优选的是,如果作为高速缓存未中的结果、对应的高速缓冲存储器行被请求装载到高速缓冲存储器中,或者如果对应的高速缓冲存储器行被预取到高速缓冲存储器中并在以后被从高速缓冲存储器存取,则行引用计数器515增量。如果对应的高速缓冲存储器行被预取到高速缓冲存储器中,但是在被从高速缓冲存储器删除之前未被处理器存取,则行引用计数器减量。如果对于页面存在ERAT未中,或如果页面的项被预取到ERAT中并且随后用于引用数据,则页面引用计数器516增量。如果页面项被预取到ERAT中但是未被使用,则页面引用计数器减量。因此,计数器作为反馈机制,通过增量计数器来“奖赏”正确的预取猜测,而通过减量计数器来“惩罚”不正确的猜测。
在所述优选实施例中,所有的增量和减量是1,但是其它的值也可以用于调整预取的数量。例如,如果增量的量大于减量的量,则计数趋向于较大,并且较多的行或页面将满足预取的标准,而如果增量的量小于减量的量,则较少的行或页面将满足标准。
优选的是,当在存储器中建立页表项时,行引用计数器515被初始化为零。可以选择当删除页表项(在下面的页面被调出)时将这些存储到存储器中,并且当对于同一虚拟存储器空间建立新的项时从存储器检索它们。但是,由于许多引用模式的迅速改变的特性,尤其是当引用商业交易数据时,不清楚在保存这些数字中存在足够的附加益处来判断附加的存储器存取。页面引用计数器516被初始化为段表阵列716中对应的页面计数器718的值——如果它存在的话;如果不存在这样的项,则页面计数器也被初始化为零。
图6是TLB 218的结构的图示。TLB实质上是某些页表数据的高速缓冲存储器。参见图6,TLB 218包括多个页地址项(PE)601,它们被布置在使用虚拟地址的散列函数来寻址的行602中。通常,散列函数包括虚拟页号的若干低序位。在每行602中的项601的数量是TLB的关联性(associativity)。在所述优选实施例中,TLB 218具有关联性8,可以明白,这个数可以不同。
每个项601包括虚拟页号字段611、实际页号字段612、各种附加的控制和维护位613(诸如最近最少使用的(LRU)位,用于确定当需要装载新的项时去除哪个项)、行引用计数器615的阵列、页面引用计数器616和页面重写标志位(dirty bit)617。通常,虚拟页号611仅仅包括虚拟页号的不包括在散列函数中使用的位的部分,因为那些位是冗余的。通过下述方式来确定对应于虚拟地址的页面项使用散列值来选择TLB行,并且将每个被选择的项的虚拟页号611与虚拟地址的剩余位相比较以找到正确的项。如果没有项相匹配,则地址不在TLB中(TLB未中),并且必须从主存储器(或高速缓冲存储器)装载。虽然图6中(类似地在图8、9和10中)示出了通常使用的相关索引方案,可以使用索引方法。
在阵列614内的每个行引用计数器615是与由页面项引用的实际页面的相应可高速缓存子单元对应的3位计数器。当页面项被装载到TLB 218中时从在页表402中的对应页表项获得计数器615和616,并且它们分别与在页表项内的计数器515和516具有相同的意义。
图7是存储器中段表403结构的图示,示出了某些重要的部件,其中包括用于在段中选择页面的历史引用数据。在所述优选实施例中,对于在系统100中执行的每个任务存在独立的段表403。参见图7,段表403包括多个段表项(STE)701。在运行中,段表用于响应于输入的有效段ID来提供虚拟段ID 314,该输入有效段ID与段表403对应的执行任务相关联。索引机制702确定对应于输入有效段ID的段表项710。索引机制的操作细节与本发明无关,可以使用任何形式的索引。
每个段表项701包括有效段ID字段711、虚拟段ID字段712、各种附加的控制和维护数据713、自动引用使能位714、页面重写标志位720和页面引用历史阵列716。阵列716包括多个页号717(每个16位),和各相应的页面引用计数器718。每个页面引用计数器718最好是3位计数器。
在阵列716中的页号717表示在对应于段表项的虚拟段ID内的可能的预取目标页。当初始要求存取段表项时,启动在阵列中的页号预取,如在此更详细所述。页面引用计数器与页表中的页面引用计数器516具有相同的意义,并且可以用于段表维护和/或预取决策。
在段表项中的页号阵列可以被类推到在页表项中的页面的可高速缓存子单元。但是,与可高速缓存子单元不同,页号的列表很稀疏。即,在每个段中存在64K的页面,但是这些页面中仅有小部分被表示在阵列716中。典型的任务在每个段中存取较小量的页面,即10-20个页面。在阵列716中的页面列表意欲表示页号的这个小子集。理想上,阵列716包括由任务使用的所有页号。但是,难于在不对阵列716的大小施加一些固定限制的情况下实现段表,这必然意味着,对于一些任务,阵列716可能不包括由该任务使用的所有页面。在所述优选实施例中,阵列716包括8个页号和8个对应的页面引用计数器。优选的是,将页号阵列与其它段表数据一起存储在存储器中,并且当建立或填充段表时将页调入存储器中。页面阵列因此而具有长的生命周期。
在阵列716中的页号列表可由处理器101自动维护,或由一些用户定义的软件算法维护。段表仅仅是在存储器中的数据结构,它可以被软件改变。用户可能希望执行他自己的对任务执行的分析以确定可能要引用哪些页面。在数据库和类似数据的情况下,这样的分析一般是不实用的,但是在程序指令的情况下,对典型执行路径的分析可以提供对于要存取的页面的准确预测,由此可以产生在阵列716中的页面列表。如果用户产生这样的列表,则他可能希望防止处理器改变它。自动引用使能位714用于指定由处理器对阵列716的自动维护。当这个位被复位时,处理器将不改变阵列716中的项。当这个位被置位时,处理器将按照所感知的引用模式自动更新阵列716。简而言之,处理器以被要求装载到高速缓冲存储器中的前8个页面来初始装载阵列716。随后,当新页面被要求装载到ERAT的任何时间,将其页面引用计数器与阵列中页面的页面引用计数器相比较,并替换掉具有较低引用计数的页面。在此更详细地描述这个过程。
图8是SLB 217结构的图示。SLB实质上是来自段表403的特定数据的高速缓冲存储器。参见图8,SLB 217包括多个段ID项(SE)801,它们排列在行802中,其中使用有效段ID的散列函数来寻址行802。典型地,散列函数包括有效段ID的若干低序位。在每行802中的项801的数量是SLB的关联性。在所述优选实施例中,SLB 217具有关联性8,应当明白这个数量可以改变。
每个项801包括线程ID字段811、有效段ID字段812、虚拟段ID字段813、各种附加控制和维护数据814(诸如LRU位,用于确定当需要装载新的项时去除哪个项)、自动引用使能位815、页面索引指针816、页面重写标志位820、以及页面引用历史阵列817。有效段ID 812仅仅包括未被用于散列函数的ID的部分,因为那些位是冗余的。通过下列方式来确定与输入的有效段ID对应的段ID项使用散列值来选择SLB行,并且将在所选择的行中的每个项的线程ID 811和有效段ID 812与产生引用的线程的ID和引用的有效段ID的剩余位相比较。如果没有项匹配,则地址不在SLB中(SLB未中),并且必须从主存储器中的段表装载。
页面引用历史阵列817包括在虚拟地址段内的一组页号818和对应的页面引用计数器819。页号818和计数器819在段项801被初始地装载在SLB 217中时被从段表403中的对应段表项复制,并且分别与段表项内的页号717和计数器718具有相同的作用。
图9是ERAT 207的结构的表示。ERAT 207是高速缓存的、有效地址到实际地址的翻译,它是从SLB 217和TLB 218得到的。像SLB 217和TLB 218一样,ERAT 207是使用散列函数寻址的相联高速缓冲存储器。参见图9,ERAT 207包括多个页地址项(PE)901,它们被排列在使用散列函数寻址的行902中,散列函数典型地包括若干有效页号的低序位,优选的是,ERAT 207具有关联性4,可以明白这个数量可以是不同的。
每个项901包括线程ID字段911、有效页号字段912、实际页号字段913、用于确定要去除那个项的LRU位914、预取位(P位)阵列915、单个页面引用位916。优选的是,单个ERAT 207被当前在处理器101中执行的所有线程共享,并且因为不同线程的有效地址空间可能重叠,因此要求线程ID 911识别ERAT项对应的线程。在优选实施例的2线程处理器中,线程ID 911是单个位。可以明白,还可以对每个线程使用独立的ERAT,在这种情况下,线程ID是不必要的。优选的是,有效页号字段912仅包括有效页号中不包含在散列函数中使用的位的那个部分,因为那些位是冗余的。通过下列方式来确定与有效地址对应的页面项使用散列值来选择ERAT行902,并且将每个所选择的项的有效页号912与有效地址的剩余位相比较以找到正确的项。如果没有项匹配,则地址不在ERAT中(ERAT未中),并且必须从TLB和SLB(或从在主存储器中的表)装载。
在阵列915中的各单个P位分别对应于页面项引用的实际页面内的每个可高速缓存子单元。该P位用于确定是否预取对应的可高速缓存子单元(它等同于第二级高速缓冲存储器的单个高速缓冲存储器行)。该位当页面项被装载到ERAT中时被设置为适当的值,并且在ERAT中时不改变。如果计数器615等于或超过某个门限,则该位被设置为1(指示数据应当被预取),其中计数器615对应于从其得到ERAT页面项的、TLB项601中的同一可高速缓存子单元。在一个简单的实施例中,所述门限被固定在1,以便在计数器非零的任何时间,将对应的P位置位,用于指示应当预取该可高速缓存子单元。但是,该门限也可以是可变的。
页面引用位916用于记录ERAT页地址项901是否已实际上被引用,即处理器是否已经产生对于在ERAT页地址项所对应的有效页面内的地址的任何引用。页面引用位916当项被装载到ERAT中时被设置为0,随后根据数据引用而被更新。
图10是按照优选实施例的、第一级高速缓冲存储器的结构的表示。L1 I高速缓冲存储器205和L1 D高速缓冲存储器206的结构是类似的,都可以用图10表示,除了L1 I高速缓冲存储器通常不要求页面重写标志位1013,指令通常不可写入L1 I高速缓冲存储器中。参见图10,第一级高速缓冲存储器包括高速缓冲存储器数据表1005和索引1004。数据表1005包括多行数据1001,它们在所述优选实施例中各包含128字节。索引1004包括索引项1002的行。每个索引项包括一个高速缓冲存储器行的实际地址和某些控制位,特别是引用位1012、页面重写标志位1013和LRU位1014。通过下列方式来引用一个高速缓冲存储器行对所期望数据的实际地址的一部分进行散列(hashing)以获得索引行1003,将该行中的索引项的实际地址与输入的被引用地址相比较,并且如果存在匹配则选择与该行和索引项位置对应的高速缓冲存储器行。
引用位1012用于指示一个高速缓冲存储器行是否已经被引用。该位当所述行初始装载时被置为0,而如果所述行在高速缓冲存储器中时曾经被引用则被置为1。在响应于高速缓存未中而装载的情况下,根据硬件实现方式,该位可以被立即置为1而不用首先被置为0。除了引用位1012,第一级高速缓冲存储器的元素都是传统的。
图11是按照所述优选实施例的预取引擎220的结构的图示,其中示出了预取引擎如何与各种其它硬件交互。在所述优选实施例中,预取引擎具有用于执行两个独立但是相关联的功能的硬件。第一功能将数据预取到高速缓冲存储器,诸如第一级或第二级高速缓冲存储器。第二功能将地址翻译信息预取到地址翻译结构,特别是ERAT 207。虽然按照所述优选实施例在单个机器中实现这两个功能,但是本发明不必须要求实现在此所述的第二功能。第二功能是下述DavidA.Luick的相关共同待决申请的主题序号____,题目为“Apparatus and Methodfor Pre-Fetching Page Data Using Segment Table Data(用于使用段表数据预取页面数据的装置和方法)”(受让方的编号ROC920030255US1),与本申请在同一日期被提交。
参见图11,对于页面内的高速缓冲存储器行ERAT项包含一组预取位915。当一个新项被装载到ERAT中时,或在一些情况下,当第一次引用现有的ERAT项(先前已经被装载)时,实际地址和对应的P位被放置在高速缓冲存储器行预取队列1101中。在所述优选实施例中,高速缓冲存储器行预取队列是FIFO队列,其中保有16个实际地址和对应的P位组,尽管这个数可以不同。
预取引擎以低优先级运行以盗取通常不使用的总线周期。当总线空闲时,在屏蔽寄存器1102中使用P位的增量硬件1103中和屏蔽指针1104中产生地址增量。屏蔽指针1104增加1,如果对应于屏蔽指针的值的屏蔽寄存器1102的位位置是′1′,则地址产生器1106将来自寄存器1105的实际页号与屏蔽寄存器值和与′00′X的固定低位值连接,以产生在256字节边界上的实际地址,即一个第二级高速缓冲存储器行或一对第一级高速缓冲存储器行的地址。该地址被输入到高速缓冲存储器行提取请求器1107,它启动向被寻址的高速缓冲存储器行的高速缓冲存储器装载。
预取引擎的另一部分向页面预取寄存器1110中复制一个SLB项。选择器1112根据当前页面索引从SLB项的页面引用列表中选择一个页面。将所选择的页地址与其对应的虚拟段ID连接以形成虚拟页地址来供ERAT预取请求器1111预取。ERAT预取请求器启动从TLB(或在必要时的页表)预取对应的ERAT项。一旦一个页地址项被预取到ERAT,则所述ERAT项可以使得预取引擎启动页面中所选择的高速缓冲存储器行的高速缓冲存储器行预取。
在所述优选实施例中,高速缓冲存储器行提取请求器1107可以向选择的高速缓冲存储器层装载。数据被装载到的高速缓冲存储器层可以依据不同的因素,诸如机器状态、数据类型、什么引起预取行为、页面引用计数等。在在此所述的示范实施例中,对于商业交易处理通常是,如果从其得到预取地址的ERAT项在未实际被引用的情况下被预取到ERAT,则数据被装载到第二级高速缓冲存储器中,如果ERAT项被请求装载(即响应于ERAT未中而被装载)、或如果它早期被预取并且已经第一次被引用,则数据被装载到第一级高速缓冲存储器中。但是,在诸如科学计算的特定类型的应用中,以高速缓冲存储器行的粒度进行有意义的预取要困难得多。在这样的环境中,优选的是向诸如第三级高速缓冲存储器这样的某些较低的高速缓冲存储器层预取较大的数据块(诸如一个页面或更多)。为此,屏蔽寄存器1102具有替代输入′FFFF′X,它具有预取在一个页面中的所有高速缓冲存储器行的效果。典型地,当一个页面的所有高速缓冲存储器行被预取时,它们不被预取到第一级高速缓冲存储器,而是被预取到较低层的高速缓冲存储器。预取的进一步的变化可以依据数据类型而改变预取的层或粒度。一般,指令数据比数据库或类似的数据更可以被预测,并且可以被更积极地预取(即预取到较高的层)。预取的其它变化可以根据页面引用计数来改变预取的层或粒度。高引用计数意味着,一旦一个页面被装载到ERAT中,则它通常被引用。在这种情况下,诸如到第一级高速缓冲存储器的较高层的高速缓冲存储器预取可以相对于低页面引用计数的情况更为合理。按照本发明的预取引擎可以单独地或组合地实现任何一个或所有的这些变化,或可以实现其它变化。
图12-18是图解按照所述优选实施例的、由各种系统部件执行来支持数据的高速缓冲存储器寻址和预取的步骤。虽然图12-18是以流程图的形式,但是可以明白,在所述优选实施例中,这些步骤由硬件部件执行。还可以明白,在实际实施例中,某些步骤与其它步骤被并行执行,这些步骤可能以与所图示的不同的次序被执行,并且在附图中所示的步骤的次序仅用于容易理解逻辑流程,而不必然意味着指示时间关系。在流程图中所示的一些步骤是常规的,但是仍然被示出以提供用于本发明的上下文环境。还可以明白,为了清楚起见,省略了对于理解本发明不必要的一些步骤。
参见图12,处理器101产生数据引用的有效地址(方框1201),它可以是它所要求的指令的地址、或作为操作数要被装载到寄存器中的数据的地址、或要从寄存器存储回存储器中的数据。处理器产生有效地址的散列函数以存取ERAT 207的行902以获得实际页号(方框1202)。在被存取的行中的项901被与有效地址相比较以找到匹配(方框1203)。如果未找到匹配(ERAT未中),则从方框1203取“是”分支到方框1204。在这种情况下,所需要的ERAT项901必须被产生和装载。ERAT项的产生和装载在图12中被图示为方框1204,并且在图14中更详细地被图解。
如果所需要的地址在ERAT中(从方框1203的“否”分支),或在如图14所示将其装载到ERAT中后,处理器使用来自ERAT项的实际页号的若干位来存取可用的第一级高速缓冲存储器(I高速缓冲存储器205或D高速缓冲存储器206,视情况而定)的一行(方框1205)。如果所需要的数据不在第一级高速缓冲存储器中,则从方框1206取“否”分支。在这种情况下,必须从更低层高速缓冲存储器或从存储器获得所需要的数据。获得和向第一级高速缓冲存储器装载所需要的数据在图12中被示为方框1207,并且在图13中被更详细地图解。
在获得第一级高速缓冲存储器中正确的数据项后,处理器执行所需要的操作,例如向指令缓冲器或寄存器装载数据,或将寄存器中的数据存储到第一级高速缓冲存储器(方框1208)。处理器还置位第一级高速缓冲存储器被存取行的引用位1012和ERAT中被存取页面的引用位916(方框1209)。这些位用于指示事实上已对对应的高速缓冲存储器行或页面进行了引用。处理器还在必要时更新第一级高速缓冲存储器行的LRU位1014和/或页面重写标志位1013(方框1210)。这最后三个操作可以同时或以任何顺序被执行。数据引用于是结束。
如果在方框1206所需要的数据不在第一级高速缓冲存储器中,则它将被装载到第一级高速缓冲存储器。这个过程被示出在图13中。
参见图13,在第一级高速缓冲存储器中存在高速缓存未中的情况下,处理器需要做两件事情为第一级高速缓冲存储器获得一个包含所请求的数据引用的数据行,和去除一现有的高速缓冲存储器行以为新数据腾出空间。这两个操作可以同时或并行进行,如图13所示。
为了去除现有行,首先使用任何可用的方法来选择一行以去除,在优选实施例中采用的方法是由LRU位1014指示的最近最少使用项(方框1301)。如果被选择去除的行中的引用位1012被置位(方框1302的“是”分支),则处理器将与要被去除的高速缓存的行对应的、TLB 218中的引用计数器615增量(方框1303)。如果引用位1012未置位(方框1302的“否”分支),则处理器将TLB中的对应引用计数器615减量(方框1304)。虽然TLB存取可能较慢,但是引用计数器的更新仅仅影响保存在TLB中的记录,而其它操作、特别是向第一级高速缓冲存储器装载新数据则不必等待引用计数器更新的完成。如果被选择去除的行中的页面重写标志位(dirty bit)1013被置位(方框1305的“是”分支),则所选择的行被写出到第二级高速缓冲存储器(方框1306)。如果页面重写标志位未被置位(数据还未被改变),则绕过方框1306。优选的是,L1 I高速缓冲存储器不包含页面重写标志位,因此在L1 I高速缓存未中的情况下,跳过步骤1305和1306。
为了获得新数据,从ERAT先前获得的实际地址被用于存取第二级高速缓冲存储器。如果所需要的数据在第二级高速缓冲存储器中(方框1307的“是”分支),则数据被立即提取并装载到第一级高速缓冲存储器的所选择的行中(方框1313)。如果数据不在第二级高速缓冲存储器中,则处理器查看第三级高速缓冲存储器(方框1308),如果数据在那里则从第三级高速缓冲存储器装载数据(方框1312),并且继续。如果数据不在第三级高速缓冲存储器中(方框1308的“否”分支),则存取主存储器。如果数据在主存储器中(方框1309的“是”分支),则将其装载到第三级高速缓冲存储器中(方框1311),然后装载到第二级高速缓冲存储器中(方框1312)和第一级高速缓冲存储器中(方框1313)。如果所请求的数据不在主存储器中(方框1309的“否”分支)。则产生一个页面错误(方框1310)以从存储器获得数据。由于从存储器获得数据的长等待时间,执行的任务一般被换出。
与提取和向第一级高速缓冲存储器装载新数据同时,查看ERAT中被引用页面的页面引用位916(方框1314)。如果该位被复位,则当前数据引用是自从装载ERAT项起对该页面的第一次数据引用。即,作为预取行为装载ERAT项。一般,在这种情况下,页面内的数据被预取到第二级或更低的高速缓冲存储器。既然发生了对页面的实际引用,因此更紧迫地需要同一页面其它高速缓冲存储器行中的数据,于是应当将其预取到第一级高速缓冲存储器。因此,启动预取引擎,这在图13中示为方框1315,并且在图17中更详细地被示出。预取引擎以低优先级运行,它可能需要等待其它操作以实际完成数据的预取。
在次参见图12,如果在方框1203在ERAT 207中不能找到引用的有效地址,则必须将地址装载到ERAT。该过程被示出在图14中。与高速缓存未中类似,处理器需要去除一现有的ERAT项以为新的项腾出空间,并且通过存取SLB 217和TLB 218来产生一新的ERAT项。这两个操作可以同时或并行进行,如图14所示。
为了去除现有的ERAT项,首先使用LRU位914选择一个项以去除(方框1401)。如果在所选择的项中的页面引用位916被置位(方框1402的“是”分支),则处理器将对应于要被去除的页面项增量TLB 218中的页面引用计数器616(方框1403)。如果引用位916未被置位(方框1402的“否”分支),则处理器将TLB中的对应页面引用计数器616减量(方框1404)。
为了产生和装载新的ERAT项,将处理器产生的数据引用的有效段ID用于索引SLB 217中的项(方框1405)。如果所需的段在SLB中(方框1406的“否”分支),则SLB项被用于将有效段ID翻译为它的对应的虚拟段ID,它然后被用于索引TLB 218中的项(方框1408)。如果段不在SLB中(方框1406的“是”分支),则所需的SLB项将首先被从在主存储器中的段表403装载到SLB中(在图14中被示为方框1407,在图15中更详细地被示出)。
在索引TLB中的项时,如果所需的页地址在TLB中(方框1409的“否”分支),则根据TLB和SLB中的信息建立ERAT项,并将其装载到在ERAT中选定的位置(方框1411)。如果页地址不在TLB中(方框1409的“是”分支),则所需的TLB项将被首先从页表402装载到TLB中(在图14中被示为方框1410,在图16中更详细地被示出),其后建立和装载ERAT项(方框1411)。
在以新的项装载ERAT时,处理器继续执行到方框1205以尝试存取第一级高速缓冲存储器。虽然这被示出为附图中的下一个逻辑步骤,但实际上,ERAT未中几乎总是也意味着高速缓存未中,并且在一些处理器的设计中,可能在ERAT装载结束之前在高速缓存未中的假设下开始取数据到第一级高速缓冲存储器中。
与装载ERAT同时,在必要时更新SLB中的页面引用历史阵列817(方框1412)。即,如果自动引用使能位815被置位,则将被装载到ERAT中的页地址与SLB中的阵列项相比较。如果阵列817中已经有被装载到ERAT中的页面,则其页面引用计数器819通过下述方式被更新从TLB 218中取出页面引用计数器616并且将其增量,以说明ERAT未中(TLB中的计数器616此时不被更新)。如果在阵列817中未已有该页面,则将对于被装载页面的、TLB 218的页面引用计数器616的增量值与当前在阵列817中的页面引用计数器819相比较以确定是否在阵列817中的任何页面应当被替换为装载到ERAT中的页面。如果被装载的页面的页面引用计数器的增量值大于阵列817中任何页面的页面引用计数器819,则具有最低计数器值的页面在阵列817中被替换为装载到ERAT中的页面。以这种方式,页面引用历史阵列处于持续的维护下,并且将响应于实际的数据引用模式而改变。
理想地,阵列817中的页面次序对应于由执行的任务使用页面的顺序。可以单独或组合地使用两种可能的技术来保持正确的顺序。在第一种技术中,如果由于ERAT未中而被调入ERAT中的页面已经在列表上,则可以假定它未被足够快地预取。在这种情况下,它在列表上的位置与该列表中紧在其前的项交换。随着时间的连续交换将趋向于在该列表中将较早引用的页面向前移动。在第二种技术中,当向阵列817增加新的页面时,该页面被插入到与页面索引指针816的当前值对应的位置,将其它页号根据情况向右或左移动覆盖要被替换的页面项所需要多的位置。页面索引指针通过页号阵列817指示向ERAT预取的进程。在当前页面索引指针之前的页面已经被预取到ERAT中(或至少已经开始了预取)。在当前页面索引指针之后的页面还没有被预取。因此,页面索引指针的当前值提供了页面预取序列中新页面次序的大致近似。这两种技术都需要附加的硬件支持,并且被考虑为选用的特征。
在方框1411向ERAT装载数据还启动了预取引擎,这在图14中被示出为方框1413,并且在图17中更详细地被示出。预取引擎以低优先级工作,它可能必须等待一些时间来实际完成数据的预取。
如果在方框1406所需要的段项不在SLB 217中,则该项必须被装载到SLB中。这个过程被示出在图15中。与ERAT未中的情况类似,处理器需要为新的项腾出空间,并且通过存取主存储器中的段表403来产生新的SLB项。这两个操作可以同时或并行进行,如图15所示。
因为通常仅仅存在少量有效段项,因此在SLB中可能存在未使用的空间用于装载新项,在这种情况下,方框1502-1504被绕过。如果在SLB中没有未使用的空间,则自方框1501采取“否”分支。处理器然后使用控制位815来选择要去除的SLB项,控制位815可能是LRU位或支持一些其它去除技术的数据(方框1502)。如果页面重写标志位820被置位(方框1503的“是”分支),则被选择来去除的SLB项将被首先存储到主存储器中对应的段表403中(方框1504)。页面重写标志位可能因为当项在SLB中时页面引用历史阵列817被更新而被置位。如果页面重写标志位未被置位,这不必进一步作出任何事情来去除SLB项;新项将覆盖旧项。
为了获得SLB 217的新项,使用数据引用的有效段ID来存取与引起SLB未中的执行线程对应的、主存储器中的段表403(方框1505)。如果所需要的段表项不在段表中(方框1506的“否”分支),则必须从存储器首先装载该段表项,并且产生缺页,它一般使执行的任务被换出(方框1507)。实际上,因为由典型任务使用的段项的数量较小(经常仅仅占用单个页面),因此通常当启动一个任务时在段表中装载该任务的所有段项,以使通常不发生后续的缺页。但是,存在一些具有广泛引用模式的应用,其中可能出现段表中的页面错误。假定所需要的项在段表中(方框1506的“是”分支),则它被装载到SLB(方框1508),并且处理器继续到图14的方框1408以尝试访问TLB。
在向SLB中装载新的项时,启动预取引擎的ERAT预取功能,这在图15中被表示为方框1509,并且在图18中被更详细地示出。ERAT预取功能使用新装载的SLB项的页面引用阵列817预取页面项到ERAT中,如在此更详细地所述。这个功能以低优先级工作,并且可能需要在完成前等待其它事件。
再次参见图14,如果在方框1410所需要的页面项不在TLB 218中,则该项必须被装载到TLB。这个过程被示出在图16中。与ERAT未中的情况类似,处理器需要为新的项腾出空间,并且通过存取存储器中的页表401或第三级高速缓冲存储器中的页表的被高速缓存的部分来获得新的TLB项。这两个操作可以同时或并行进行,如图16所示。
处理器按照任何常规技术使用控制位613和/或其它数据来选择要去除的TLB项(方框1601)。如果页面重写标志位617被置位(方框1602的“是”分支),则首先存储被选择来去除的TLB项。作为页面引用计数器616和/或行引用计数器615改变的结果,页面重写标志位将经常被置位。如果页面重写标志位被置位,则处理器确定TLB项是否在第三级高速缓冲存储器中(方框1603)。如果是,则所选择的项被写出到第三级高速缓冲存储器中的页表的某部分(方框1604);否则,它被写出到在主存储器中的页表(方框1605)。如果页面重写标志位未被置位,则不必在方框1602后进一步进行任何事情以去除TLB项,因为新的项将覆盖旧的项。
为了获得TLB 218的新的项,处理器使用虚拟页号(来自SLB的虚拟段ID和由处理器产生的页号)来试图存取在第三级高速缓冲存储器中的页表项(方框1606)。如果页表项不在第三级高速缓冲存储器中(方框1607),则处理器试图存取在主存储器中的该项(方框1608)。如果该项不在主存储器中(方框1609),则产生页面错误,并且执行的任务被换出(方框1610)。如果从主存储器返回该页面项(方框1609的“是”分支),则它可以可选地被装载到第三级高速缓冲存储器中(方框1611)。不论是从第三级高速缓冲存储器还是主存储器返回,页表项都将响应于虚拟页号被作为新的页面项装载到TLB中(方框1612),并且处理器继续到图14的方框1411。
在优选实施例中,在ERAT未中时,和在某些第一级高速缓存未中时,预取引擎220被“启动”,以便预取高速缓冲存储器行,如在图13中的方框1315和在图14中的方框1413所示。“启动”预取引擎以预取高速缓冲存储器行意味着一项被加入到高速缓冲存储器行预取队列1101。预取引擎以先入先出的顺序来从该队列检索项。由处理器、特别是由预取引擎所采取的预取高速缓冲存储器行的步骤被更详细地示出在图17中。
参见图17,预取引擎在方框1701等待直到在预取队列1101中存在至少一个页地址项。虽然方框1701被示出为软件典型的空循环,但是可以明白,因为预取引擎是硬件,因此它仅仅在一个信号存在时响应它并且在其不存在时不响应它。在队列1101中的每个页地址项包括从ERAT项得到的数据,特别是实际页号和P位阵列916。队列项最好包括至少一位,用于指示预先装载的目的高速缓冲存储器。特别是,在所述优选实施例中,作为在被预取的页面上任何位置的ERAT未中或第一级高速缓存未中的结果被启动的预取导致到第一级高速缓冲存储器的预取,而作为基于段表数据的到ERAT的预取项的结果被启动的预取则导致到第二级高速缓冲存储器的预取。队列项还可以包括其它数据,用于更复杂的预取决定。
如果在队列中存在项,则最旧的项被选择并装载到实际页面寄存器1105和屏蔽寄存器1102(方框1702)。屏蔽指针1104初始被设置为0。如果屏蔽指针指向的屏蔽寄存器1102中的屏蔽位是“1”(方框1703),则地址产生器1106将来自寄存器1105的实际页地址与屏蔽指针值和与′00′X的固定低序位值连接,以产生预取地址(方框1704)。这个预取地址是在256字节边界上的实际地址,即一个第二级高速缓冲存储器行或一对第一级高速缓冲存储器行的地址。
高速缓冲存储器行预取请求器1107然后等待直到它被授权进行预取操作(方框1705)。高速缓冲存储器预取应当发生在后台,而不严重中断其它行为。预取仅仅是预测的,自然必须比响应于实际高速缓存未中的数据提取操作采取更低的优先级。因此,如果其它数据提取操作正在使用可用的总线或其它资源,则预取请求器将等待。而且,因为预取操作通常需要多个资源和多个周期来完成,因此不总是可能提前确定预取是否将使其它操作在随后的周期内空闲。为了避免对其它处理的过多干扰,按照任何现在公知的或以后开发的调步技术,最好将预取操作“调步”。调步仅仅意味着对预取操作的频率有一定的限制,即使资源看起来可以获得以满足预取的请求。在简单的调步技术中,提取请求器将等待直到自最后预取操作被分派起、预定的周期计数已经过去。
当提取请求器被授权执行时,它使用先前产生的预取地址(方框1706)和用于指示预取目的的队列中的位来分派预取请求。分派请求意味着产生信号,使得在被请求的地址的数据被提取到指定的高速缓冲存储器。一般,这遵循与任何其它数据提取相同的过程。
在分配预取请求时(或如果方框1704-1706由于在方框1703屏蔽位是′0′而被绕过),屏蔽指针被增量(方框1707)。如果增量不引起指针转向0(方框1708的“否”分支),则预取引擎继续到方框1703以处理当前页中的下一个高速缓冲存储器行。如果指针转向0(方框1708的“是”分支),则在当前页中的所有高速缓冲存储器行已经被处理,并且预取引擎返回方框1701。
在所述优选实施例中,预取引擎还执行到ERAT的页面项预取,这可以进一步触发在这些页面内的高速缓冲存储器行项的预取。通过预取SLB项中页面引用历史阵列817中的页面来完成向ERAT预取页面项。被选择来用于启动预取的SLB项在循环的基础上旋转。即,每个SLB项可以指定多个阵列817中的虚拟页面,其中每个虚拟页面是可能的预取目标。预取操作被从第一SLB项分派,然后选择下一个SLB项,并且从其分派下一个操作。具有未完成的预取页面的每个相继的SLB项将被选择,并且在返回到第一SLB项之前使得一个操作被分派。
用于提取页面项的预取引擎的“开始”仅仅意味着在SLB项中的一些控制位或其它信息被置位,用于指示可以获得来预取到ERAT的页面。在适当的时候,SLB项应当被选择,并且在阵列817中的其页地址的一个或多个被预取到ERAT。图18中更详细地示出了由处理器、特别是预取引擎用于预取页面项而采取的步骤。
参见图18,预取引擎在方框1801等待直到在SLB中存在至少一个段项具有到预取队列的页面。虽然方框1801被示出为软件中典型的空循环,但是可以明白,因为预取引擎是硬件,因此它仅仅在一个信号存在时响应它而如果它不存在则不响应它。在典型的操作中,当一个任务开始时,一个段表立即被装载,并且多个项将被放置到SLB中以启动该任务。这多个项将初始建立预取操作的积压待办事项。
如果在SLB中存在至少一个用于预取的项,则下一个项被选择(方框1802)。选择以循环的方式工作,并且可以例如通过下列方式来完成增量SLB中的指针,并且查看适当的位以看是否存在任何未完成的页面预取操作。所选择的项被装载到寄存器1110。
选择器1112从在所选择的项中的页号阵列818选择虚拟页号(方框1803)。所选择的虚拟页号是对应于页面索引指针816的值的数量。于是通过将选择的项的虚拟段ID、所选择的虚拟页号和低位的零位(′000′X)连接以形成页面边界来构成虚拟地址(方框1804)。
ERAT预取请求器1111然后等待直到它被授权来进行ERAT预取操作(方框1805)。如在高速缓冲存储器行预取的情况一样,ERAT预取发生在后台,应当不仅服从其它操作,而且被调步,如上对于高速缓冲存储器行请求所述。一般,ERAT预取具有比在第一级高速缓冲未中或ERAT未中的情况下的高速缓冲存储器行预取更低的优先级。
当ERAT提取请求器被授权执行时,它使用先前产生的预取地址来分派预取请求(方框1806)。分派请求意味着产生信号,用于使得对于ERAT提取和产生地址项。一般,这遵循与ERAT未中时的提取相同的过程。
在分派预取请求时,在SLB中的所选择的项的页面索引指针增量(方框1807)。如果页面索引指针已经超过其极限(方框1808),则在这个项的页表上的所有页面已经被预取到ERAT。在这种情况下,该项不再排队,即一个控制位或其它数据被设置来指示所有页面已经被预取(方框1809)。如果未达到该极限,则当指针绕回到SLB中该项的位置时,该项将被再次选择。
在上述的说明中,已经假定每个SLB项包括用于预取的页面的列表。事实上,一些SLB项可以不包含列表中的页面或包含比页面的完整列表少的页面。因为该列表长度固定,因此,可以通过页面引用计数为零或一个或一些控制位来指示可预取页面的缺少或比阵列817的固定长度少的一些可预取页面。
当一个ERAT项响应于预取请求而被装载到ERAT中的时候,这个行为可能进一步引起预取在由要预取的ERAT项寻址的页面内的各高速缓冲存储器行,如上所述。
在上面的说明中,可以注意到,仅对未使用的预取、即如果数据被预取但在高速缓冲存储器或ERAT中从未被使用的情况下,减量行引用计数和页面引用计数。这意味着,如果计数低于预取门限,则它可以从不被减量。结果,它将缓慢地增量直到达到门限值(假定数据在存储器中)。当门限是1时,这是在优选实施例中用于高速缓冲存储器行预取的门限,没有关系。但是,它破坏了较高门限的目的,并且可以干扰要预取到SLB项中的ERAT的页面阵列的正确操作。因此,一种可选的老化机制可以被应用到用于预取ERAT项的页面引用计数。这样的机制可能包括例如当页表项被从存储器向TLB装载时或当出现一些其它较不频繁的事件的时候,减量页面计数。这样的老化机制将使得不常使用的数据的页面计数保持近乎为零,即使数据从未被预取。类似的老化机制可用于减量与在页表项内的高速缓冲存储器行相关联的行引用计数。
虽然为了清楚起见,在此示出的各种数据结构、特别是页表和段表具有类似表格的结构,但是事实上这些结构可以更复杂,并且在这些结构中的数据“项”可以被分割,以使一个项的部分在一个位置,而其它部分在另一个位置。
在所述优选实施例中,页表中的引用历史数据包括简单的升或降计数器,它们在一行被装载和使用时增量,而在装载但不使用时减量。但是,可以明白,这样的计数器可以对不同的事件进行增量或减量,并且可以对于不同的事件增量或减量不同的数量。而且,页面的每个可高速缓存子单元的引用历史数据不必是升或降计数器。它可以简单为单个位,该位依赖于一些近期事件而被设置为1或0。例如,如果最近对高速缓冲存储器的装载是成功的(即数据被使用),则该位可以被置为1,否则被置为0。它还可以是一组位,其中每位对应于一些不同的近期事件。
在所述优选实施例中,如果可高速缓存子单元各自的计数器大于0,则它们被预取。但是,预取决定可以更复杂,并且以其它的方式来考虑计数器的值。例如,如果计数器超过低门限则处理器可以向一层高速缓冲存储器预取,如果计数器超过较高的门限,则处理器可以向较高层高速缓冲存储器预取。而且,门限可以根据系统的当前负载和其它因素而变化。
在所述优选实施例中,计算机系统使用三级寻址方案,其中当存取高速缓冲存储器或存储器时,有效地址被翻译为虚拟地址,虚拟地址继而又被翻译为实际地址。但是,本发明并不限于任何特定的寻址方案,并且可以应用到具有少于三级寻址或多于三级寻址的系统,而且,按照本发明的计算机系统可以具有不同形式的地址翻译结构,尤其是不必具有ERAT。地址翻译结构与在特定结构中使用的寻址级有关。
在所述优选实施例中,当一个页面项被装载到ERAT时该页面项被装载到预取缓冲器。但是,将适当的项装载到预取缓冲器或类似的结构以启动预取也可以响应于任何数量的其它事件。当计算机系统没有ERAT时尤其是这样。例如,当页面项被装载到TLB中或一些其它的或替代的寻址翻译结构中时,该项可以被装载到预取缓冲器中。
虽然在此所述的升或降计数器最好被保持用于少于全页的可高速缓存子单元,但是也可以使用单个页面引用计数器来进行对于整个页面的预取决定。这样的技术对较低层的高速缓冲存储器(例如第三级高速缓冲存储器)更为有益。
虽然已经公开了本发明的具体实施例以及一些替代实施例,本领域的技术人员可以认识到,可以在本发明的范围内进行各种形式和细节上的附加改变。
权利要求
1.一种数字数据处理设备,包括存储器,所述存储器包含页表,所述页表具有对应于可寻址页面的多个页表项,其中,该多个页表项中的每一个对对应的可寻址页面的多个可高速缓存子单元中的每个分别包含各自的可高速缓存子单元引用历史数据;至少一个处理器;至少一个高速缓冲存储器,用于暂时存储来自所述存储器的数据;和预取引擎,所述预取引擎将可寻址页面的选择的可高速缓存子单元预取到所述至少一个高速缓冲存储器中,所述预取引擎使用所述可高速缓存子单元引用历史数据来选择用于预取的可寻址页面的可高速缓存子单元。
2.按照权利要求1所述的数字数据处理设备,其中,所述预取引擎在发生对用于选择性预取的页面的至少一个预定事件时识别所述页面,并且响应于对用于选择性预取的页面的识别、使用所述可高速缓存子单元引用历史数据来选择被识别的用于预取的页面的可高速缓存子单元。
3.按照权利要求2所述的数字数据处理设备,其中,对于所述被识别的页面的所述预定事件包括将所述页面的地址翻译数据装载到地址翻译高速缓冲存储器结构。
4.按照权利要求3所述的数字数据处理设备,其中,所述地址翻译高速缓冲存储器结构是有效地址到实际地址翻译表(ERAT)。
5.按照权利要求1所述的数字数据处理设备,其中,所述引用历史数据包括升或降计数器,它在出现至少一个第一组预定事件时增量,而当出现至少一个第二组预定事件时减量。
6.按照权利要求5所述的数字数据处理设备,其中,所述升或降计数器当相应的可高速缓存子单元被装载到所述高速缓冲存储器中并且当其在所述高速缓冲存储器中被引用时增量,而当所述相应的可高速缓存子单元被装载到所述高速缓冲存储器中并且当其在所述高速缓冲存储器中未被引用时减量。
7.按照权利要求1所述的数字数据处理设备,其中,所述数字数据处理设备包括多个在多个高速缓冲存储器级上的高速缓冲存储器,并且其中所述预取引擎向不同的高速缓冲存储器级预取数据。
8.按照权利要求1所述的数字数据处理设备,其中,所述数字数据处理系统包括多个处理器;在多个高速缓冲存储器级上的多个高速缓冲存储器,其中,所述高速缓冲存储器级中的第一级包括多个高速缓冲存储器,每个高速缓冲存储器分别与单个相应的处理器相关联,并且其中所述高速缓冲存储器级中的第二级包括至少一个由多个处理器共享的高速缓冲存储器。
9.按照权利要求1所述的数字数据处理设备,其中,所述数字数据处理系统还包括地址翻译机制,它将在所述至少一个处理器上执行的任务的地址空间中的有效地址翻译为在所述数字数据处理系统的全局地址空间中的虚拟地址,并且将所述虚拟地址翻译为与在所述存储器中的物理存储位置对应的实际地址。
10.按照权利要求9所述的数字数据处理设备,其中,所述预取引擎还将地址翻译数据预取到所述地址翻译机制的至少一个地址翻译高速缓冲存储器结构中。
11.一种向数字数据处理设备的至少一个高速缓冲存储器预取数据的方法,包括步骤对于所述数字数据处理设备存储器中的多个存储器页面中的每个维护至少一个各自的升或降计数器,每个所述计数器在出现相对于在与所述计数器对应的存储器页面中的数据的第一类事件时增量,而在出现相对于在与所述计数器对应的存储器页面中的数据的第二类事件时减量;并且根据对应于存储器页面的所述至少一个升或降计数器的值来确定是否预取存储器页面中的数据。
12.按照权利要求11所述的预取数据的方法,其中,所述维护至少一个升或降计数器的步骤包括对每个所述存储器页面维护多个在对应于该存储器页面的页表中的页面项中的相应的升或降计数器,每个升或降计数器分别对应于由在所述页表中的对应页面项表示的存储器页面的相应的可高速缓存子单元,每个所述计数器在出现相对于在对应于所述计数器的可高速缓存子单元中的数据的所述第一类事件时增量,而在出现相对于在对应于所述计数器的可高速缓存子单元中的数据的所述第二类事件时减量;并且其中,所述确定是否预取存储器页面中数据的步骤包括根据对应于可高速缓存子单元的升或降计数器的值来确定是否预取存储器中页面的可高速缓存子单元。
13.按照权利要求12所述的预取数据的方法,其中,所述可高速缓存子单元对应于所述数字数据处理设备的至少一个高速缓冲存储器的一个高速缓冲存储器行的大小。
14.按照权利要求12所述的预取数据的方法,其中,所述确定是否预取页面中的数据的步骤包括在出现相对于所述页面的至少一个第三类事件时识别用于选择预取的页面;响应于对用于选择预取的页面的识别,使用所述可高速缓存子单元引用历史数据来选择用于预取的被识别页面的可高速缓存子单元。
15.按照权利要求14所述的预取数据的方法,其中,相对于所述被识别页面的所述预定事件包括向地址翻译高速缓冲存储器结构中装载用于所述页面的地址翻译数据。
16.按照权利要求11所述的预取数据的方法,其中,所述第一类事件包括向所述数字数据处理设备的高速缓冲存储器中装载所述数据,并且当所述数据在高速缓冲存储器中时引用该数据;并且其中,所述第二类事件包括向所述数字数据处理设备的高速缓冲存储器中装载所述数据,并且在所述数据被引用之前将所述数据去除出所述高速缓冲存储器。
17.一种处理器,用于数字数据处理设备,包括指令单元,用于确定指令序列;执行单元,用于以所述指令序列来执行指令;至少一个高速缓冲存储器,用于暂时存储来自所述数字数据处理设备存储器的数据,以供所述指令单元和所述执行单元中的至少一个使用;预取引擎,所述预取引擎向所述至少一个高速缓冲存储器中预取所述存储器的可寻址页面的选择的可高速缓存子单元,所述预取引擎使用从所述存储器获得的可高速缓存子单元引用历史数据来选择用于预取的可寻址页面的可高速缓存子单元;以及引用历史维护逻辑单元,所述引用历史维护逻辑单元响应于对于各可高速缓存子单元在所述处理器中发生的引用历史事件来更新与每个相应的可高速缓存子单元对应的所述引用历史数据。
18.按照权利要求17所述的用于数字数据处理设备的处理器,其中,所述预取引擎在发生对于一个可寻址页面的至少一个预定事件时识别用于选择预取的所述可寻址页面,并且响应于对用于选择预取的可寻址页面的识别而使用所述可高速缓存子单元引用历史数据来选择用于预取的、被识别的可寻址页面的可高速缓存子单元。
19.按照权利要求18所述的用于数字数据处理设备的处理器,其中,相对于所述被识别的可寻址页面的所述预定事件包括向地址翻译高速缓冲存储器结构中装载用于所述页面的地址翻译数据。
20.按照权利要求19所述的用于数字数据处理设备的处理器,其中,所述地址翻译高速缓冲存储器结构是有效地址到实际地址翻译表(ERAT)。
21.按照权利要求17所述的用于数字数据处理设备的处理器,其中,所述引用历史数据包括升或降计数器,它在出现至少一个第一组预定事件时增量,而在出现至少一个第二组预定事件时减量。
22.按照权利要求21所述的用于数字数据处理设备的处理器,其中,所述升或降计数器当一个相应的可高速缓存子单元被装载到所述高速缓冲存储器并当其在所述高速缓冲存储器中被引用时则增量,而当所述相应的可高速缓存子单元被装载到所述高速缓冲存储器并且当其在所述高速缓冲存储器中未被引用时减量。
23.按照权利要求17所述的用于数字数据处理设备的处理器,其中,所述预取引擎还预取地址翻译数据到地址翻译机制的至少一个地址翻译高速缓冲存储器结构。
24.一种数字数据处理设备,包括至少一个处理器;存储器,所述存储器包含页表,所述页表具有对应于可寻址页面的多个页表项,其中,多个所述页表项中的每个包含对于对应的可寻址页面的永久引用历史数据,所述永久引用历史数据在对应的可寻址页面的整个生命周期内被保存在存储器中;至少一个高速缓冲存储器,用于暂时存储来自所述存储器的数据;和预取引擎,所述预取引擎从所述可寻址页面向所述至少一个高速缓冲存储器预取数据,所述预取引擎使用所述永久引用历史数据来选择用于预取的数据。
25.按照权利要求24所述的数字数据处理设备,其中,所述数字数据处理系统包括多个处理器,所述永久引用历史数据是基于在所述多个处理器中发生的引用事件的。
26.按照权利要求24所述的数字数据处理设备,其中,每个所述页表项对于对应可寻址页面的多个可高速缓存子单元中的每个包含各自的可高速缓存子单元引用历史数据;其中,所述预取引擎根据相应的可高速缓存子单元引用历史数据来确定是否预取在存储器中的页面的可高速缓存子单元。
27.按照权利要求24所述的数字数据处理设备,其中,所述永久引用历史数据包括升或降计数器,它在出现至少一个第一组预定事件时增量,而在出现至少一个第二组预定事件时减量。
28.按照权利要求27所述的数字数据处理设备,其中,所述升或降计数器当一个相应的可寻址页面被装载到所述高速缓冲存储器并当其在所述高速缓冲存储器中被引用时则增量,而当所述相应的可寻址页面被装载到所述高速缓冲存储器并且当其在所述高速缓冲存储器中未被引用时则减量。
29.按照权利要求24所述的数字数据处理设备,其中,所述数字数据处理设备包括多个在多个高速缓冲存储器级上的高速缓冲存储器,并且其中,所述预取引擎向不同的高速缓冲存储器级预取数据。
30.按照权利要求24所述的数字数据处理设备,其中,所述数字数据处理系统还包括地址翻译机制,它将在所述至少一个处理器上执行的一个任务的地址空间中的有效地址翻译为在所述数字数据处理系统的全局地址空间中的虚拟地址,并且将所述虚拟地址翻译为与在所述存储器中的物理存储位置相对应的实际地址。
31.按照权利要求30所述的数字数据处理设备,其中,所述预取引擎还向所述地址翻译机制的至少一个地址翻译高速缓冲存储器结构中预取地址翻译数据。
32.一种数字数据处理设备,包括多个处理器;存储器,所述存储器包含页表,所述页表具有对应于可寻址页面的多个页表项,其中,多个所述页表项中的每个包含对于对应的可寻址页面的永久引用历史数据,所述永久引用历史数据包含所述多个处理器的引用历史数据;至少一个高速缓冲存储器,用于暂时存储来自所述存储器的数据;和预取引擎,所述预取引擎从所述可寻址页面向所述至少一个高速缓冲存储器预取数据,所述预取引擎使用所述永久引用历史数据来选择用于预取的数据。
33.按照权利要求32所述的数字数据处理设备,其中,每个所述页表项对于对应的可寻址页面的多个可高速缓存子单元中的每个包含各自的可高速缓存子单元引用历史数据;其中,所述预取引擎根据各可高速缓存子单元引用历史数据来确定是否预取在存储器中页面的可高速缓存子单元。
34.按照权利要求32所述的数字数据处理设备,其中,所述永久引用历史数据包括升或降计数器,它在出现至少一个第一组预定事件时增量,而在出现至少一个第二组预定事件时减量。
全文摘要
本发明涉及利用永久历史页表数据预取数据到高速缓冲存储器的装置和方法。其中,计算机系统包括主存储器、至少一个处理器和至少一级高速缓冲存储器。该系统在存储器中、最好在页表中维护相对于每个可寻址页面的引用历史数据。引用历史数据最好用于确定应当将页面的哪些可高速缓存子单元预取到高速缓冲存储器中。引用历史数据最好是升或降计数器,它在可高速缓存子单元被装载到高速缓冲存储器中并且被处理器引用的情况下增量,而在该子单元被装载到高速缓冲存储器中但在被去除前未被引用的情况下减量。引用计数器因此表示根据近期历史该子单元将在近期被引用的大致可能。
文档编号G06F12/08GK1604055SQ200410011909
公开日2005年4月6日 申请日期2004年9月24日 优先权日2003年9月30日
发明者戴维·A·卢克 申请人:国际商业机器公司