CN102473156B - 推测版本控制高速缓存内的检查点 - Google Patents
推测版本控制高速缓存内的检查点 Download PDFInfo
- Publication number
- CN102473156B CN102473156B CN201080036698.2A CN201080036698A CN102473156B CN 102473156 B CN102473156 B CN 102473156B CN 201080036698 A CN201080036698 A CN 201080036698A CN 102473156 B CN102473156 B CN 102473156B
- Authority
- CN
- China
- Prior art keywords
- version
- cache
- supposition
- cache line
- speed cache
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 230000004044 response Effects 0.000 claims abstract description 46
- 238000000034 method Methods 0.000 claims description 80
- 238000003860 storage Methods 0.000 claims description 40
- 230000008859 change Effects 0.000 claims description 30
- 230000009471 action Effects 0.000 claims description 26
- 238000005096 rolling process Methods 0.000 claims description 12
- 238000001514 detection method Methods 0.000 claims description 4
- 230000007246 mechanism Effects 0.000 abstract description 47
- 238000012545 processing Methods 0.000 abstract description 22
- 230000008569 process Effects 0.000 description 40
- 238000010586 diagram Methods 0.000 description 26
- 230000006870 function Effects 0.000 description 18
- 238000004590 computer program Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 9
- 230000005540 biological transmission Effects 0.000 description 8
- 239000000872 buffer Substances 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 4
- 238000011084 recovery Methods 0.000 description 4
- 230000003466 anti-cipated effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000021615 conjugation Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 230000005251 gamma ray Effects 0.000 description 3
- 238000007689 inspection Methods 0.000 description 3
- 238000005259 measurement Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000010298 pulverizing process Methods 0.000 description 3
- 239000012536 storage buffer Substances 0.000 description 3
- 230000000153 supplemental effect Effects 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 235000009854 Cucurbita moschata Nutrition 0.000 description 1
- 240000001980 Cucurbita pepo Species 0.000 description 1
- 235000009852 Cucurbita pepo Nutrition 0.000 description 1
- 241001269238 Data Species 0.000 description 1
- 241000196324 Embryophyta Species 0.000 description 1
- 108091029480 NONCODE Proteins 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000008485 antagonism Effects 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 230000003750 conditioning effect Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000008713 feedback mechanism Effects 0.000 description 1
- 244000144992 flock Species 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000000329 molecular dynamics simulation Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000005855 radiation Effects 0.000 description 1
- 230000008672 reprogramming Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 235000020354 squash Nutrition 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1405—Saving, restoring, recovering or retrying at machine instruction level
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/50—Control mechanisms for virtual memory, cache or TLB
- G06F2212/507—Control mechanisms for virtual memory, cache or TLB using speculative control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Retry When Errors Occur (AREA)
Abstract
本发明提供了用于在数据处理系统(100)的推测版本控制高速缓存(310、1210)内产生检查点(1030)的机制。所述机制执行数据处理系统(100)内的代码,其中所述代码访问推测版本控制高速缓存(310、1210)内的高速缓存行。该机制还确定(1350)指示需要在推测版本控制高速缓存(310、1210)内产生检查点(1030)的第一条件是否发生。检查点(1030)是推测高速缓存行,其被响应于需要对应于所述推测高速缓存行的高速缓存行的改变的回滚的第二条件的发生置于是非推测性的。该机制还响应于确定第一条件已经发生,在推测版本控制高速缓存(310、1210)内产生检查点(1310)。
Description
在美国政府支持下根据能源部授于的合同No.B554331做出本发明。美国政府具有本发明中的一定权利。
技术领域
本申请一般地涉及改进的数据处理装置和方法,并且更特别地,涉及执行推测版本控制高速缓存内的检查点,并且在某些实施例中,基于用于这些推测版本控制高速缓存的版本压力反馈机制执行这种检查点。
背景技术
推测版本控制高速缓存是能够存储高速缓存行的多个版本以便使得能够在多线程数据处理环境中实现线程的推测执行的高速缓存存储器结构。线程的推测执行是一种优化技术,根据该技术,进行线程的提早执行(该线程的结果可能是或不是以后需要的),以便如果在代码的执行过程中需要该线程的结果(即,如果线程从推测状态转变为使用所述结果的非推测状态)的情况下实现更好的性能。推测版本控制高速缓存是典型高速缓存的扩展,其中推测版本控制高速缓存能够保持仅能被写该推测版本控制高速缓存的硬件线程访问的数据。所有带有修改注释的高速缓存行可被使用特殊命令(Abort,丢弃)丢弃,或使用另一种命令(commit,提交)使得其在结构上被其它线程可见。
取决于模式,还可以由执行对应于逻辑后继任务的任务的其它线程访问在执行推测任务时由硬件线程写的数据。因此,推测版本控制需要在存储器位置的多个缓冲版本中追踪程序顺序,以便确保一定的顺序程序语义。首先,加载必须最终读取由对相同存储器位置的最近存储创建的值。这需要如果在该存储之前执行加载并且不正确地读取以前的版本,该加载必须被粉碎(squash)并且重新执行。另外,这需要在程序顺序中在该加载之后对相同存储器位置的所有存储必须被缓冲,直到该加载被执行为止。其次,存储器位置必须最终具有与版本的创建顺序无关的正确版本。从而,一个位置的推测版本必须被以程序顺序提交给体系结构存储设备。
通过提供与推测线程相关联地存储高速缓存行的推测版本的能力,推测版本控制高速缓存支持推测多线程。在Gopal等的“Speculative Versioning Cache,”Proceedings of the 4th InternationalSymposium on High-Performance Computer Architecture,January31 to February 04,1998,page 195中描述了推测版本控制高速缓存的一个例子。在推测版本控制高速缓存的这个例子中,为每个处理器提供专有高速缓存,以类似于基于探听总线的高速缓存一致性对称多处理器(SMP)组织系统。在专有高速缓存中命中的存储器引用不如同SMP中那样使用总线。任务提交不全体回写推测版本。当下次被访问时,每个高速缓存行被单独处理。
采用Gopal等描述的推测版本控制高速缓存,程序被划分为被称为任务的片段,这些任务形成对应于它们在动态指令流内的顺序的序列。更高层次的控制单元预测该序列中的下一个任务,并且将其分配到空闲处理器以便执行。每个处理器执行分配给它的任务中的指令,并且在其专有高速缓存中缓冲由该任务创建的推测状态。当检测到任务误预测时,包括不正确预测的任务和其之后的任务的该序列内的所有任务的推测状态被无效,并且释放对应的处理器。这被称为任务粉碎。然后分配该序列内的正确任务以便执行。当任务预测已被无效时,它通过将推测性缓冲状态拷贝到体系结构存储设备(例如,数据高速缓存)而提交。任务按照程序顺序一个接一个地提交。一旦任务提交,其处理器被释放以便执行下一个任务。由于任务按照程序顺序提交,因此任务被按照程序顺序分配给处理器。
一旦加载的地址可获得,任务就执行该加载,推测该序列内的前面任务中的存储不向相同位置写。该位置的最近的以前版本被提供给该加载。记录被提供了以前任务的版本的加载,以便指示在潜在定义之前的使用。如果发生了定义,例如,以前任务中对相同位置的存储,该加载被提供了不正确的版本,并且违反了存储器相关性。
当一个任务向一个存储器位置执行存储时,其被通知给序列内所有以后的活动任务。当一个任务从以前的任务接收到一个位置的新版本时,如果为该位置记录了定义之前的使用,即检测到存储器相关性违反,该任务被粉碎。在被粉碎的任务之后的所有任务也被作为任务误预测粉碎。
最早的活动任务是非推测性的,并且可以将其推测存储器状态(即,由这个任务中的存储创建的版本)提交给体系结构存储设备。提交一个版本涉及逻辑地将版本从推测缓冲器拷贝到体系结构存储设备,例如,数据高速缓存。当任务被粉碎时,与任务相关联的推测状态被无效,并且不被提交给体系结构存储设备。
各个处理器的专有高速缓存一起组成了推测版本控制高速缓存。专有高速缓存的每个高速缓存行存储标识被缓存的数据的地址标签(Tag)、标识高速缓存行是否有效的有效位(V)、标识是否发生了对高速缓存行的存储的脏位(S)、数据本身、指示是否发生了在对高速缓存行存储之前从该高速缓存行的任务加载的加载位(L)、标识具有用于该高速缓存行的版本顺序列表(VOL)内的下一个拷贝/版本(如果有的话)的处理器(或L1高速缓存)的指针(Pointer),以及数据本身(Data)。
推测版本控制高速缓存使用被称为版本控制逻辑(VCL)的组合逻辑,其提供对使用VOL的推测版本控制的支持。在处理器的专有高速缓存中命中的处理器请求不必参考VOL。高速缓存未中发出被专有高速缓存探听的总线请求。每个专有高速缓存内的被请求的高速缓存行的状态和VOL被提供给VCL。VCL使用总线请求、任务之中的程序顺序和VOL计算对每个高速缓存的适当响应。每个高速缓存行被基于其初始状态、总线请求和VCL响应更新。
采用多线程数据处理环境中的线程的推测执行,线程被允许执行,直到遇到两个或更多个线程之间的相关性违反,例如,第一个线程执行对一个存储器位置的读取,其后比第一个线程新的第二个线程对相同存储器位置执行写,或两个或更多个线程试图修改高速缓存或存储器内的相同数据部分的状态的冲突。此时,通常允许一个线程保持其状态,而必须粉碎一个或更多个其它线程,即,由未被保持的线程执行的所有工作被回滚(roll back)或放弃。这种线程粉碎比典型的高速缓存未中昂贵得多,这是由于其导致取消由给定的推测线程执行的所有工作以及还可能取消任意后续推测线程执行的所有工作。
发明内容
在一个说明性实施例中,一种数据处理系统内的方法,用于产生数据处理系统的推测版本控制高速缓存内的检查点。该方法包括由数据处理系统的至少一个处理器执行数据处理系统内的代码,其中代码访问推测版本控制高速缓存内的高速缓存行。该方法还包括以数据处理系统确定指示需要产生推测版本控制高速缓存内的检查点的第一条件是否发生。检查点是推测高速缓存行,该推测高速缓存行被响应于第二条件发生置于是非推测性的,第二条件需要对应于推测版本控制高速缓存的高速缓存行的改变的回滚。该方法还包括响应于确定第一条件已经发生,产生推测版本控制高速缓存内的检查点。
在另一个说明性实施例中,提供了一种包括计算机可读介质的计算机程序产品,所述计算机可读介质具有记录在其上的计算机可读程序。当被数据处理系统执行时,所述计算机可读程序使得数据处理系统执行上面以方法实施例概述的各种操作以及这些操作的组合。
在另一个说明性实施例中,提供了一种数据处理系统/装置,其包括一个或更多个处理器、耦连到一个或更多个处理器的推测版本控制高速缓存存储设备、以及耦连到推测版本控制高速缓存存储设备的以硬件实现的全局版本控制高速缓存模块。每个处理器具有实现在处理器的硬件内的至少一个线程级版本控制高速缓存模块。一个或更多个处理器执行访问推测版本控制高速缓存存储设备内的高速缓存行的代码。至少一个以硬件实现的全局版本控制高速缓存模块或至少一个线程级版本控制高速缓存模块确定指示产生推测版本控制高速缓存内的检查点的需要的第一条件是否发生。检查点是推测高速缓存行,该推测高速缓存行被响应于第二条件发生置于是非推测性的,第二条件需要对应于推测版本控制高速缓存的高速缓存行的改变的回滚。响应于确定第一条件已经发生,在一个或更多个处理器中的一个处理器上执行的代码产生推测版本控制高速缓存存储设备内的检查点。
在对本发明的示例实施例的下列详细描述中将描述本发明的这些或其它特征和优点,或根据对本发明的示例实施例的下列详细描述,本领域的技术人员将明了本发明的这些或其它特征和优点。
附图说明
当结合附图阅读时,通过参考说明性实施例的下列详细描述,将最好地理解本发明以及其优选使用方式和进一步的目的和优点,其中:
图1示出了可以实施说明性实施例的数据处理系统的示例方框图;
图2是示出了指示出了功能单元和寄存器的常规双线程处理器设计的示例方框图,可以在其中实施说明性实施例的方面;
图3是一个说明性实施例的主要操作元件的示例方框图;
图4是一个示例图,示出了根据一个说明性实施例的基于原始版本压力数据的有意义版本压力统计的产生;
图5是一个示例的代码部分,示出了根据一个说明性实施例的用于解决版本压力的线程压制动作;
图6是一个示例的代码部分,示出了根据一个说明性实施例的用于解决版本压力的工作负荷压制动作;
图7是一个示例的代码部分,示出了根据一个说明性实施例的用于解决版本压力的闲置线程动作;
图8是一个示例的代码部分,示出了根据一个说明性实施例的用于解决版本压力的事务聚集动作;
图9是一个流程图,概述了根据一个说明性实施例的用于使用版本压力反馈来调整数据处理系统的操作的示例操作;
图10是一个示例图,示出了根据一个说明性实施例的推测版本控制高速缓存检查点机制的操作;
图11是一个示例图,示出了根据一个说明性实施例的关于软错误的发生的推测版本控制高速缓存检查点机制;
图12是根据一个说明性实施例的版本压力模块的示例图,其中响应于达到或超过了一个或更多个版本压力阈值产生中断;
图13是一个流程图,概述了根据一个说明性实施例的响应于达到或超过了一个或更多个版本压力阈值产生中断的示例操作;
图14是一个流程图,概述了根据一个说明性实施例的用于产生检查点的示例操作;和
图15是一个流程图,概述了根据一个说明性实施例的用于执行回滚操作的示例操作。
具体实施方式
说明性实施例提供了用于确定推测版本控制高速缓存(SVC)内的版本压力,并且利用该版本压力信息,以执行代码以便增加/减小版本压力从而实现推测版本控制高速缓存的最优性能的方式影响改变的机制。另外,说明性实施例还提供了用于出于在需要时回滚修改的目的,利用推测版本控制高速缓存存储检查点信息的机制。另外,说明性实施例提供了用于为检查点信息利用版本压力信息和最大容量信息,以便确定何时将推测性状态提升为非推测性状态,并且产生新检查点的机制。
如上所述,采用推测版本控制高速缓存(SVC),在SVC中保存高速缓存行的多个版本。以给定数目的高速缓存行集合来组织SVC高速缓存,每个高速缓存行集合具有给定数目的高速缓存行(结合数目)。当处理存储器请求时,使用地址确定这个地址属于哪个高速缓存行集合。一旦确定了高速缓存行集合,高速缓存确定与给定地址相关联的高速缓存行是否存在于确定的高速缓存行集合内。这样一来,高速缓存访问标记(即,指示对应于当前在高速缓存行集合内的高速缓存行的地址和版本的元数据信息),以便确定发生高速缓存命中(正确地址并且版本存在)还是高速缓存未中(这个高速缓存行集合中当前没有对应于所请求的地址/版本的高速缓存行)。
采用推测版本控制高速缓存(SVC),如果存在访问违规,例如,相关性违规,线程或事务可能被粉碎,导致相当大的开销成本。另外,线程可能由于冲突未中被粉碎。当SVC中没有用于高速缓存行的所有当前版本的足够存储容量时发生冲突未中。不同于正常的高速缓存结构,采用SVC,由于推测状态的高速缓存行通常未被返回到体系结构存储设备,例如,数据高速缓存或主存储器内,不能从SVC收回推测状态的高速缓存行,从而增加了冲突未中的可能性。因此,如果必须收回(evict)推测状态的高速缓存行,诸如,为其它推测线程提供附加存储空间,与被收回的推测状态的高速缓存行相关联的推测线程必须被粉碎。另外,当粉碎线程时,通常还粉碎所有子线程。子线程对应于执行原始程序顺序中的逻辑上在当前线程的任务之后的任务的线程。采用线程和子线程的粉碎,当存在冲突未中时,可能遇到由于利用资源而没有产生有益结果,以及需要重新启动被粉碎的线程而引起的大的开销成本。
冲突未中的可能性随着在数据处理系统内执行的线程的数目而增加。另外,具有“热点”特性的应用程序,即,经常执行的应用程序部分,可以极大地增加冲突未中的可能性,这是由于热点增加了这些热点的需要保持在SVC内的高速缓存行的版本的数目。如果存在大量高速缓存行集合,冲突未中的可能性可被减小,在没有热点时,由于具有均匀分布的存储器访问被分布在大量高速缓存集合内,从而减少竞争高速缓存内的每个高速缓存行集合内的给定数目的高速缓存行的推测存储器请求的数目。另外,如果以更高的结合度组织高速缓存,由于高结合度高速缓存在每个高速缓存行集合内提供更多的高速缓存行,冲突未中的可能性将减小。因此,每个高速缓存行集合将能够容纳更多的推测版本。
虽然软件可以控制推测级别,当前没有软件知道将发生冲突未中情况的可能程度的有效机制。换言之,编译器、操作系统、运行时环境等的软件机制不能估计推测版本控制高速缓存经历的“版本压力”。在本描述的上下文中,术语“版本压力”指推测版本控制高速缓存将没有足够空间存储高速缓存行的所有各种版本以便支持数据处理系统内的线程的推测执行的可能性。
例如,对于具有集合结合度16的推测版本控制高速缓存内的给定高速缓存行集合X,如果高速缓存行集合X中的16个高速缓存行内不存在推测高速缓存行,则版本压力被称为零。然而,如果每个高速缓存行集合X中的16个高速缓存行内存在15个推测行,则版本压力被称为非常高。因此,术语“版本压力”对应于与给定高速缓存行集合内的,或通过延伸,整个推测版本控制高速缓存内的推测高速缓存行的部分(fraction)成比例的度量。
说明性实施例提供了用于提供推测版本控制高速缓存的版本压力反馈的机制。在一个说明性实施例中,提供了一种硬件机制,用于基于每个线程或每个高速缓存版本压力模块产生压力反馈信息的硬件机制,并且将这种压力反馈提供给诸如编译器、操作系统、运行时环境等的软件机制,从而软件机制可以相应地反应。软件机制可以按照若干不同方式反应。例如,基于压力反馈信息,软件机制控制活动线程的数目、控制跨区(spanned)线程内的工作数量、或控制事务的持续时间。事务是改变必须自动发生的任务,即,所有改变发生或没有改变发生。在事务模型中,是否允许改变发生的判断取决于其它任务和/或事务触及由该任务访问的某些相同数据。当没有其它任务和/或事务触及与给定事务相关联的数据时,允许以非推测状态反应事务的改变。当某些其它任务和/或事务触及由还被给定事务触及的某些数据时,则给定的事务可能失败,和/或触及某些相同数据的其它事务将失败。必须不允许将由失败的事务执行的改变提交非推测状态。
采用说明性实施例的基础机制,数据处理系统的每个线程具有相关联的线程版本压力模块。推测版本控制高速缓存还具有相关联的全局版本压力模块。全局版本压力模块保持和更新高速缓存行集合的版本压力信息,即,存在于推测版本控制高速缓存内的相同高速缓存行的不同版本的集合。响应于高速缓存行未中或高速缓存行替换操作更新这种版本压力信息。高速缓存行集合的信息然后被与响应于来自线程的请求从高速缓存行的一个版本返回的数据从全局版本压力模块传递给单独线程的单独线程版本压力模块。因此,单独线程的相关版本压力模块接收被特定线程访问的高速缓存行的特定集合的版本压力信息。基于保持在单独线程版本压力模块内的版本压力信息,软件机制可以为每个线程执行上面所述的对线程的各种修改中的一个或更多个。
如本领域技术人员理解的,本发明可被具体化为系统、方法或计算机程序产品。因此,本发明的各个方面和特征可以采取完整的硬件实施例、完整的软件实施例(包括固件、驻留软件、微码等)或此处可被总地称为“电路”、“模块”或“系统”的包含软件和硬件方面的实施例。另外,本发明的各个方面和特征可以采取实现于任意有形的表达介质内的计算机程序产品的形式,所述介质内实现有计算机可用的程序代码。
可以使用一个或更多个计算机可用或计算机可读介质的任意组合。计算机可用或计算机可读介质可以是,例如,但不限于,电的、磁的、光学的、电磁的、红外的或半导体系统、装置、设备或传播媒介。计算机可读介质的更具体的例子(非穷尽性列表)包括下列:具有一个或更多个导线的电连接、便携计算机盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦可编程只读存储器(EPROM或闪存)、光纤、便携压缩盘只读存储器(CDROM)、光学存储设备、传输介质,诸如支持互联网或内联网的传输介质,或磁存储设备。注意,计算机可用或计算机可读介质甚至可以是可以在其上打印程序的纸或另一种适合介质,因为可以通过例如对纸或另一种介质的光学扫描电子地捕获所述程序,并且如果需要,可被编译、解释或以适合的方式另行处理,并且然后存储在计算机存储器内。在本文档的上下文中,计算机可用的或计算机可读的介质可以是任何含有、存储、传达、传播、或传输供指令执行系统、装置或器件使用的或与指令执行系统、装置或器件相联系的程序的介质。计算机可用的介质可包括在基带中或者作为载波一部分传播的、由其体现计算机可用的程序码的数据信号。计算机可用的程序码可以用任何适当的介质传输,包括-但不限于-无线、电线、光缆缆线、射频(RF)等等。
用于执行本发明的操作的计算机程序码,可以以一种或更多种编程语言的任何组合来编写,所述编程语言包括面向对象的编程语言-诸如JavaTM、SmalltalkTM、C++之类,还包括常规的过程式编程语言-诸如”C”编程语言或类似的编程语言。程序码可以完全地在用户的计算机上执行、部分地在用户的计算机上执行、作为一个独立的软件包执行、部分在用户的计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何种类的网络——包括局域网(LAN)或广域网(WAN)-连接到用户的计算机,或者,可以(例如利用因特网服务提供商来通过因特网)连接到外部计算机。另外,程序码可被包含在服务器或远程计算机上的计算机可读存储介质上,并且可被通过网络下载到远程计算机或用户计算机的计算机可读存储介质上以便存储和/或执行。另外,任意计算系统或数据处理系统可以在从远程计算系统或数据处理系统通过网络下载程序码之后在计算机可读存储介质内存储程序码。
下面参考根据本发明的说明性实施例的方法、装置(系统)和计算机程序产品的流程图和/或方框图描述说明性实施例。应当理解,流程图和/或方框图的每个方框,以及流程图和/或方框图的方框的组合可由计算机程序指令实现。这些计算机程序指令可被提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,以便产生一种机器,从而通过计算机或其它可编程数据处理装置的处理器执行的所述指令创建用于实现流程图和/或方框图的一个或更多个方框内指定的功能/动作。
也可以把这些计算机程序指令存储在能指引计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令产生一个包括实现流程图和/或框图中的一个或更多个方框中规定的功能/操作的指令装置的制造品。
也可以把计算机程序指令加载到计算机或其它可编程数据处理装置上,使得在计算机或其它可编程数据处理装置上执行一系列操作步骤,以产生计算机实现的过程,从而在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的一个或更多个方框中规定的功能/操作的过程。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或更多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
可在许多不同类型的数据处理环境内利用说明性实施例,包括分布式数据处理环境、单个数据处理设备等。为了提供说明性实施例的特定元件和功能的描述的上下文,下面提供图1和2作为可以实现说明性实施例的方面的示例环境。虽然接着图1和2的描述将主要聚焦于提前调度并且与其它迭代并行地执行不相关迭代的了解运行时相关性的调度机制的单个数据处理设备实现,这仅是例子,并且不旨在表述或暗示关于本发明的特征的任意限制。相反,说明性实施例旨在包括分布式数据处理环境,以及在运行时调度不相关迭代,并且提前与其它迭代并行执行的实施例。
现在参考附图,并且具体地参考图1-2,提供了可以实现本发明的说明性实施例的数据处理环境的示例图。应当理解,图1-2仅是例子,并且不旨在声称或暗示关于可以实现本发明的方面或实施例的环境的任意限制。可以对所示的环境做出许多修改,而不脱离本发明的精神和范围。
现在参考附图,图1示出了可以实现本发明的实施例的数据处理环境的示例图。应当理解,图1仅是示例,并且不旨在声称或暗示关于可以实现本发明的方面或实施例的环境的任意限制。可以对所示的环境做出许多修改,而不脱离本发明的精神和范围。
现在参考图1,示出了可以实现说明性实施例的数据处理系统的方框图。数据处理系统100是一个计算机的例子,可以为说明性实施例将实现所述处理的计算机可用代码或指令放置在该计算机内。
在示出的例子中,数据处理系统100采用包括北桥和存储器控制器集线器(NB/MCH)102和南桥和输入/输出(I/O)控制器集线器(SB/ICH)104的集线器体系结构。处理单元106、主存储器108和图形处理器110被耦连到北桥和存储器控制器集线器102。处理单元106可以包括一个或更多个处理器,并且甚至可以被使用一个或更多个异类处理器系统实现。图形处理器110可被例如通过加速图形端口(AGP)耦连到MCH。
在示出的例子中,局域网(LAN)适配器112被耦连到南桥和I/O控制器集线器104,并且音频适配器116、键盘和鼠标适配器120、调制解调器122、只读存储器(ROM)124、通用串行总线(USB)端口和其它通信端口132以及PCI/PCIe设备134被通过总线138耦连到南桥和I/O控制器集线器104,并且硬盘驱动器(HDD)126和CD-ROM驱动器130被通过总线140耦连到南桥和I/O控制器集线器104。PCI/PCIe设备可以包括,例如,以太网适配器、插卡和笔记本计算机的PC卡。PCI使用卡总线控制器,而PCIe不使用。ROM124可以是例如闪速二值输入/输出系统(BIOS)。硬盘驱动器126和CD-ROM驱动器130可以使用例如集成驱动电子设备(IDE)或串行高级技术附加(SATA)接口。超级I/O(SIO)设备136可被耦连到南桥和I/O控制器集线器104。
操作系统运行在处理单元106上,并且调整和提供对图1的数据处理系统100内的各种组件的控制。操作系统可以是商业可获得的操作系统,诸如XP(Microsoft和Windows是微软公司在美国、其它国家或两者内的注册商标)。面向对象编程系统,诸如JAVATM编程系统可以结合操作系统运行,并且提供从在数据处理系统100上执行的JAVA程序或应用对操作系统的调用。JAVA和所有基于JAVA的商标是Sun Microsystems在美国、其它国家或两者内的注册商标。
操作系统、面向对象的编程系统和应用程序或程序的指令位于诸如硬盘驱动器126的存储设备上,并且可被加载主存储器108以便由处理单元106执行。说明性实施例的处理可由处理单元106使用以计算机实现的指令执行,所述指令可位于存储器,诸如例如,主存储器108、只读存储器124、或一个或更多个外围设备内。
总线系统可由一个或更多个总线组成,诸如系统总线、I/O总线和PCI总线。当然,可以使用任意类型的通信构造或体系结构实现总线系统,所述构造或体系结构为附加到所述构造或体系结构的不同组件或设备之间的数据传输提供保障。通信单元可以包括用于传输和接收数据的一个或更多个设备,诸如调制解调器或网络适配器。存储器可以是例如主存储器108或高速缓存,诸如北桥和存储器控制器集线器102中找到的高速缓存。处理单元可以包括一个或更多个处理器或CPU。图1中所示的例子和上面所述的例子不意味着暗示体系结构的限制。例如,除了采取PDA的形式之外,数据处理系统100还可以是平板计算机、膝上计算机或电话设备。
参考图2,示出了指示出了功能单元和寄存器的常规双线程处理器设计的示例方框图,可以在其内实现说明性实施例的方面。在这些说明性实施例中,处理器200可被实现为图1中的处理单元106。处理器200包括具有双线程同时多线程(SMT)的单集成电路超标量微处理器。因此,如此处下面讨论的,处理器200包括各种单元、寄存器、缓冲器、存储器和其它部分,它们全以集成电路形成。另外,在说明性实施例,处理器200根据精简指令集计算机(RISC)技术操作。
如图2所示,取指令单元(IFU)202连接到指令高速缓存204。指令高速缓存204保持将要执行的多个程序(线程)的指令。指令高速缓存204还具有与二级(L2)高速缓存/存储器206的接口。IFU202根据指令地址从指令高速缓存204请求指令,并且将指令传递给指令解码单元208。在说明性实施例,IFU202可以同时为多至两个线程从指令高速缓存204请求多个指令。指令解码单元208同时为多至两个线程解码多个指令,并且将解码后的指令传递给指令分派单元(IDU)210。IDU210为每个线程选择性地将来自指令解码单元208的解码后的指令分组,并且将每个线程的指令组输出或发出到处理器的执行单元212、214、216、218、220、222、224、226和228。
在说明性实施例中,处理器的执行单元可以包括分支单元212、加载/存储单元(LSUA)214和(LSUB)216、定点执行单元(FXUA)218和(FXUB)220、浮点执行单元(FPUA)222和(FPUB)224、矢量多媒体扩展单元(VMXA)226和(VMXB)228。执行单元212、214、216、218、220、222、224、226和228被两个线程完全共享,意味着执行单元212、214、216、218、220、222、224、226和228可以从任意一个或两个线程接收指令。处理器包括多个寄存器集合230、232、234、236、238、240、242、244和246,它们也被称为构造寄存器文件(ARF)。
ARF是一个文件,一旦指令被完全执行,完成数据被存储在该文件内。ARF 230、232、234、236、238、240、242、244和246可以为两个线程中的每一个分别并且按照指令类型存储数据,即,通用寄存器(GPR)230和232、浮点寄存器(FPR)234和236、专用寄存器(SPR)238和240以及矢量寄存器(VR)244和246。按照类型并且按照线程分别存储完成数据有助于在处理指令的同时减少处理器竞争。
处理器附加地包括用于保持程序状态的共享专用寄存器(SPR)集合242,诸如指令指针、堆栈指针、处理器状态字,它们可用于来自任意一个或两个线程的指令。执行单元212、214、216、218、220、222、224、226和228被通过简化的内部总线结构248连接到ARF 230、232、234、236、238、240、242、244和246。
为了执行浮点指令,FPUA222和FPUB224从FPR234和236检索寄存器源操作数信息,其是执行指令所需的输入数据,如果执行指令所需的指令数据是完成的,或如果数据已经通过了流水线的清除点。完成数据是一旦指令已被完全执行,由执行单元产生的并且存储在ARF,诸如ARF 230、232、234、236、238、240、242、244和246内的数据。非完成数据是在指令未被完全执行的指令执行过程中产生的数据。FPUA222和FPUB224根据每个执行指令所属的线程输入它们的数据。例如,FPUA222将完成数据输入FPR234,并且FPUA224将完成数据输入FPR236,由于FPUA222、FPUB224、FPR234和FPR236是线程专用的。
在指令的执行过程中,当指令已经通过了流水线内的清除点时,FPUA222和FPUB224将其目的地寄存器操作数数据,或在指令执行过程中产生的指令数据输出到FPR234和236。在指令执行过程中,当指令已经通过了流水线内的清除点时,FXUA 218、FXUB 220、LSUA 214和LSUB 216将其目的地寄存器操作数数据或在指令执行过程中产生的指令数据输出到GPR230和232。在指令子集执行过程中,当指令已经通过了流水线内的清除点时,FXUA 218、FXUB 220和分支单元212将其目的地寄存器操作数数据输出到SPR238、240和242。在指令执行过程中,当指令已经通过了流水线内的清除点时,VMXA226和VMXB228将其目的地寄存器操作数数据输出到VR244和246。
数据高速缓存256还与不可缓存单元(未示出)相关联,不可缓存单元从处理器接收数据,并且将其直接写到二级高速缓存/存储器206,从而绕开高速缓存存储所需的一致性协议。
响应于从指令高速缓存204输入并且以指令解码单元208解码的指令,IDU210按照指令类型和线程将指令选择性地分派到执行单元212、214、216、218、220、222、224、226和228。执行单元212、214、216、218、220、222、224、226和228又执行特定类或类型的指令的一个或更多个指令。例如,FXUA 218和FXUB 220对寄存器源操作数执行定点算术运算,诸如加、减、与、或和异或。FPUA222和FPUB224对寄存器源操作数执行浮点算术运算,诸如浮点乘和除。LSUA214和LSUB216执行在数据高速缓存256和ARF 230、232、234和236之间移动操作数数据的加载和存储指令。VMXA226和VMXB228执行包括多个数据的单指令操作。分支单元212执行分支指令,其通过修改IFU202使用的指令地址,以便从指令高速缓存204请求指令,有条件地改变程序的执行流程。
IDU210根据解码后的指令以及为每个指令执行所请求操作的可用执行单元212、214、216、218、220、222、224、226和228的混合,将以指令解码单元208解码的指令分组在一起以便同时执行。例如,由于仅有两个加载/存储单元214和216,最多两个加载/存储类型的指令可被分组在一起。在说明性实施例中,多至7条指令可被分组在一起(两条定点算术指令、两条加载/存储指令、两条浮点算术指令(FPU)或两个矢量多媒体扩展(VMX)指令和一条分支指令),并且多至5条指令可以属于相同线程。在包括较低优先级线程的指令之前,IDU210在所述组中包括更高优先级线程的多至5条的尽可能多的指令。按照线程的优先级值和其处理的优先级类别确定线程的优先级。处理系统使用所有可执行线程的基本优先级级别确定哪个线程获得下一个处理器时间片段。在每个优先级级别以循环方式调度线程,并且仅当没有更高级别的可执行线程时,才进行较低级别的线程的调度。
然而,IDU210将FPU指令222和224或VMX指令226和228与FXU指令218和220分配在相同组内。即,IDU210不将FPU指令222和224以及VMX指令226和228分配在相同组内。程序状态(诸如,存储在SPR238和240内的指令指针、堆栈指针、处理器状态字)向IDU210指示线程优先级260。
指令完成单元262监视内部总线结构248,以便确定在执行单元212、214、216、218、220、222、224、226和228中执行的指令何时完成将其操作数结果写到重新命名缓冲器250、252、254或258。由分支单元212、FXUA218、FXUA220、LSUA 214和LSUA 216执行的指令需要相同数目的周期来执行,而由FPUA 222、FPUB 224、VMXA226和VMXB228执行的指令需要可变的并且更大数目的周期来执行。因此,被分组在一起并且在相同时刻开始执行的指令不必然在相同时刻完成。由于指令必须被按顺序完成,指令的“完成”意味着指令在执行单元212、214、216、218、220、222、224、226和228之一内完成执行,并且所有旧指令已被在体系结构状态中更新。因此,该指令现在准备完成并且更新体系结构状态,这意味着当指令已被完成时,更新数据的最终状态。体系结构状态仅可被按照顺序更新,即,必须按照顺序完成指令,并且必须在每个指令完成时更新完成数据。
指令完成单元262监视指令的完成,并且向IDU210发送控制信息,通知IDU210可以给执行单元212、214、216、218、220、222、224、226和228分派更多组的指令。IDU210给分派单元、IFU202和指令解码单元208发送分派信号266,指示其准备好接收更多的解码后的指令,信号266作为将更多指令带入流水线的节门。
本领域的技术人员将明了图1-2中的硬件可以根据实现而改变。除了或取代图1-2所示的硬件之外,可以使用其它内部硬件或外围设备,诸如闪存、等同的非易失存储器或光盘驱动器等。另外,说明性实施例的处理可被应用于前面提到的SMP之外的多处理器数据处理系统,而不脱离本发明的精神和范围。
另外,数据处理系统100可以采取多个不同数据处理系统中的任一个的形式,包括客户机计算设备、服务器计算设备、平板计算机、膝上计算机、电话或其它通信设备、个人数字助理(PDA)等。在某些说明性例子中,例如,数据处理系统100可以是便携计算设备,其配置有闪存,以便提供用于存储操作系统文件和/或用户产生的数据的非易失存储器。本质上,数据处理系统100可以是任意已知或以后开发的数据处理系统,而没有体系结构限制。
采用说明性实施例的机制,数据处理系统诸如图1的数据处理系统100提供推测多线程(SMT)环境,其中一个或更多个处理单元106可以按推测方式并发执行多个线程。数据处理系统100利用支持多个并发线程的推测执行的推测版本控制高速缓存(SVC)。SVC可被例如提供在共享L1或L2高速缓存的一部分内,可被分布在与多个不同处理单元106相关联的多个L1或L2高速缓存上,或可被提供为一个或更多个处理单元106以及其处理核心可访问的单独高速缓存结构。在多个线程并发访问相同高速缓存行的情况下,SVC可以存储高速缓存行的多个版本。在SVC中可以用与高速缓存行相关联的版本标识符(VID)区分高速缓存行的版本。因此,例如,多个高速缓存行可以具有相同地址标签,但是具有不同VID,从而将高速缓存行标识为相同高速缓存行的不同版本,或相同高速缓存行集合的多个高速缓存行版本。
说明性实施例的机制收集关于在SVC中使用的高速缓存行的各个版本的原始版本压力数据,并且根据原始版本压力数据产生统计版本压力信息。统计版本压力信息可被软件控制机制用于控制数据处理系统内的线程的执行,以便控制关于各个线程的版本压力。优选地,以与推测版本控制高速缓存和各个处理器的线程执行硬件相关联提供的硬件机制收集原始版本压力数据。基于原始版本压力数据,可由硬件机制产生,或可由软件处理(诸如作为编译器、操作系统等的一部分提供的软件处理)产生统计版本压力信息。
图3是一个说明性实施例的主要操作元件的示例方框图。如上面所述,优选地以硬件实现图3的版本压力模块和推测版本控制高速缓存机制,而其它元件,诸如软件控制单元350,可被实现为在一个或更多个处理设备上执行的软件。
另外,出于简化起见,以与单个推测版本控制高速缓存相关联地提供的单个全局版本压力模块描述图3。然而,应当理解,说明性实施例的机制可被分布在多个推测版本控制高速缓存以及与这些推测版本控制高速缓存相关联的多个全局版本压力模块上。在另一个说明性实施例中,可以结合多个推测版本控制高速缓存使用图3的单个全局版本压力模块,从而单个全局版本压力模块从这些多个推测版本控制高速缓存获得原始版本压力数据。
如图3所示,说明性实施例的机制包括具有相关联的全局版本压力模块320的推测版本控制高速缓存310。全局版本压力模块320保持原始版本压力数据,并且可以包括可以基于这种原始版本压力数据产生版本压力统计信息的硬件和/或软件。另外,运行线程340-346的每个处理器核心370-376具有相关联的线程版本压力模块330-336,用于为其相应的相关联的线程340-346获得原始版本压力数据和/或版本压力统计信息。可以结合线程版本压力模块330-336和/或全局版本压力模块320使用软件控制单元350,以便基于原始版本压力数据和/或版本压力统计信息确定解决推测版本控制高速缓存310内的版本压力问题所采取的适当动作,软件控制单元350可以是编译器、操作系统等。
在图3所示的说明性实施例中,一个线程340-346分别与每个核心370-376以及线程版本压力模块330-336相关联。在其它说明性实施例中,可以存在与每个核心370-376相关联的两个或更多个线程,在该情况下,每个核心的两个或更多个线程与一个公共共享线程版本压力模块逻辑交互。在其它说明性实施例中,每个核心的两个或更多个线程与其专有的线程版本压力模块交互。另外,在其它说明性实施例中,两个或更多个线程可以共享公共线程版本压力模块,而公共线程版本压力模块可以具有所有线程共享的某种逻辑和状态,以及另一种逻辑和状态,所述另一种逻辑和状态是复制的,从而是与核心相关联的每个线程专有的。
在操作中,通常当冲突未中发生时,高速缓存处理器考虑由推测版本控制高速缓存310使用的任意置换策略,确定适合的候选高速缓存行以便从推测版本控制高速缓存310中收回,例如,使用模式(最近使用模式)、肮位(肮高速缓存行需要写回体系结构存储设备,干净的高速缓存行不需要)、推测状态位(推测高速缓存行需要线程粉碎)等。另外,采用说明性实施例的机制,当冲突未中和置换操作发生时,全局版本压力模块320为正被置换的收回的高速缓存行获得保持在推测版本控制高速缓存310内的高速缓存行的版本数目的计数。
可以用许多不同方式获得这种收回的高速缓存行的版本数目的计数。例如,可以通过对与收回的高速缓存行相关联的高速缓存行版本的数目计数的全局版本压力模块320,诸如通过对高速缓存行的关联范围内的位数计数,获得版本数目的计数。可替换地,在某些推测版本控制高速缓存310中,可以在高速缓存行中提供指向推测版本控制高速缓存310内的相同高速缓存行的下一个版本的指针,并且可以按照高速缓存行的每个新版本遍历这些指针,使得收回的高速缓存行的版本数目的计数增加。另外,当高速缓存行被加载推测版本控制高速缓存310时,可以在全局版本压力模块320中与高速缓存行集合相关联地提供计数器。当线程试图修改高速缓存行时,这种计数器可被以在推测版本控制高速缓存310中产生的高速缓存行的每个新版本动态更新。
全局版本压力模块320获得的计数可被全局版本压力模块320的硬件或在数据处理系统的一个或更多个处理器上执行的软件控制单元350使用,以便为与计数器相关联的高速缓存行集合产生版本压力统计信息。可以仅为高速缓存行的特定集合产生版本压力统计信息,或版本压力统计信息可被与推测版本控制高速缓存310保持的其它高速缓存行集合的其它版本压力统计信息聚集在一起。在一个说明性实施例中,可以基于每个高速缓存行产生版本压力统计信息,从而与特定高速缓存行相关联的线程的版本压力可被用于执行一种动作。在另一个说明性实施例中,可以基于每个线程产生版本压力统计信息,从而与该线程访问的所有高速缓存行集合相关联的该线程的版本压力可被用于执行一种动作。在另一个说明性实施例中,可以基于每个高速缓存产生版本压力统计信息,从而高速缓存的版本压力作为整体可被用作执行一种动作的基础。另外,可以在多个推测版本控制高速缓存上聚集版本压力统计信息,从而多个高速缓存的版本压力作为整体可被用作执行一种动作的基础。简言之,任何单独或聚集的原始版本压力数据可被用于产生版本压力统计信息,并且任何单独或聚集的版本压力统计信息可被用于确定解决关于一个或更多个推测版本控制高速缓存上的版本压力的问题的适当动作。
原始版本压力数据、版本压力统计信息中的任意一种或两者被响应于来自线程340-346的访问推测版本控制高速缓存310内的相应高速缓存行集合内的高速缓存行的数据的请求提供给线程版本压力模块330-336。即,当线程诸如线程340向推测版本控制高速缓存310发送正常数据请求,例如,加载/存储请求时,所请求的数据被从推测版本控制高速缓存310返回给线程340,并且与该数据附带地,版本压力数据/信息被从全局版本压力模块320提供给对应于进行请求的线程340的线程版本压力模块330。响应于该请求提供的版本压力数据/信息可以是对应于该请求访问的高速缓存行集合的版本压力数据/信息。如上所述,这种数据/信息还可以包括高速缓存行集合、线程340、作为整体的推测版本控制高速缓存310、数据处理系统内的所有推测版本控制高速缓存等的版本压力统计。即,版本压力统计信息可以是对应于特定线程和/或高速缓存行集合的聚集的统计信息。可替换地,取代发送版本压力统计信息,可以仅将原始版本压力数据传输给线程版本压力模块,由线程版本压力模块或结合线程版本压力模块工作的软件控制单元350基于它们当前拥有的原始版本压力数据分别产生统计信息。
原始版本压力数据/版本压力统计信息的传播可能需要附加导线或附加数据传输周期。然而,应当注意,原始版本压力数据/版本压力统计信息的传输对于系统操作不是至关重要的。因此,在一个说明性实施例中,相对于数据总线390,原始版本压力数据/版本压力统计信息可被通过图3中以版本压力总线380指示的较慢的、较窄的总线从全局版本压力模块320传播到线程版本压力模块330-336。为了帮助增加使用较慢的、较窄的版本压力总线的数据处理系统的性能,在一个说明性实施例中,可由全局版本压力模块320在通过版本压力总线380传输之前预先聚集原始版本压力数据/版本压力统计信息,从而减少通信带宽需求。
在一个说明性实施例,为了进一步减少总线开销,版本压力总线380可被与已经存在于系统上的另一个总线合并,或可以扩展存在于系统上的另一个总线的功能。例如,数据处理系统100可以具有用于监视各种性能计数器的一个或更多个性能监视总线,诸如一个或更多个高速缓存命中率计数器、一个或更多个高速缓存未中延迟计数器、一个或更多个分支命中率计数器等等。其它总线可以存在于数据处理系统100内,并且可被适合地与版本压力总线380合并。在另一个说明性实施例中,版本压力总线380可被与数据总线390或与其相关地址总线合并。
在这种示例实施例中,当数据总线380或其相关地址总线空闲时,版本压力模块320和330-336可以通信。注意,图3示出了高速缓存310和核心370-376之间使用总线的通信。鉴于本描述,本领域的普通技术人员将理解,说明性实施例不限于使用总线通信,并且可被容易地用于利用其它体系结构的系统,诸如任意两对通信代理(诸如核心和高速缓存)之间的专用链路的网络,或总线和专用链路的任意组合。图3所示的体系结构仅意味着一个说明性实施例的例子,并且不旨在是关于本发明的可以做出的各种实现或此处描述的说明性实施例的限制。
如上所述,原始版本压力数据可被用于产生版本压力统计信息,版本压力统计信息然后可被用于确定用于控制推测版本控制高速缓存310上的版本压力的适当动作。各种类型的版本压力统计信息可被例如在全局版本压力模块320、各个线程版本压力模块330-336或软件控制单元350内以说明性实施例的机制产生。这种版本压力统计信息可被基于每个线程、每个高速缓存、每个数据系统等产生。
例如,基于每个线程,版本压力统计的产生可以包括获得原始版本压力数据,即,特定线程触及的高速缓存行的各个集合的计数值,以及然后聚集所述原始版本压力数据以便产生一个或更多个有意义的版本压力统计。这种有意义的版本压力统计包括线程对该线程触及的所有高速缓存行集合上施加的最大版本压力、线程在该线程触及的高速缓存行的各个集合上施加的平均版本压力、线程在整个高速缓存上施加的平均版本压力、线程对整个高速缓存施加的最大版本压力、线程对该线程触及的高速缓存行的所有集合施加的总版本压力等。即,线程施加的版本压力代表高速缓存行的一个或更多个特定集合或作为整体的高速缓存内的高速缓存行的若干版本的特定线程的相对部分。因此,如果特定线程具有高速缓存行集合内的高速缓存行的15个版本的最大原始版本版本压力计数,这个最大值,相对于访问高速缓存行的相同集合或作为整体的高速缓存的其它线程,可以非常大,并且代表特定线程对推测版本控制高速缓存310施加的高版本压力。
作为另一个例子,基于每个高速缓存,可以使用版本压力数据的类似聚集,以便产生关于所有线程340-346和/或推测版本控制高速缓存310内的高速缓存行集合的有意义的版本压力统计。因此,例如,可以产生所有线程和推测版本控制高速缓存310内的所有高速缓存行集合的、所有线程但是仅针对特定高速缓存行集合或多个高速缓存行集合等的最大和平均值。在线程的每次回滚或粉碎之后,通过版本压力统计值的重新计算,版本压力统计可以逐步减少,并且当遇到更高版本压力统计值时可以逐步增加。
原始版本压力数据,即,高速缓存行的各个集合的计数值可被周期地或响应于检测到的事件重置或重新初始化。例如,如果高速缓存行被收回、线程被粉碎等,对应的原始版本压力数据可被在全局版本压力模块320中和/或线程版本压力模块330-336中重置。另外,版本压力统计信息可被类似地周期地或响应于诸如上面所述的某些事件重置或重新初始化。另外,各个线程340-346可以独立于其它线程版本压力模块330-336或全局版本压力模块320内的这种数据/信息的重置/重新初始化,重置/重新初始化原始版本压力数据的它们自己的版本和/或保持在线程版本压力模块330-336内的版本压力统计信息。
应当注意,可以用许多不同形式提供原始版本压力数据和有意义的版本压力统计。例如,可以按照推测版本控制高速缓存310内的高速缓存行集合的高速缓存行的版本的绝对数目提供数据/信息。可替换地,可以按照归一化值,例如,推测版本控制高速缓存310的总容量的分数,提供数据/信息。可以使用原始数据/统计信息的其它格式,而不脱离说明性实施例的精神和范围。
图4是一个示例图,示出了一个说明性实施例的基于原始版本压力数据的有意义版本压力统计的产生。如图4所示,全局版本压力模块405可以为推测版本控制高速缓存的高速缓存行的各个集合产生计数410-432。从这种原始版本压力数据410-432中,全局版本压力模块405可以产生作为整体的推测版本控制高速缓存的版本压力统计信息440-442,并且可选择地,各个线程450-456的版本压力统计信息。另外,响应于来自线程470-472的请求,全局版本压力模块405可以给各个线程版本压力模块460-462提供原始版本压力数据410-432。另外或可替换地,全局版本压力模块405可以响应于来自线程的访问推测版本控制高速缓存内的数据的请求,给各个线程版本压力模块460-462提供作为整体的推测版本控制高速缓存的版本压力统计信息440-442和/或版本压力统计信息450-452。
例如,如图4所示,线程0(标记为470)被示出为已访问或“触及”对应于计数值410、412、414、418、422和428的高速缓存行集合。高速缓存行的这些集合内的高速缓存行的总数为30,对于对应于计数值414的高速缓存行集合,高速缓存行版本的最大数目为15。线程0在所有集合上触及的高速缓存行版本的平均数目为5。类似地,如图4所示,线程1(标记为472)访问或触及对应于计数值412、420、422和432的高速缓存行集合。这些高速缓存行集合内的高速缓存行版本的总数目为10,对于对应于计数值422的高速缓存行集合,高速缓存行版本的最大数目为5。线程1在所有集合上触及的高速缓存行版本的平均数目为2.5。
根据这些值,可以确定线程0(标记为470)相对于线程1(标记为472)给推测版本控制高速缓存施加高的版本压力。因此,可能需要相对于线程0执行适当动作,例如,压制(throttle)推测执行,以便如下面更详细描述的,平衡线程0在推测版本控制高速缓存上施加的版本压力。类似地,线程1给推测版本控制高速缓存施加相对低的版本压力,并且可以增加推测执行。
另外,如图4所示,可以为作为整体的推测版本控制高速缓存产生最大和平均版本压力统计。推测版本控制高速缓存内的所有高速缓存行集合内的高速缓存行版本的总数为71,对于对应于计数值414的高速缓存行集合,高速缓存行版本的最大值为15。推测版本控制高速缓存内的所有集合上的高速缓存行版本的平均数目为5.9(71/12=5.9)。
在一个说明性实施例中,作为整体的推测版本控制高速缓存的最大和平均值可以作为比较各个线程的最大和平均版本压力统计的基础,以便确定特定线程给推测版本控制高速缓存施加相对高的、平均的还是低的版本压力。例如,对于线程0,由于线程的最大版本压力与推测版本控制高速缓存的最大版本压力相同,并且平均版本压力接近作为整体的推测版本控制高速缓存的平均值,可以推断线程1给推测版本控制高速缓存施加相对高的版本压力。对于线程1,最大和平均值低于整体的推测版本控制高速缓存的最大和平均值,并且因此可以认为给推测版本控制高速缓存施加相对低的版本压力。可以建立用于确定最大或平均值是否足够接近或远离作为整体的推测版本控制高速缓存的最大和平均值的各种容限值,以便确定线程具有高版本压力、平均版本压力还是低版本压力。
如上所述,基于由全局版本压力模块和线程版本压力模块收集和/或产生的版本压力统计信息,图3中的软件控制单元350可以发挥功能,以便修改关于在数据处理系统内执行的线程的数目、在数据处理系统内执行的线程所执行的工作数量、在事务存储器系统内执行的事务的持续时间等的数据处理系统的操作。可由软件控制单元350执行何时和如何修改数据处理系统的操作,以便在线程之间平衡版本压力的确定,例如,在相应线程的计算过程中、计算机程序的执行过程中的各种检查点时间、在线程执行完成/失败之后等。
例如,关于响应于版本压力修改数据处理系统的操作以便控制活动线程的数目,软件控制单元350可以通过使得数据处理系统在版本压力相对低时创建附加线程以便增加并行性,并且在版本压力被确定为相对高时销毁线程以便减小版本压力和并行性反应。关于响应于版本压力控制由线程执行的工作数量,软件控制单元350可以通过在版本压力相对低时给已有线程分配大的工作单元以便增加有效并行性,并且在版本压力相对高时给已有线程分配较小的工作单元或使得线程空闲以便减小版本压力和并行性进行反应。关于响应于版本压力控制事务的持续时间,软件控制单元350可以通过在版本压力被确定为相对低时聚集多个推测单元以便降低事务存储器启动/提交开销,并且在版本压力被确定为相对高时分解多个推测单元以便降低版本压力进行反应。
图5是示出了根据说明性实施例的用于解决版本压力的线程压制动作的示例代码部分。采用线程压制动作,如果线程产生条件、其它收益度量和版本压力小于预定阈值,则产生附加的推测线程以便执行工作。本质上,当版本压力低于阈值,并且其它条件和度量指示可以执行推测线程的产生时,这种动作产生更多推测线程。然而,如果达到或超过了阈值,则不产生附加的推测线程。
据以度量版本压力的特定阈值可以动态改变。例如,该阈值可以作为数据处理系统内当前活动的推测线程的数目的函数而改变。例如,在一个说明性实施例中,如果版本压力小于静态预定阈值,例如,50%,非推测线程可以产生推测线程,即,非推测线程给推测版本控制高速缓存施加小于50%的版本压力。在另一个说明性实施例中,当版本压力小于30%时可以产生第一推测线程,并且当版本压力小于20%时可以产生第二推测线程,并且如此类推。因此,阈值随着推测线程执行数目的增加而变得更严格。
基于每个线程的版本压力,非推测线程执行某种工作,以便在确定是否产生附加的推测线程之前收集有意义的版本压力数据是有益的。基于全局版本压力,即,使用作为整体的推测版本控制高速缓存的版本压力信息,当预定数目的线程完成执行时,可以重置全局版本压力统计信息。
在确定版本压力太高之后,软件控制单元350可以粉碎推测线程,以便减小推测版本控制高速缓存上的版本压力。可以基于特定推测线程距离产生它们的非推测线程有多远确定可被粉碎的特定推测线程。例如,如果非推测线程产生两个附加推测线程,第二推测线程可被首先粉碎,其后是第一推测线程。可替换地,可以基于给推测版本控制高速缓存施加最大版本压力的推测线程,给被粉碎的推测线程分配优先级。即,可以首先粉碎给推测版本控制高速缓存施加最大版本压力的推测线程,其后是给推测版本控制高速缓存施加次高版本压力的下一个推测线程,并且依此类推。在另一个说明性实施例中,可以使用这些方法的组合,其中可以选择距离非推测线程最远和施加最高版本压力的推测线程首先粉碎。
图6是示出了根据一个说明性实施例,用于解决版本压力的工作负荷压制动作的示例代码部分。如图6所示,根据版本压力,增加或减少由推测线程执行的推测工作的数量。对于高版本压力,以推测线程执行的较小的工作数量减小了推测的粒度,并且因此减少一般被以推测线程访问或触及的高速缓存行的数量。付与推测线程的工作量可以动态改变,诸如,作为数据处理系统内的活动推测线程的数目的函数而改变。应当注意,在某些说明性实施例内,图6中概述的代码的功能可被组合在图5的代码的功能内。
再次,基于每个线程的版本压力,非推测线程执行某种工作,以便在确定是否产生附加的推测线程之前收集有意义的版本压力数据是有益的。基于全局版本压力,即,使用作为整体的推测版本控制高速缓存的版本压力信息,当预定数目的线程完成执行时,可以重置全局版本压力统计信息。
图7是示出了根据一个说明性实施例,用于解决版本压力的将线程置于空闲动作的示例代码部分。最初,首先创建固定数目的线程,并且每个线程又接手工作。虽然可以按照预期版本压力的函数调整线程的初始数目,此处的方案是通过将某些线程置于空闲状态,动态调整推测线程的有效数目。特别地,如果压力阈值高于给定数量,示出的代码中的“等待”暂停当前线程。在另一个说明性实施例中,示出的代码中的“等待”暂停当前线程,直到版本压力降低到给定阈值之下。还可以响应于经过给定数目的时间或图7中未特别示出的其它事件退出等待状态。将线程置于空闲的时间数量可以是预定的时间数量,或根据包括版本压力在内的各种因素改变的时间数量。应当注意,在某些说明性实施例内,图7中概述的代码的功能可被组合在图5和/或图6的代码的功能内。
图8是示出了根据一个说明性实施例的用于解决版本压力的事务聚集动作的示例图。如图8所示,传统上在与事务相关联的工作完成之后立刻提交事务。然而,采用说明性实施例的机制,事务的工作可被有条件地聚集,直到推测版本控制高速缓存上的版本压力达到或超过阈值为止。
换言之,最初以事务保护的最小可能临界区产生代码。然而,动态确定何时关闭该临界区。即,事务的临界区可被组合到单个事务内,直到确定版本压力太高为止。一旦版本压力太高,事务被关闭并且提交该事务。当然,当确定何时关闭事务时可以考虑其它度量。例如,可以设置聚集的事务的最大数目,并且当版本压力太高或聚集的事务达到这个最大数目时,可以关闭事务。另外,当确定何时关闭事务时,可以考虑并行程度,例如,在相同数据上执行的并发线程的数目。并发线程的数目通常被称为“主人”线程,即,发起所有其它“工人”线程的线程(即,工人线程是执行工作的线程,如图8所示,包括无防护工作和有防护工作)。主人线程可以在全局变量中设置并发线程的数目,该全局变量可被工人线程读取,并且被结合版本压力信息使用,以便帮助它们确定何时动态关闭事务。
可以用若干不同方式选择被聚集在一起的特定事务。例如,导致高版本压力的任务或事务和导致低版本压力的任务或事务可被一起聚集在相同事务内,以便平均它们的版本压力。可替换地,若干低版本压力任务/事务可被聚集在一起。另外,可以在关闭事务之前动态进行关于下一个事务的聚集是否会使事务的预期版本压力超过最大阈值的确定,并且如果不是,下一个事务可被与当前事务聚集。如果下一个事务会使得预期版本压力超过最大阈值,可以关闭事务而不聚集下一个事务。
可以按若干不同方式实现软件控制单元对数据处理系统的操作的修改。主要地,软件控制单元变换计算机程序的代码,以便以上面讨论的各种方式响应版本压力,例如,通过增加/减少推测线程的数目、增加/减少由线程执行的推测工作的数量、聚集/不聚集事务等。当然,说明性实施例的机制可以使用基于确定的版本压力统计的对数据处理系统的操作的其它类型的修改,而不脱离说明性实施例的精神和范围。
图9是概述了根据一个说明性实施例的使用版本压力反馈来调整数据处理系统的操作的示例操作的流程图。如图9所示,操作以收集推测版本控制高速缓存内的高速缓存行集合的原始版本压力数据开始(步骤910)。原始版本压力数据被基于线程版本压力模块的相应线程请求分发给线程版本压力模块(步骤920)。如上面讨论的,例如,可以使用与推测版本控制高速缓存的高速缓存行相关联的计数器获得这种原始版本压力数据。
在线程级和全局级两者产生版本压力统计(步骤930)。基于版本压力统计,确定对数据处理系统的操作执行的修改,以便平衡/减少推测版本控制高速缓存上的版本压力(步骤940)。如上所述,这些版本压力统计可以是基于原始版本压力数据产生的版本压力的任意统计测量。例如,这些版本压力可以是特定线程、作为整体的推测版本控制高速缓存等的最大和平均版本压力。在优选说明性实施例中,产生全局版本压力统计和特定于线程的版本压力统计两者。然而,为了减小硬件成本,或出于其它原因,某些说明性实施例可以仅实施对于整个高速缓存系统、高速缓存分层结构内的特定高速缓存、同时存在于核心内的多个线程、每个个体线程或类似物的版本压力统计。
然后基于确定的将要执行的修改,修改数据处理系统的操作(步骤950)。然后操作结束。如上面讨论的,这些修改可以涉及通过压制推测线程的数目、粉碎推测线程、压制推测线程执行的工作量、使得已有线程进入空闲状态、聚集事务或类似处理来变换代码。可以基于连续、周期或响应于预定事件的发生而重复这种操作。
因此,说明性实施例提供了用于监视线程给推测版本控制高速缓存施加的版本压力,并且使用这种版本压力信息实现数据处理系统的操作的改变,以便减小推测版本控制高速缓存上的版本压力和/或平衡线程施加的版本压力的机制。说明性实施例收集原始版本压力信息,产生版本压力的统计测量,并且使用统计测量来确定给数据处理系统内的代码执行应用何种类型的修改。以这种方式,可以控制在推测版本控制高速缓存上施加的版本压力,以便最小化由于推测版本控制高速缓存上的过高版本压力,粉碎数据处理系统内的推测线程的成本。
除了上面所述之外,如前面所述,说明性实施例还提供了用于使用上面所述的版本压力监视机制,控制使用推测版本控制高速缓存(SVC)的检查点操作的机制。采用这些附加说明性实施例的机制,可以分配SVC,从而SVC的一个部分存储用于读/加载操作的非推测高速缓存行,而SVC的另一个部分存储与写/存储操作相关联的推测高速缓存行。因此,在这些附加说明性实施例中,所有读被视为非推测操作,而所有写操作被视为推测操作。为存储对应于写/存储操作的推测高速缓存行分配的SVC部分可以具有最大的大小,例如,SVC容量的20%。可以基于SVC容量的这个最大大小产生一个或更多个阈值,或该最大大小自身可被用作阈值。当达到这些一个或更多个阈值时,关于SVC的非推测部分内的高速缓存行,可以产生执行代码的当前非推测状态的检查点。
可以响应于导致需要产生一个或更多个检查点的状态的发生,诸如达到或超过一个或更多个阈值,产生一个或更多个检查点。检查点自身可被存储为推测高速缓存行,如果发生了需要回滚对高速缓存行进行的改变的状态,其以后可被置于非推测。例如,这些状态可以包括如果改变应当回滚到代码的不可重放部分执行之前的时间点,使得进入不可重放代码部分(即,不能被重放的代码部分)的代码的执行,或SVC的版本压力满足预定准则(诸如,上面提及的一个或更多个阈值)的状态。如果发生需要回滚的状态,还可以回滚到已有的检查点。例如,这种状态可以包括对缓存数据内的软错误的检测,例如,由于伽马辐射或可能引发一个或更多个高速缓存行内的一个或更多个位的翻转的其它物理现象发生的错误。下面将更详细地描述这些状态中的每一个。
给说明性实施例的版本压力模块提供用于监视这些状态,并且如果出现这种状态则产生中断的逻辑。版本压力模块可以产生这种被在操作系统内接收的中断。操作系统可以启动适当的中断处理器,以便将推测高速缓存行提升到非推测状态,并且启动新检查点高速缓存行的创建。另外,可以提供编译器支持,以便确定代码的执行是否进入代码的不可重放部分,并且如果是的,使得推测高速缓存行被提升到非推测状态,并且在代码的不可重放部分的执行完成之后,初始化新的推测检查点高速缓存行。即,编译器可以插入调用适当的中断处理器、例程、方法等的指令,以便执行这种提升和以后的新推测检查点高速缓存行的初始化。还可以给操作系统提供用于确定可能具有各种来源的中断是否是由于说明性实施例的检查点机制的逻辑,在该情况下,实施推测高速缓存行的提升和新推测检查点高速缓存行的启动。在某些说明性实施例中可以存储检查点高速缓存行的多个版本,并且中断处理器、操作系统等可以确定当需要回滚时使用的检查点高速缓存行的最适合的版本。
图10是示出了根据一个说明性实施例的推测版本控制高速缓存检查点机制的示例图。与推测版本控制高速缓存(SVC)相关联的数据处理系统的操作系统设置指示可用于存储由于执行代码执行的写/存储操作产生的推测高速缓存行的SVC内的高速缓存行的最大数目的一个或更多个阈值。同样,采用这些附加说明性实施例,所有读/加载操作被认为是非推测操作,而所有写/存储操作被认为本质上是推测性的,直到它们的改变被根据此处描述的说明性实施例的机制保持为非推测状态。读/加载操作是非推测性的,这是由于它们不改变高速缓存的状态,并且因此不需要产生新版本的高速缓存行。然而,如果读/加载操作跟在导致新版本和相关版本的高速缓存行的推测写操作之后,则读/加载操作将读取写操作的结果;即,读操作将读取高速缓存行的新版本而不是旧值。这是旧值仅被保留,以便在软错误或迫使系统回滚到以前状态的任意其它状态的情况下,恢复高速缓存的状态的情况。一个或更多个阈值可被与作为整体的SVC、单独的高速缓存行集合、单独的线程、它们的任意组合等相关联。所述阈值可被用于确定,例如,何时将推测高速缓存行转换为非推测状态,以及执行新检查点操作。作为例子,一个或更多个阈值可以是整个SVC容量的10%被以由于推测写/存储的推测高速缓存行填充,或是SVC内的给定高速缓存行集合的多至50%被以由于推测写/存储的推测高速缓存行填充的第一阈值。如果这些状态中的任意一个存在,可以触发提升推测高速缓存行并且产生新检查点的中断。可替换地,可以使用单个阈值,例如,SVC容量的20%被以推测高速缓存行填充。
这些阈值基本上是可以使用前面描述的版本压力模块产生的SVC内的版本压力的测量值。主要差异是现在给版本压力模块提供以下的逻辑和能力:向操作系统产生中断,以便使得执行将推测高速缓存行提升到非推测状态和初始化新检查点的适当中断处理器。这些中断被从全局版本压力模块320或从线程版本压力模块330-336传递给线程340-346,以便中断线程的正常执行,从而执行与特定中断例程相关联的代码,所述特定中断例程与被分配给SVC内的太高版本压力的中断信号或代码相关联。当将中断从全局版本压力模块320传递给至少一个线程340-346时,可以通过版本压力总线380或通过单独的中断总线传递中断。
如图10所示,当执行1010代码时,可以启动检查点1012。这个检查点1012的启动可能是由于检查点1012是代码执行1010过程中的最初检查点1012,或如下面讨论的,存在一种检测状态的发生。作为产生检查点1012的一部分,产生新的版本标识符(VID),并且将其与当前线程相关联。然后,使用这个新的VID,例如,VID X,标记对该高速缓存的所有存储操作。在后续存储中,检索与该线程相关联的VID,并且当访问高速缓存时使用该VID。如果高速缓存中存在命中,即,数据在推测版本控制高速缓存的高速缓存行内,进行关于被写/存储操作“命中”的这个高速缓存行是否也与当前VID X相关联的检查。如果是的,则写/存储可以正常继续。如果当前“命中”的高速缓存行与旧VID相关联,或不与VID相关联,而是非推测性的,则高速缓存需要拷贝这个高速缓存行。这个新拷贝被标记为是推测性的,并且与VID X相关联。然后可以在这个拷贝的高速缓存行上如通常那样继续存储。因此,对于SVC内的检查点,对于自从最后的检查点以来存在存储的每个高速缓存行,存在与新VID相关联的一个附加的推测高速缓存行。可以在数据处理系统的一个或更多个缓冲器内记录1016不被存储在非推测高速缓存内的其它状态信息,诸如程序计数器、系统寄存器的状态等。如果诸如由于代码执行中的故障、软错误等需要代码执行的回滚,检查点推测高速缓存行内的信息以及存储在一个或更多个缓冲器内的状态信息可被以后使用。可由代码自身、操作系统、编译器等执行检查点1012的启动。
在产生检查点1012之后,代码继续执行,根据正被执行的特定代码,代码执行读/加载和写/存储。如上所述,读/加载被视为非推测操作,并且因此,SVC中由于这些读/加载产生的任意高速缓存行被存储在SVC的非推测部分内。由代码的执行所进行的所有写/存储被认为是推测性的,并且因此作为这些写/存储的结果发生的高速缓存行改变被存储在SVC的推测部分内的推测高速缓存行版本内。因此,SVC的推测部分内的推测高速缓存行的数目可以随着执行代码而增加,从而增加SVC内的版本压力。注意,可能不存在为推测部分或非推测部分保留的SVC的物理部分。就在检查点之后,在任意存储之前,通常100%的SVC包含非推测数据。当遇到存储时,创建高速缓存行的新版本(如果原始版本已经存在),或只是推测高速缓存行(如果在写访问时原始版本不存在)。由于如果发生需要使得改变无效的状态,必须回滚对这些高速缓存行的改变,这种版本/推测高速缓存行本质上是推测性的。
在代码执行的稍后时刻,可能遇到并且执行不可重放的代码部分1020。不可重放代码1020可以是执行诸如输入/输出操作、文件操作(诸如读或写文件)、发送消息操作(诸如在网络上发送和接收消息的操作)的代码,与另一个线程共享数据、访问锁(lock)的代码等,如果所述执行代码的状态被回滚到在不可重放代码1020的执行之前发生的检查点,它们不能被重放。即,当执行代码的状态被回滚到检查点时,执行代码的状态被重置为存储在检查点的状态,并且然后执行的代码可被从这种检查点状态重放。不可重放代码1020是影响其它线程的操作,或给在当前执行的线程之外执行的其它代码提供数据的代码。
编译器可以在与不可重放代码1020相关联的可执行代码内插入指令,以便使得所述代码的执行向中断处理器发起中断,在进入不可重放代码1020之前,所述中断将推测高速缓存行提升到非推测状态,或所述指令自身可以将推测高速缓存行提升到非推测状态。因此,与执行代码和特定线程相关联的所有推测高速缓存行被提升到非推测状态,即,推测高速缓存行内描述的改变被持久化到SVC和/或存储器的非推测部分,并且不可重放代码1020执行,其对SVC的改变被非推测性地进行。一旦不可重放代码1020完成执行,编译器插入的指令向操作系统产生中断,操作系统调用中断处理器启动新检查点1030。可替换地,编译器可以插入直接启动新检查点1030的指令。
应当注意,虽然上面假设编译器分析代码,并且在可执行代码中插入用于执行产生中断或将推测高速缓存行提升到非推测状态的操作的指令,说明性实施例不限于此。而是,操作系统可以分析执行代码正在执行的操作,确定这些操作是否指示代码的不可重放部分,并且如果是的,启动中断或代码的执行,以便使得将推测高速缓存行转换为非推测状态,并且在代码的不可重放部分的操作完成之后启动新的检查点。例如,编译器或操作系统可以识别与写I/O设备、在线程之间传递信息等相关联的代码/操作,并且可以在代码中插入指令(编译器)或启动操作(操作系统),以便引发推测高速缓存行到非推测高速缓存行的转变,执行与进入不可重放代码部分和/或产生新的检查点相关联的代码。
在产生新检查点1030时,如上面提到的,产生新版本标识符(VID),并且将其与当前线程相关联。这个新VID,例如,VID X被用于标记对高速缓存的所有存储操作。在后续存储中,检索与该线程相关联的VID,并且当访问高速缓存时使得该VID。如果存在高速缓存中的命中,执行关于高速缓存行是否也与当前VID X相关联的检查。如果是的,则存储可以正常继续。如果当前高速缓存行与旧的VID相关联,或不与VID相关联而是非推测性的,则高速缓存拷贝这个高速缓存行,并且将高速缓存行的拷贝标记为是推测性的并且与VID X相关联。然后可以在这个拷贝的高速缓存行上如通常那样继续存储。不存在于SVC内的状态信息,例如,程序寄存器、系统寄存器、程序计数器等被作为检查点信息记录在一个或更多个缓冲器内。
代码的执行以引发SVC的非推测部分的更新的读/加载操作和引发SVC的推测部分内的推测高速缓存行的数目的增加的写/存储而继续。随着SVC内的推测高速缓存行的数目的增加,版本压力以类似于前面上述的方式增加。这种版本压力可以是关于整个SVC、相关联的高速缓存行集合、特定线程或类似物的。可以在一个或更多个这些级别为这种版本压力建立零个或更多个阈值,例如,整个SVC级别的零个或更多个阈值、相关联的高速缓存行集合级别的零个或更多个阈值、线程级别的零个或更多个阈值等。优选地,在这些级别之一处建立至少一个阈值。
在稍后时刻,SVC关于推测高速缓存行的版本压力可能超过一个或更多个阈值,例如,最大容量阈值,整个SVC的版本压力阈值,SVC级别、线程级别和/或高速缓存行集合级别的版本压力阈值的组合等。如果达到或超过了一个或更多个阈值,对应的版本压力模块向操作系统产生中断1040,操作系统又调用中断处理器,以便处理将推测高速缓存行提升到非推测状态和创建新检查点。产生中断的版本压力模块可以是全局版本压力模块或线程版本压力模块。在基于每个线程形成检查点的系统中,在线程版本压力模块中关联版本压力阈值一般更有益,这是由于在这种系统中,线程是“检查点的单元”。还可以考虑关联每个高速缓存或每个系统版本压力阈值,这将导致向系统内的每个线程产生中断(依次或同时)。在这种系统中,仍然基于每个线程执行检查点,但是可由全局状态触发检查点,诸如一个版本高速缓存具有专用于检查点的太多高速缓存行。在基于每个系统形成检查点的系统内,所有线程在大体相同的时刻产生检查点,这是由于它们使用用于系统内的所有线程的单个共享检查点。在这种系统内,为整个SVC使用单个阈值一般更有益。
响应于中断,操作系统调用执行将存储在SVC的推测部分内的推测高速缓存行提升为非推测状态的操作的中断处理器。简单地通过将与该线程相关联的VID标记为非推测性执行这种提升。这种提升还可能迫使某些以前的非推测行成为是无效的。例如,假设存在一个高速缓存行,它存在两个版本:VID X的推测版本和非推测版本。当VID X被提升为非推测性时,与VID X相关联的高速缓存行成为新的非推测状态。结果,由于具有VID X的高速缓存行的版本现在是新的非推测版本,为回滚到以前检查点时刻的旧状态的目的而保持的旧的非推测行现在是无效的。因此,在将VID X提升到非推测状态的处理中,仅有还存在其VID X版本的非推测高速缓存行是无效的。
一旦推测高速缓存行被提升到非推测状态,中断处理器发起新检查点1050的创建。新检查点1050的创建可以包括将非推测高速缓存行的非推测状态存储为SVC1060的推测部分内的一个或更多个检查点高速缓存行。另外,未存储在SVC内的状态信息,例如,程序计数器、系统寄存器和其它状态信息可被保持在一个或更多个缓冲器1070内。
应当理解,在检查点之间,可以存在可能检测到执行代码故障、软错误等的情况。例如,可以使用纠错码(ECC)、奇偶数据等标识存储在SVC的高速缓存行内的数据中的错误。这些错误,例如,可以是由于可引发高速缓存行内的位翻转状态,并且从而在存储的数据中引入错误的伽马射线等引起的软错误。可以通过ECC、奇偶数据等检测这种软错误。处理器、处理器存储器、系统存储器、操作系统、版本压力模块等可以具有用于执行这种检测和用于在检测到这种错误的情况下产生中断的相关联的逻辑。处理器、存储器、操作系统、版本压力模块等内可以存在使得处理器、存储器控制器、操作系统、版本压力模块等能够纠正错误的附加逻辑。在这种情况下,当错误可被纠正时,不需要产生中断以便回滚到以前的检查点。
可以在操作系统中接收中断,操作系统调用适当的中断处理器,以便执行回滚在检查点之间对非推测高速缓存行进行的任意改变的一个或更多个操作。即,选择发生在检测到的错误之前的适合的检查点,并且使用一个或更多个检测点高速缓存行内的对应的状态信息,以便将非推测高速缓存行的状态恢复到检查点的状态。此后,事件可被重放,代码的执行可被重新开始等,从而纠正错误。
图11是一个示例图,示出了根据一个说明性实施例的关于软错误的发生的推测版本控制高速缓存检查点机制。除了示出了在推测版本控制高速缓存(SVC)中检测到软错误1110、1120和1130之外,图11本质上与图10相同。如上所述,这些软错误可能是由于引发位翻转或与软件相关的其它错误的伽马射线产生的。响应于这些错误,处理器、存储器控制器、版本压力模块(全局或线程的)等可以向操作系统产生中断,操作系统确定该中断是否发生在作为检查点的代码部分的执行过程中,即,正被执行的代码不是非可重放代码。如果错误发生在非可重放代码部分期间,则遇到了不可恢复错误。在这种情况下,可以一般地以不可恢复错误中断的形式通知应用程序发生了不可恢复错误。这可以导致基于错误的应用程序终止。还可以导致应用程序恢复到用户级别检查点。例如,某些模拟应用程序将每100个(或任意其它静态或动态数目)时间步长获得的结果存储到硬盘,以便使得用户能够以后可以观察模拟结果。在这种系统中,应用程序通常具有“用户级”检查点,在该检查点可以重新开始以前遇到的0 mod 100个时间步长处的整个模拟。这种用户级检查点可被结合这些说明性实施例使用,以便响应于来自代码的不可重放部分的不可恢复错误,提供到用户级检查点的恢复。
如果在执行检查点代码时发生中断,则代码的执行可被回滚到以前检查点的状态。例如,软错误1110可以向操作系统引发中断,由于错误未发生在不可重放代码部分1020内,操作系统确定错误发生在检查点代码中。因此,操作系统或与操作系统相关联的中断处理器执行将执行代码的状态和SVC的改变回滚到检查点1010的操作。即,使用存储在一个或更多个缓冲器内的状态和存储在SVC的检查点高速缓存行内的高速缓存行的状态恢复对应的程序计数器、系统寄存器等和SVC的非推测高速缓存行的状态。因此,执行代码的状态被返回以前检查点时刻的状态。类似地,软错误1120可以引发导致代码执行的状态被返回检查点1030时刻的状态的中断,并且软错误1130可以引发导致代码执行的状态被返回检查点1040时刻的状态的中断。
因此,说明性实施例提供了用于设置关于SVC内的版本压力的阈值的机制,用于确定何时产生执行代码和SVC的状态的检查点。说明性实施例的版本压力模块提供有用于在达到或超过这种版本压力阈值的情况下产生中断的逻辑。响应于这种中断,执行将推测高速缓存行提升到非推测状态,并且然后产生新检查点的操作。检查点可被用于在检测到软错误或执行代码的其它故障的情况下,回滚对SVC和系统的状态信息的改变。
如图12所示,图12类似于图3,版本压力模块1220和1230-1236具有用于在达到或超过与SVC1210相关联的一个或更多个阈值的情况下产生中断的逻辑1280-1288。这些阈值可被从操作系统1290传递给版本压力模块1220和1230-1236,并且可被与逻辑1280-1288相关联地存储,以便用于确定何时产生中断。这些阈值可以是用户指定的,并且存储在与操作系统相关联的系统寄存器或操作系统可访问的另一个存储器位置内。这些阈值可以与特定线程、整个SVC相关联,或可以是可用于每个单独线程、高速缓存行集合等的一般阈值。可将单个阈值或阈值组合应用于线程、SVC或高速缓存行集合。
如上面讨论的,诸如关于图3讨论的,全局版本压力模块1220可以收集整个SVC1210、每个单独线程、高速缓存行集合等的版本压力信息。这种信息可被传递给线程版本压力模块1230-1236,线程版本压力模块1230-1236然后可以产生单独的线程的版本压力统计。可替换地,全局版本压力模块1220可以产生版本压力统计,并且将它们传递给线程版本压力模块1230-1236。在全局或线程版本压力模块1220和1230-1236中产生的统计可用于单独的线程、整个SVC、单独的高速缓存行集合等。
中断逻辑1280-1288确定原始版本压力信息或在其它说明性实施例中版本压力统计是否达到一个或更多个版本压力阈值。例如,在高速缓存宽度级别,SVC中可以最多存在n%的高速缓存行用于推测高速缓存行。另外,在高速缓存行集合级别,示例阈值可以是给定高速缓存行集合内最多m%的高速缓存行用于推测高速缓存行。另外,在线程级别,示例阈值可以是最多k%的高速缓存行用于给定线程的推测高速缓存行。还可以使用这些类型的阈值的组合,例如,如果整体的10%或单个高速缓存行集合中多至50%的高速缓存行被以推测高速缓存行数据填充,则产生中断。
可以通过操作系统中的适当设置来允许/禁止使用这种中断阈值。例如,如果编译器、操作系统或版本压力模块花费太多时间执行阈值检查,可以允许/禁止一个或更多个阈值,以便允许更好的系统性能。作为另一个例子,如果正在执行的代码内已经嵌入了某种检查点代码,可以允许/禁止各种阈值,以便修改由版本压力模块设置的检查点。
操作系统1290,以及可能的编译器(未示出),包括用于分配系统存储器缓冲器1295以便记录重新开始一个处理所需的状态信息的逻辑,即,不在存储器或用户可访问地址空间内的信息,例如,特殊系统寄存器、程序计数器等。另外,操作系统1290和/或编译器具有用于在进入不可重放代码之前将SVC推测高速缓存行提升到非推测状态的逻辑。这种逻辑可被以与操作系统相关联的中断处理器,或编译器中的用于在包括不可重放代码的执行代码中插入指令以便在执行代码进入例程、模块、方法等之前执行这种操作的逻辑的形式提供。另外,这种逻辑还可以将状态记录为新的检查点,并且在不可重放代码完成执行之后重新开始推测版本高速缓存状态。
另外,操作系统1290和/或编译器包括用于验证中断与具有检查点的代码(即,非不可重放代码)相关联的逻辑。操作系统1290和/或编译器具有用于在接收到中断并且中断与具有检查点的代码相关联的情况下,将执行分支到中断处理器,从而在将推测高速缓存行提升到非推测状态之后创建新检查点的逻辑。
当检测到指示故障、软错误等的状态时,操作系统1290或版本压力模块1220或1230-1236可以通过将改变回滚到以前的检查点执行从这些错误中恢复的操作。如果检测到这种错误,操作系统1290可以确定是否在代码的执行处于不可重放代码部分时检测到错误。假设代码的执行不是处于不可重放代码部分,选择确实是在错误发生之前创建的最近的检查点。可替换地,可以选择具有在该错误之前的高可能性的最近检查点。在另一种替换方案中,可以基于操作系统的动态确定来选择最旧的(最安全)/最近的(最小重新执行开销)检查点。如果中断处于不可重放代码部分,则不能使用回滚到已知的有效检查点从软错误恢复,并且因此错误将被传播给应用程序。在该情况下,应用程序可以暂停或终止,同时指示用户已经遭受不可恢复的错误。在其它情况下,应用程序可以具有允许其从不可恢复的错误中恢复的附加逻辑。例如,某些模拟物理现象(诸如,天气、分子动力学等)的应用程序不时地将中间结果保存到硬盘上的文件内,从而允许用户观察正被模拟的物理现象的状态。在这种情况下,遭受这种不可恢复错误的应用程序有机会回到保存到文件的最后状态,并且从那里重新开始整个计算。这种重新开始可能需要用户的手工干预。
如果系统保持单个以前的检查点,这种检查点之间的选择不是必须的。然而,应当注意,虽然根据单个以前的检查点描述上面的实施例,实际上,如果希望可以在SVC中保持多个以前的检查点。例如,可以保持两个以前的检查点。在这种情况下,可以执行这种选择,以便在各种保持的检查点之间进行回滚到已知状态的最佳检查点的选择。
一旦操作系统1290选择了检查点,通过首先使得比选择的检查点更近的所有检查点无效,诸如通过将其版本标识符标记为无效,执行回滚操作。使用存储在一个或更多个缓冲器和SVC内的一个或更多个检查点高速缓存行内的状态信息,将检查点内的状态重新安装到适当寄存器、计数器、高速缓存行等内。然后,重新启动SVC,并且恢复代码的执行。
因此,说明性实施例还提供了用于启动检查点和与SVC内的版本压力相关联的一个或更多个阈值的机制。另外,这些机制考虑了代码的执行进入代码的不可重放部分。并且,提供了检测错误或故障,并且响应于对这些错误或故障的检测,从版本压力模块产生中断,从而可以执行适当操作,以便将改变回滚到说明性实施例的机制创建的以前的检查点的机制。
图13是一个流程图,概述了根据一个说明性实施例,用于响应于达到或超过一个或更多个版本压力阈值产生中断的示例操作。除非另外指出,图13中的操作和各个步骤可被在例如说明性实施例的一个或更多个版本压力模块内执行。
如图13所示,操作通过接收用于执行检查点的一个或更多个版本压力阈值开始(步骤1310)。如上面讨论的,例如,这些阈值可被从操作系统接收,并且可以是用户定义的,以便实现对抗错误和故障的所希望的安全级别。
此后,收集或接收高速缓存行集合的原始版本压力数据(步骤1320)。例如,原始版本压力数据可由全局版本压力模块收集,并且被分发给线程版本压力模块,从而线程版本压力模块从全局版本压力模块接收这种数据。这种原始版本压力数据是在一个或更多个级别,例如,SVC级别、线程级别、高速缓存行集合级别等计算版本压力统计(步骤1330)的基础。前面已经在上文中根据各种说明性实施例描述了这种计算。将这些版本压力统计和一个或更多个版本压力阈值进行比较(步骤1340),并且做出关于是否应当产生检查点的判断(步骤1350)。例如,这种判断可以确定是否达到或超过了指示应当产生检查点的一个或更多个版本压力阈值。如上所述,在某些说明性实施例中,可以组合一个或更多个版本压力阈值,以便产生在产生新检查点之前必须达到或超过的更复杂的状态。
如果将要产生检查点,则向操作系统产生指示需要产生新检查点的中断(步骤1360)。然后操作系统调用适当的中断处理器,以便在SVC和系统缓冲器内产生检查点(步骤1370)。即,检查点涉及在SVC的推测部分中存储检查点高速缓存行,并且在系统存储器缓冲器内存储不保持在SVC内的状态信息,以便如果需要回滚操作则在稍后使用。然后操作终止。
图14是一个流程图,概述了根据一个说明性实施例的用于产生检查点的示例操作。除非另外指出,图13中的操作和各个步骤可被在例如说明性实施例的中断处理器、操作系统等内执行。
如图14所示,操作通过挂起代码的执行开始(步骤1410)。SVC内的推测高速缓存行被提升到非推测状态(步骤1420)。通过以SVC内的推测高速缓存行产生一个或更多个检查点高速缓存行(步骤1430),并且在系统存储器缓冲器内存储检查点信息(步骤1440)产生检查点。然后重新开始代码的执行(1450),并且操作终止。如前面解释的,步骤1430包括产生与线程相关联的新的推测版本id(VID),从而由线程产生的任意其它存储/写操作被以该新VID标记为是推测性的。
图15是一个流程图,概述了根据一个说明性实施例的用于执行回滚操作的示例操作。图15概述的操作可由操作系统执行,或与操作系统相关联地执行。例如,操作1510和1520可由版本压力模块执行,而其它操作可由操作系统执行。可替换地,所有操作可由操作系统执行。
如图15所示,操作以检测存储在SVC内的数据中的错误或执行代码的故障开始(步骤1510)。如上所述,例如,这种错误可以是由于伽马射线或引发SVC内的位翻转的其它错误源产生的软错误。响应于检测到错误或故障,做出关于发生的错误是否是由于代码的不可重放部分内的代码的执行的判断(步骤1520)。如果是的,产生指示该错误是不可恢复错误的通知和/或中断(步骤1530),并且然后执行不可恢复错误的正常中断处理,例如,终止应用程序、调用恢复到用户级检查点的恢复逻辑等(未示出)。如果错误/故障不是由于代码的不可重放部分内的代码的执行产生的,则向操作系统产生中断(步骤1540)。选择以前的检查点用于执行回滚操作(步骤1550)。如前面所述,如果系统仅仅保持一个以前的检查点,则可以避免这种选择。然而,如果保持多于一个以前的检查点,则选择最无疑地在错误/故障发生之前并且最小化必须的重新执行数量的检查点。
一旦选择了检查点,使用为所选择的检查点存储在SVC内的一个或更多个检查点高速缓存行内的状态信息和系统存储器缓冲器内的状态信息执行回滚操作(步骤1560)。将状态恢复到该检查点的时刻的状态之后,重新开始代码的执行,并且操作终止。
如上所述,应当理解说明性实施例可以采用完整硬件实施例、完整软件实施例或包含硬件和软件元素两者的组合的形式。在一个示例实施例中,说明性实施例的机制被实现在软件或程序代码中,所述软件或程序代码包括但不限于固件、驻留软件、微码等。
适用于存储和/或执行程序代码的数据处理系统将包括直接或通过系统总线间接耦连到存储器元件的至少一个处理器。存储器元件可以包括在程序代码的实际执行过程中采用的局部存储器、大容量存储设备、以及提供至少某些程序代码的临时存储以便减少必须在执行过程中从大容量存储设备检索代码的次数的高速缓存存储器。
输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备等)可被直接或通过中间I/O控制器耦连到系统。网络适配器也可被耦连到系统,以便使得数据处理系统能够通过中间的专有或公共网络耦连到其它数据处理系统或远程打印机或存储设备。调制解调器、缆线调制解调器和以太网卡仅是几种当前可获得类型的网络适配器。
已经出于说明和描述的目的给出了本发明的描述,并且该描述不旨在是穷尽性的或局限于公开形式的发明。本领域的技术人员将明了许多修改和变形。选择和描述这些实施例以便最好地解释本发明的原理、实际应用,并且使得本领域的其它技术人员能够理解本发明的具有适用于构想的特定用途的各种修改的各种实施例。
Claims (20)
1.一种数据处理系统中的方法,用于在所述数据处理系统的推测版本控制高速缓存中产生检查点,该方法包括:
由所述数据处理系统的至少一个处理器执行所述数据处理系统内的代码,其中所述代码访问所述推测版本控制高速缓存中的高速缓存行;
由所述数据处理系统确定指示需要在所述推测版本控制高速缓存中产生检查点的第一条件是否发生,其中所述检查点是一个或更多个推测高速缓存行,所述推测高速缓存行出于响应于发生第二条件执行回滚操作以便使对与所述一个或更多个推测高速缓存行对应的高速缓存行的改变无效的目的,存储状态信息;和
响应于确定发生了第一条件,在推测版本控制高速缓存中产生所述检查点,其中所述推测版本控制高速缓存是存储相同高速缓存行的多个版本的高速缓存,并且每个版本用于一个推测执行。
2.如权利要求1所述的方法,还包括:在所述数据处理系统中存储与所述推测版本控制高速缓存相关联的一个或更多个版本压力阈值,其中确定指示需要在所述推测版本控制高速缓存中产生所述检查点的第一条件是否发生包括:在代码执行时确定所述推测版本控制高速缓存的版本压力是否达到或超过所述一个或更多个版本压力阈值,其中版本压力指推测版本控制高速缓存将没有足够空间存储高速缓存行的所有各种版本以便支持数据处理系统内的线程的推测执行的可能性。
3.如权利要求2所述的方法,其中所述一个或更多个版本压力阈值包括推测版本控制高速缓存级别、相关联的高速缓存行级别集合和单独的线程级别之一的一个或更多个阈值。
4.如权利要求1所述的方法,其中所述推测版本控制高速缓存包括用于存储与读/加载操作相关联的非推测高速缓存行的第一部分和用于存储与写/存储操作相关联的推测高速缓存行的第二部分。
5.如权利要求4所述的方法,其中第二部分具有基于所述推测版本控制高速缓存的总容量的最大大小限制,并且其中确定指示需要在所述推测版本控制高速缓存中产生检查点的第一条件是否发生包括:确定所述推测版本控制高速缓存中的第二部分中的高速缓存行数目是否达到或超过基于所述最大大小限制的版本压力阈值,其中版本压力指推测版本控制高速缓存将没有足够空间存储高速缓存行的所有各种版本以便支持数据处理系统内的线程的推测执行的可能性。
6.如权利要求1所述的方法,其中第二条件是对所述推测版本控制高速缓存中的缓存数据中的软错误的检测。
7.如权利要求2所述的方法,其中由与所述推测版本控制高速缓存相关联的全局版本压力模块或线程版本压力模块确定所述推测版本控制高速缓存的版本压力是否达到或超过所述一个或更多个版本压力阈值。
8.如权利要求1所述的方法,其中在所述推测版本控制高速缓存中产生检查点包括:
响应于确定已经发生第一条件,向操作系统产生中断;和
由所述操作系统启动用于将推测版本控制高速缓存中的推测高速缓存行提升到非推测状态,并且启动所述推测版本控制高速缓存中的所述检查点创建的中断处理器。
9.如权利要求8所述的方法,其中提升所述推测版本控制高速缓存中的所述推测高速缓存行包括将与所述推测版本控制高速缓存中的所述推测高速缓存行相关联的版本标识符标记为非推测性的,并且使得对应的高速缓存行的以前的非推测版本无效。
10.如权利要求1所述的方法,其中确定指示需要在所述推测版本控制高速缓存中产生检查点的第一条件是否发生包括:确定代码的执行是否进入代码的不可重放部分,并且其中响应于确定代码的执行进入代码的不可重放部分,产生检查点。
11.如权利要求10所述的方法,其中所述不可重放代码是执行输入或输出操作、读或写文件、在网络上发送或接收消息、与另一个线程共享数据、或访问资源上的锁中的一个的代码。
12.如权利要求10所述的方法,其中响应于确定第一条件已经发生在推测版本控制高速缓存中产生检查点包括:
在所述不可重放代码之前执行一个或更多个第一编译器插入的指令,所述指令使得产生用于将所述推测版本控制高速缓存中的推测高速缓存行提升到非推测状态的第一中断;和
在所述不可重放代码之后执行一个或更多个第二编译器插入的指令,所述指令使得产生第二中断,第二中断用于在所述不可重放代码的执行之后产生检查点。
13.如权利要求1所述的方法,其中产生检查点包括:
产生新的版本标识符;
将所述新的版本标识符与作为执行所述代码的一部分执行的当前线程相关联;和
由所述当前线程在对所述推测版本控制高速缓存的后续存储中利用所述新的版本标识符。
14.如权利要求13所述的方法,其中在对所述推测版本控制高速缓存的后续存储中利用所述新的版本标识符包括:
确定所述当前线程的存储操作是否在所述推测版本控制高速缓存中导致高速缓存命中;
响应于高速缓存命中,检查由存储操作命中的高速缓存行是否与所述新的版本标识符相关联;和
响应于由所述存储操作命中的高速缓存行不与所述新的版本标识符相关联,将由所述存储操作命中的高速缓存行拷贝到新的推测高速缓存行,将所述新的版本标识符与所述新的推测高速缓存行相关联,并且对所述新的推测高速缓存行执行存储操作。
15.如权利要求1所述的方法,其中产生检查点包括:在所述推测版本控制高速缓存中的推测高速缓存行中存储第一状态信息,和在所述数据处理系统的一个或更多个缓冲器中存储第二状态信息。
16.如权利要求15所述的方法,其中第一状态信息是对应于所述推测高速缓存行的非推测高速缓存行的非推测状态信息,并且其中第二状态信息包括程序计数器的状态、程序寄存器的状态或系统寄存器的状态中的一个或更多个。
17.如权利要求1所述的方法,还包括:
确定在代码的执行过程中是否发生了第二条件;
确定第二条件是否发生在代码的不可重放部分的执行过程中;和
响应于第二条件不发生在代码的不可重放部分的执行过程中,将对与所述推测高速缓存行对应的高速缓存行的改变回滚到对应于所述检查点的状态。
18.如权利要求17所述的方法,还包括:
响应于确定第二条件发生在代码的不可重放部分的执行过程中,产生指示不可恢复错误的通知或中断。
19.一种数据处理系统中的设备,用于在所述数据处理系统的推测版本控制高速缓存中产生检查点,该设备包括:
用于由所述数据处理系统的至少一个处理器执行所述数据处理系统内的代码的装置,其中所述代码访问所述推测版本控制高速缓存中的高速缓存行;
用于由所述数据处理系统确定指示需要在所述推测版本控制高速缓存中产生检查点的第一条件是否发生的装置,其中所述检查点是一个或更多个推测高速缓存行,所述推测高速缓存行出于响应于发生第二条件执行回滚操作以便使对与所述一个或更多个推测高速缓存行对应的高速缓存行的改变无效的目的,存储状态信息;和
用于响应于确定发生了第一条件,在推测版本控制高速缓存中产生所述检查点的装置,其中所述推测版本控制高速缓存是存储相同高速缓存行的多个版本的高速缓存,并且每个版本用于一个推测执行。
20.一种数据处理系统,包括:
一个或更多个处理器,每个处理器具有版本控制高速缓存模块以实现在所述处理器的硬件中的至少一个线程级别;
耦连到所述一个或更多个处理器的推测版本控制高速缓存存储设备;
耦连到所述推测版本控制高速缓存存储设备的以硬件实现的全局版本控制高速缓存模块,其中:
所述一个或更多个处理器配置为执行访问所述推测版本控制高速缓存存储设备中的高速缓存行的代码;
所述以硬件实现的全局版本控制高速缓存模块或所述至少一个线程级别版本控制高速缓存模块中的至少一个配置为确定指示需要在所述推测版本控制高速缓存中产生检查点的第一条件是否发生,其中所述检查点是一个或更多个推测高速缓存行,所述推测高速缓存行出于响应于发生第二条件执行回滚操作以便使对与所述一个或更多个推测高速缓存行对应的高速缓存行的改变无效的目的,存储状态信息;和
所述推测版本控制高速缓存存储设备配置为响应于确定发生了第一条件存储所述检查点,其中所述推测版本控制高速缓存是存储相同高速缓存行的多个版本的高速缓存,并且每个版本用于一个推测执行。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/544,704 | 2009-08-20 | ||
US12/544,704 US8521961B2 (en) | 2009-08-20 | 2009-08-20 | Checkpointing in speculative versioning caches |
PCT/US2010/042383 WO2011022143A1 (en) | 2009-08-20 | 2010-07-19 | Checkpointing in speculative versioning caches |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102473156A CN102473156A (zh) | 2012-05-23 |
CN102473156B true CN102473156B (zh) | 2014-12-17 |
Family
ID=43606212
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201080036698.2A Expired - Fee Related CN102473156B (zh) | 2009-08-20 | 2010-07-19 | 推测版本控制高速缓存内的检查点 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8521961B2 (zh) |
JP (1) | JP5647686B2 (zh) |
CN (1) | CN102473156B (zh) |
DE (1) | DE112010003330B4 (zh) |
GB (1) | GB2485083B (zh) |
WO (1) | WO2011022143A1 (zh) |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012173778A (ja) * | 2011-02-17 | 2012-09-10 | Sony Corp | 管理装置、および管理方法 |
US8775863B2 (en) | 2011-05-31 | 2014-07-08 | Freescale Semiconductor, Inc. | Cache locking control |
US8856587B2 (en) * | 2011-05-31 | 2014-10-07 | Freescale Semiconductor, Inc. | Control of interrupt generation for cache |
WO2013101078A1 (en) * | 2011-12-29 | 2013-07-04 | Intel Corporation | Support for speculative ownership without data |
US9570124B2 (en) | 2012-01-11 | 2017-02-14 | Viavi Solutions Inc. | High speed logging system |
CN104205061A (zh) | 2012-03-30 | 2014-12-10 | 惠普发展公司,有限责任合伙企业 | 软件开发活动 |
GB2519107B (en) * | 2013-10-09 | 2020-05-13 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing speculative vector access operations |
CN104699574B (zh) * | 2013-12-09 | 2018-04-20 | 华为技术有限公司 | 一种建立处理器Cache检查点的方法、装置及系统 |
CN103677977B (zh) * | 2013-12-19 | 2017-05-17 | 贝壳网际(北京)安全技术有限公司 | 清理移动终端中临时文件的方法、装置和移动终端 |
US9317379B2 (en) | 2014-01-24 | 2016-04-19 | International Business Machines Corporation | Using transactional execution for reliability and recovery of transient failures |
US9323568B2 (en) | 2014-01-24 | 2016-04-26 | International Business Machines Corporation | Indicating a low priority transaction |
US9304935B2 (en) | 2014-01-24 | 2016-04-05 | International Business Machines Corporation | Enhancing reliability of transaction execution by using transaction digests |
US9424071B2 (en) | 2014-01-24 | 2016-08-23 | International Business Machines Corporation | Transaction digest generation during nested transactional execution |
US9465746B2 (en) | 2014-01-24 | 2016-10-11 | International Business Machines Corporation | Diagnostics for transactional execution errors in reliable transactions |
US9672298B2 (en) * | 2014-05-01 | 2017-06-06 | Oracle International Corporation | Precise excecution of versioned store instructions |
US10019363B2 (en) | 2015-04-03 | 2018-07-10 | Hewlett Packard Enterprise Development Lp | Persistent memory versioning and merging |
US10496421B1 (en) * | 2015-09-29 | 2019-12-03 | EMC IP Holding Company LLC | Simulation of asynchronous modifications of shared data objects by a distributed application |
US10270773B2 (en) | 2015-11-04 | 2019-04-23 | International Business Machines Corporation | Mechanism for creating friendly transactions with credentials |
US10235297B2 (en) * | 2015-11-04 | 2019-03-19 | International Business Machines Corporation | Mechanism for creating friendly transactions with credentials |
US10223268B2 (en) * | 2016-02-23 | 2019-03-05 | International Business Systems Corporation | Transactional memory system including cache versioning architecture to implement nested transactions |
US10261843B2 (en) | 2017-03-16 | 2019-04-16 | International Business Machines Corporation | Speculative execution management in a coherent accelerator architecture |
DE112018003358T5 (de) * | 2017-06-28 | 2020-03-12 | Nvidia Corporation | Speichertyp, der cache-fähig und dennoch durch spekulative anweisungen unzugänglich ist |
US11169805B2 (en) * | 2018-04-30 | 2021-11-09 | Hewlett Packard Enterprise Development Lp | Dynamic processor cache to avoid speculative vulnerability |
US11221886B2 (en) | 2018-05-17 | 2022-01-11 | International Business Machines Corporation | Optimizing dynamical resource allocations for cache-friendly workloads in disaggregated data centers |
US10841367B2 (en) | 2018-05-17 | 2020-11-17 | International Business Machines Corporation | Optimizing dynamical resource allocations for cache-dependent workloads in disaggregated data centers |
US10936374B2 (en) | 2018-05-17 | 2021-03-02 | International Business Machines Corporation | Optimizing dynamic resource allocations for memory-dependent workloads in disaggregated data centers |
US10601903B2 (en) | 2018-05-17 | 2020-03-24 | International Business Machines Corporation | Optimizing dynamical resource allocations based on locality of resources in disaggregated data centers |
US11330042B2 (en) | 2018-05-17 | 2022-05-10 | International Business Machines Corporation | Optimizing dynamic resource allocations for storage-dependent workloads in disaggregated data centers |
US10893096B2 (en) | 2018-05-17 | 2021-01-12 | International Business Machines Corporation | Optimizing dynamical resource allocations using a data heat map in disaggregated data centers |
US10977085B2 (en) | 2018-05-17 | 2021-04-13 | International Business Machines Corporation | Optimizing dynamical resource allocations in disaggregated data centers |
US11080133B1 (en) | 2018-08-27 | 2021-08-03 | Johnny Yau | Systems and methods for reduced latency in data processing |
US10915326B1 (en) * | 2019-07-31 | 2021-02-09 | Micron Technology, Inc. | Cache systems and circuits for syncing caches or cache sets |
US11010288B2 (en) * | 2019-07-31 | 2021-05-18 | Micron Technology, Inc. | Spare cache set to accelerate speculative execution, wherein the spare cache set, allocated when transitioning from non-speculative execution to speculative execution, is reserved during previous transitioning from the non-speculative execution to the speculative execution |
US10908915B1 (en) | 2019-07-31 | 2021-02-02 | Micron Technology, Inc. | Extended tags for speculative and normal executions |
US11200166B2 (en) | 2019-07-31 | 2021-12-14 | Micron Technology, Inc. | Data defined caches for speculative and normal executions |
US11048636B2 (en) | 2019-07-31 | 2021-06-29 | Micron Technology, Inc. | Cache with set associativity having data defined cache sets |
US11194582B2 (en) | 2019-07-31 | 2021-12-07 | Micron Technology, Inc. | Cache systems for main and speculative threads of processors |
US11061824B2 (en) * | 2019-09-03 | 2021-07-13 | Microsoft Technology Licensing, Llc | Deferring cache state updates in a non-speculative cache memory in a processor-based system in response to a speculative data request until the speculative data request becomes non-speculative |
CN111241010B (zh) * | 2020-01-17 | 2022-08-02 | 中国科学院计算技术研究所 | 一种基于缓存划分及回滚的处理器瞬态攻击防御方法 |
US11397677B2 (en) | 2020-04-30 | 2022-07-26 | Hewlett Packard Enterprise Development Lp | System and method for tracking persistent flushes |
US20220269614A1 (en) * | 2021-02-22 | 2022-08-25 | Microsoft Technology Licensing, Llc | Treating main memory as a collection of tagged cache lines for trace logging |
CN113778758A (zh) * | 2021-09-26 | 2021-12-10 | 杭州安恒信息技术股份有限公司 | 一种数据恢复方法、装置、设备及可读存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1509436A (zh) * | 2001-05-16 | 2004-06-30 | 先进微装置公司 | 以推测方式使高速缓存中的缓存行失效的方法及系统 |
Family Cites Families (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2513060B2 (ja) * | 1990-03-15 | 1996-07-03 | 日本電気株式会社 | 故障回復型計算機 |
JPH07168730A (ja) * | 1993-12-15 | 1995-07-04 | Toshiba Corp | チェックポイント採取方式 |
JPH10240620A (ja) * | 1996-12-26 | 1998-09-11 | Toshiba Corp | コンピュータシステムおよび同システムにおけるチェックポイントイメージ保存方法 |
US7065540B2 (en) | 1998-11-24 | 2006-06-20 | Oracle International Corporation | Managing checkpoint queues in a multiple node system |
US6353881B1 (en) | 1999-05-17 | 2002-03-05 | Sun Microsystems, Inc. | Supporting space-time dimensional program execution by selectively versioning memory updates |
US6457104B1 (en) | 2000-03-20 | 2002-09-24 | International Business Machines Corporation | System and method for recycling stale memory content in compressed memory systems |
US6587937B1 (en) | 2000-03-31 | 2003-07-01 | Rockwell Collins, Inc. | Multiple virtual machine system with efficient cache memory design |
JP3632635B2 (ja) * | 2001-07-18 | 2005-03-23 | 日本電気株式会社 | マルチスレッド実行方法及び並列プロセッサシステム |
US7127561B2 (en) | 2001-12-31 | 2006-10-24 | Intel Corporation | Coherency techniques for suspending execution of a thread until a specified memory access occurs |
US6988165B2 (en) | 2002-05-20 | 2006-01-17 | Pervasive Software, Inc. | System and method for intelligent write management of disk pages in cache checkpoint operations |
JP4531323B2 (ja) * | 2002-09-13 | 2010-08-25 | 株式会社半導体エネルギー研究所 | レーザ装置、レーザ照射方法、および半導体装置の作製方法 |
US20040154010A1 (en) * | 2003-01-31 | 2004-08-05 | Pedro Marcuello | Control-quasi-independent-points guided speculative multithreading |
US6938130B2 (en) | 2003-02-13 | 2005-08-30 | Sun Microsystems Inc. | Method and apparatus for delaying interfering accesses from other threads during transactional program execution |
US6862664B2 (en) * | 2003-02-13 | 2005-03-01 | Sun Microsystems, Inc. | Method and apparatus for avoiding locks by speculatively executing critical sections |
CN1269036C (zh) * | 2003-04-24 | 2006-08-09 | 英特尔公司 | 用于生成预测助手线程的方法和计算机 |
US7149851B1 (en) * | 2003-08-21 | 2006-12-12 | Transmeta Corporation | Method and system for conservatively managing store capacity available to a processor issuing stores |
US20050120179A1 (en) | 2003-12-02 | 2005-06-02 | Intel Corporation (A Delaware Corporation) | Single-version data cache with multiple checkpoint support |
US7444497B2 (en) | 2003-12-30 | 2008-10-28 | Intel Corporation | Managing external memory updates for fault detection in redundant multithreading systems using speculative memory support |
US7685365B2 (en) | 2004-09-30 | 2010-03-23 | Intel Corporation | Transactional memory execution utilizing virtual memory |
US7321989B2 (en) | 2005-01-05 | 2008-01-22 | The Aerospace Corporation | Simultaneously multithreaded processing and single event failure detection method |
US7395418B1 (en) | 2005-09-22 | 2008-07-01 | Sun Microsystems, Inc. | Using a transactional execution mechanism to free up processor resources used by a busy-waiting thread |
US7523266B2 (en) * | 2006-02-06 | 2009-04-21 | Sun Microsystems, Inc. | Method and apparatus for enforcing memory reference ordering requirements at the L1 cache level |
US7404041B2 (en) | 2006-02-10 | 2008-07-22 | International Business Machines Corporation | Low complexity speculative multithreading system based on unmodified microprocessor core |
US7542977B2 (en) | 2006-06-29 | 2009-06-02 | Intel Corporation | Transactional memory with automatic object versioning |
US7444544B2 (en) * | 2006-07-14 | 2008-10-28 | International Business Machines Corporation | Write filter cache method and apparatus for protecting the microprocessor core from soft errors |
US7549025B2 (en) | 2006-12-06 | 2009-06-16 | Sun Microsystems, Inc. | Efficient marking of shared cache lines |
US7757068B2 (en) | 2007-01-16 | 2010-07-13 | Oracle America, Inc. | Method and apparatus for measuring performance during speculative execution |
US9268710B1 (en) | 2007-01-18 | 2016-02-23 | Oracle America, Inc. | Facilitating efficient transactional memory and atomic operations via cache line marking |
US8806145B2 (en) | 2008-11-07 | 2014-08-12 | Oracle America, Inc. | Methods and apparatuses for improving speculation success in processors |
-
2009
- 2009-08-20 US US12/544,704 patent/US8521961B2/en not_active Expired - Fee Related
-
2010
- 2010-07-19 DE DE112010003330.7T patent/DE112010003330B4/de active Active
- 2010-07-19 WO PCT/US2010/042383 patent/WO2011022143A1/en active Application Filing
- 2010-07-19 JP JP2012525577A patent/JP5647686B2/ja not_active Expired - Fee Related
- 2010-07-19 GB GB1200165.7A patent/GB2485083B/en active Active
- 2010-07-19 CN CN201080036698.2A patent/CN102473156B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1509436A (zh) * | 2001-05-16 | 2004-06-30 | 先进微装置公司 | 以推测方式使高速缓存中的缓存行失效的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
US20110047334A1 (en) | 2011-02-24 |
JP2013502649A (ja) | 2013-01-24 |
DE112010003330T5 (de) | 2012-06-21 |
GB2485083A (en) | 2012-05-02 |
CN102473156A (zh) | 2012-05-23 |
US8521961B2 (en) | 2013-08-27 |
DE112010003330B4 (de) | 2023-06-07 |
WO2011022143A1 (en) | 2011-02-24 |
GB2485083B (en) | 2016-12-14 |
JP5647686B2 (ja) | 2015-01-07 |
GB201200165D0 (en) | 2012-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102473156B (zh) | 推测版本控制高速缓存内的检查点 | |
Shin et al. | Hiding the long latency of persist barriers using speculative execution | |
US11119785B2 (en) | Delaying branch prediction updates specified by a suspend branch prediction instruction until after a transaction is completed | |
US20180011748A1 (en) | Post-retire scheme for tracking tentative accesses during transactional execution | |
US10061588B2 (en) | Tracking operand liveness information in a computer system and performing function based on the liveness information | |
US7870369B1 (en) | Abort prioritization in a trace-based processor | |
US8397052B2 (en) | Version pressure feedback mechanisms for speculative versioning caches | |
Nakka et al. | An architectural framework for providing reliability and security support | |
US10127155B2 (en) | Memory performance when speculation control is enabled, and instruction therefor | |
US9710280B2 (en) | Overlapping atomic regions in a processor | |
US9098327B2 (en) | Method and apparatus for implementing a transactional store system using a helper thread | |
JP2014500562A (ja) | 自動的にプログラムを複数の並列スレッドに分解するハードウェア及びソフトウェアシステム用のシステム、装置、及び方法 | |
CN104335185A (zh) | 受限事务执行 | |
US10152418B2 (en) | Speculation control for improving transaction success rate, and instruction therefor | |
CN104335186A (zh) | 处理器辅助设施 | |
Singh et al. | Efficient processor support for DRFx, a memory model with exceptions | |
TW200421178A (en) | Enhanced processor virtualization mechanism via saving and restoring soft processor/system states | |
US11119925B2 (en) | Apparatus and method for managing capability metadata | |
Romanescu et al. | Specifying and dynamically verifying address translation-aware memory consistency | |
DE69425311T2 (de) | Mikroprozessor mit spekulativer Befehlsausführung | |
Choi et al. | Locality-aware adaptive grain signatures for transactional memories | |
US7783863B1 (en) | Graceful degradation in a trace-based processor | |
Sánchez et al. | Soft-error mitigation by means of decoupled transactional memory threads | |
Biswas et al. | Efficient Architecture Support for Region-Serializability-Based Consistency | |
Adve et al. | A unified formalization of four shared-memory models |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20141217 Termination date: 20200719 |
|
CF01 | Termination of patent right due to non-payment of annual fee |