用于硬件锁省略(hle)的后期锁获取机制的装置和方法

文档序号:6515524阅读:318来源:国知局
用于硬件锁省略(hle)的后期锁获取机制的装置和方法
【专利摘要】本发明描述了用于硬件锁省略(HLE)的后期锁获取机制的装置和方法。响应于检测到后期锁获取事件,如计时器期满、填满的高速缓存集合以及不可撤回事件,可启动后期锁获取。停止连贯的临界段直到利用与连贯的临界段操作相关联的访问缓冲器项的字段来完成后期锁获取。
【专利说明】用于硬件锁省略(HLE)的后期锁获取机制的装置和方法
[0001]本申请是申请号为200810190835.2、申请日为2008年11月7日、发明名称为“用于硬件锁省略(HLE)的后期锁获取机制的装置和方法”的发明专利申请的分案申请。
【技术领域】
[0002]本发明涉及处理器执行领域,并且尤其涉及获取用于代码段执行的锁定。
【背景技术】
[0003]在半导体处理和逻辑设计方面的进步已经允许在集成电路器件中可存在的逻辑数量上的增加。结果,计算机系统配置已经从系统中的单个或者多个集成电路演进成存在于单个集成电路上的多核以及多逻辑处理器。处理器或者集成电路通常包括单个处理器管芯,其中处理器管芯可包括任意数量的核或者逻辑处理器。
[0004]在集成电路上的核以及逻辑处理器数量的不断增加使得能够执行更多的软件线程。然而,可同时执行的软件线程数量上的增加已经造成了关于使诸软件线程间共享的数据同步的问题。一种在多核或者多逻辑处理器系统中访问共享数据的常用解决方案包括利用锁来确保对共享数据多个访问上的互斥。然而,执行多个软件线程的日益增加的能力潜在可能导致错误竞争和执行的串行化。
[0005]例如,考虑一种持有共享数据的散列表。利用锁系统,程序员就可对整个散列表加锁,从而允许一个线程访问整个散列表。然而,其它线程的吞吐量和性能潜在可能受到不利影响,因为在锁被释放之前他们不能访问散列表中的任何项。或者,散列表中的每个项可被加锁。然而,这增加了编程复杂度,因为程序员不得不考虑在散列表之内更多的锁。
[0006]另一种数据同步技术包括使用事务性存储器(TM)。通常事务性执行包括投机地执行多个微操作,操作,或者指令的编组。在上面的例子中,两个线程皆在散列表内执行,且其访问被监控/跟踪。如果两个线程访问/改变相同的项,则可能中断这两个事务中的一个来解决冲突。然而,一些应用程序可能不能利用事务性存储器编程,结果,通常称为硬件锁省略(HLE)的硬件数据同步技术被用于取消锁以获得类似于事务性存储器的同步效果。
[0007]结果,HLE能够检测并且预侧代码的临界段。但是,对于事务性存储器或者通过HLE在临界段的执行期间,当HLE预侧不正确的时候,试探性访问跟踪使存储器溢出,或者遇到不可取消事件,通常,中断并且重新开始临界段。然而,中断临界段可能浪费了在中断之前所执行的操作执行周期。
【专利附图】

【附图说明】
[0008]本发明通过举例进行说明并且不希望受到附图图形的限制。
[0009]图1示出包括后期锁获取机制的多处理部件处理器的实施例。
[0010]图2示出对于临界段执行后期锁获取的逻辑的实施例。
[0011]图3a示出对于当前临界段执行后期锁获取方法的流程图的实施例。
[0012]图3b示出在对于当前临界段的后期锁获取期间停止后续临界段操作方法的流程图的实施例。
[0013]图3c示出在对于当前临界段的后期锁获取期间停止后续临界段操作方法的流程图的另一个实施例。
[0014]详细说明
[0015]在下面的说明中,阐述了很多特定的细节,比如硬件锁省略(HLE)的特定硬件支持的例子、特定的跟踪/元数据方法、处理器中局部/存储器的特定类型、以及存储器存取和位置的特定类型等等,以便提供对本发明的彻底理解。但是,本领域技术人员将会明白可不必采用这些细节来实施本发明。在其它的例子中,没有详细地描述公知的组件或者方法,比如软件中临界段的编码,临界段的划界,特定的多核和多线程处理器体系结构,中断生成/处理,高速缓存组织,和微处理器特定的操作细节,以免带来对本发明不必要的混淆。
[0016]此处所描述的方法和装置是用于在临界段执行期间的后期锁(Iate-1ock)获取的方案。具体地说,主要关于多核处理器计算机系统来讨论后期锁获取方案。但是,用于后期锁获取方案的方法和装置并不因此受限,因为它们可能在任何集成电路装置或者系统上或与其相关联以及与诸如执行临界段的硬件/软件线程的其它资源结合地实现,所述集成电路装置或者系统比如为蜂窝电话,个人数字助理,嵌入式控制器,移动式平台,桌面平台,和服务器平台。此外,还关于在硬件锁省略(HLE)期间的临界段执行来主要地讨论后期锁获取方案。然而,在任何临界段执行方案期间,比如在事务性执行期间,都可使用后期锁的获取。
[0017]参考图1,示出多核处理器100的实施例,其能够执行用于临界段的后期锁获取。如图所示,物理处理器100包括任何数量的处理部件。处理部件指代线程、进程、上下文、逻辑处理器、硬件线程、核和/或任何可能共享对处理器资源访问的处理部件,比如保留单元、执行单元、流水线和上级高速缓存/存储器。物理处理器通常指代集成电路,其可包括许任何数量的处理部件,比如核或者硬件线程。
[0018]核通常指代位于集成电路上能够维持独立体系结构状态的逻辑,其中每一个独立维持的体系结构状态都与至少一些专用执行资源有关。与核相反,硬件线程通常指代位于集成电路上能够维持独立体系结构状态的任何逻辑,其中独立维持的体系结构状态共享对执行资源的访问。如图1中所示出的,物理处理器100包括双核,核101和102,它们共享对上级高速缓存110的访问。此外,核101包括两个硬件线程IOla和IOlb,而核102包括两个硬件线程102a和102b。因此,诸如操作系统或者应用程序的软件实体可能将处理器100视为四个独立的处理器,同时处理器100能够执行四个软件线程。
[0019]如同所看见的,当某些资源是共享的而其它资源专用于一个体系结构状态的时候,硬件线程和核的术语之间的界线是重叠的。然而通常,操作系统将核和硬件线程视为独立的逻辑处理器,其中操作系统能够独立地在每个逻辑处理器上调度操作。因此,处理部件包括任何能够维持上下文的上述实体,比如核,线程,硬件线程,逻辑处理机,虚拟机,或者其它的处理资源。
[0020]在一个实施例中,处理器100是能够并行地执行多个线程的多核处理器。这里,第一线程与体系结构状态寄存器IOla相关联,第二线程与体系结构状态寄存器IOlb相关联,第三线程与体系结构状态寄存器102a相关联,并且第四线程与体系结构状态寄存器102b相关联。在一个实施例中,对处理器100中的处理部件的参考,包括对核101和102、以及线程101a、101b、102a和102b的参考。在另一个实施例中,处理部件指的是在处理域的层级中在相同级别上的元件。例如,核101和102位于相同的域级别中,线程IOla和IOlb位于核101中的相同域级别中,而线程101a、101b、102a和102b位于核101和102中的相同域
级别中。
[0021]尽管处理器100可包括不对称的核,即具有不同配置、功能单元和/或逻辑的核,但是在图1中示出对称的核。结果,将不会详细地讨论示出为与核101相同的核102,以避免使说明模糊不清。
[0022]如同所说明的,在体系结构状态寄存器IOlb中复制了体系结构状态寄存器101a,因此能够为处理部件IOla和处理部件IOlb存储独立的体系结构状态/上下文。还可能为线程IOla和IOlb复制其它较小的资源,比如指令指针和在重命名分配器逻辑130中的重命名逻辑。可通过分割来共享一些资源,比如在重排序/退役单元135中的重排序缓冲器、ILTB120、加载/存储缓冲器180以及队列。可彻底地共享其它的资源,比如通用内部寄存器、页表基址寄存器、低级数据-高速缓存以及数据-TLB110、执行单元140以及无序单元135。注意可以任何共享核101资源的方式来实现线程。
[0023]总线接口模块105和诸如系统存储器175、芯片组、北桥或其它的集成电路等处理器100外部的设备通信。存储器175可专用于处理器100或被系统中的其它设备共享。存储器175的例子包括动态随机存取存储器(DRAM),静态RAM(SRAM),非易失性存储器(NV存储器),以及长期存储器。
[0024]通常地,总线接口单元105包括输入/输出(I/O)缓冲器以发送和接收在互连170上的总线信号。互连170的例子包括射电收发器逻辑(GTL)总线,GTL+总线,双倍数据率(DDR)总线,并发总线,差分总线,高速缓存相干总线,点对点总线,多站总线或者其它实现任何已知总线协议的已知互连。如所示,总线接口单元105还与上级高速缓存110通信。
[0025]上级或远端高速缓存110用于高速缓冲近期在元件上所取回和/或操作的元素。注意上级或远端指的是高速缓存级别的增加或者更远离执行单元。在一个实施例中,上级高速缓存110是第二级数据高速缓存。但是,上级高速缓存110并不如此受到限制,因为它可能是被称为踪迹高速缓存的指令高速缓存或包括该指令高速缓存。踪迹高速缓存可代替地耦合在译码器125之后以存储近期解码的踪迹。模块120还可能包括用于预测执行/采用分支的分支目标缓冲器和用于存储指令的地址翻译项的指令-翻译缓冲器(Ι-TLB)。这里,能够进行投机执行的处理器可能预取回以及投机地执行所预测的分支。
[0026]解码模块125与取回单元120相耦合以解码取回的元素。在一个实施例中,处理器100与指令集体系结构(ISA)相关联,其定义/规定在处理器100上的可执行指令。这里,由ISA所识别的通常机器代码指令包括一部分称为操作码(opcode)的指令,其参考/规定要执行的指令或操作。
[0027]在一个例子中,分配器和重命名器区块130包括分配器以以保留诸如为存储指令处理结果的寄存器堆之类的资源。但是,线程IOla和IOlb可能能够无序地执行,其中分配器和重命名器区块130还保留其它的资源,诸如重排序缓冲器以跟踪指令结果。单元130还可包括寄存器重命名器来将程序/指令参考寄存器重命名为其它的在处理器100内部的寄存器。
[0028]重排序器/退役单元135包括诸如上述的重排序器缓冲器以及加载/存储缓冲器180之类的组件以支持无序执行以及无序执行的指令的稍后退役。在一个实施例中,缓冲器180能够保存字段/值以指示将要阻塞/停止的相关的存储器存取,直到完成在进程中对临界段获得后期锁。尽管将缓冲器180显示为位于一个区域中,缓冲器180以及后期锁获取逻辑不因此受到限制。事实上,跟踪逻辑180可能分布在整个处理器100上,此外还与处理器流水线的前端或者后端的任何部分相关联。
[0029]在一个实施例中,调度器以及执行单元区块140包括在执行单元上调度指令/操作的调度器单元。事实上,可根据它们的类型可用性来在执行单元上调度指令/操作。例如,在具有可用的浮点执行单元的执行单元的端口上来调度浮点指令。还包括与执行单元相关联的寄存器堆以存储信息指令处理结果。示例性的执行单元包括浮点执行单元、整型执行单元、跳转执行单元、加载执行单元、存储执行单元及其它已知的执行单元。
[0030]从上面可以发现,如所说明的,处理器100能够执行至少四个软件线程。此外,在一个实施例中,处理器100能够进行事务性执行。事务性执行通常包括将多个指令或操作编组为事务、代码的原子段或者代码的临界段。在一些情况中,字指令的使用引用宏-指令,其由多个操作组成。在处理器中,通常投机地执行事务并且在事务的结尾提交事务。如同此处所使用的,事务的未决指的是事务已经开始执行并且没有提交或中断,即未决。通常,当事务仍未决时,跟踪存储器中的被加载和写入的位置。
[0031]当那些存储器位置成功确认时,提交事务,并且使事务期间所作的更新全局可见。然而,如果在事务未决期间事务是无效的,那么重新开始事务而不使更新全局可见。通常,将软件划界归入编码来识别事务。例如,可通过指示事务开始以及事务终止的指令来对事务进行分组。然而,事务执行通常利用程序员或者编译器来插入事务的开始以及终止指令。
[0032]因此,在一个实施例中,处理器100能够进行硬件锁省略(HLE),其中硬件能够取消临界段的锁定并且同时执行它们。这里,没有事务性支持的预编译的二进制码(binaries)或者利用锁定编程的新编译的二进制编码能够通过HLE的支持从同时执行中受益。由于提供了透明的兼容性,HLE通常包括用于检测临界段并跟踪存储器存取的硬件。事实上,由于取消了确保对数据排除的锁,可以以如同在事务执行期间类似的方式来跟踪存储器存取。因而,可以在事务执行期间利用在此讨论的后期锁获取方案,HLE,另一个存储器存取跟踪方案,或者它们的组合。因此,在下面临界段执行的讨论可能包括对事务临界段或者由HLE检出的临界段的参考。
[0033]在一个实施例中,利用所访问的存储设备来跟踪来自临界段的访问。例如,利用下级数据高速缓存150来跟踪来自临界段的访问;与事务性执行或者HLE相关联。高速缓存150存储近期访问的元素,例如数据操作数,其可能被保持为存储器相干状态,例如修改、独占、共享以及无效(MESI)状态。高速缓存150可以组织为完全相关联、集合相关联、直接映射或者其它已知的高速缓存组织。虽然没有说明,但D-TLB可与高速缓存150相关联以存储近期对物理地址翻译的虚拟/线性化。
[0034]如所示,线151、152和153包括区段以及字段,例如区段151a和字段151b。在一个实施例中,字段151b、152b和153b以及区段151a、152a和153a属于组成线151,152和153的相同存储器阵列的一部分。在另一个实施例中,字段151b、152b和153b是从线151a、152a和153a通过单独的专用端口访问的单独阵列的一部分。然而,即使当字段151b、152b和153b是单独阵列的一部分时,字段151b、152b和153b分别与区段151a、152a和153a相关联。结果,当参考高速缓存150的线151时,线151可能包括区段151a、151b或它们的组合。例如,当从线151加载时,可以从区段151a加载。此外,当设置跟踪字段来跟踪来自线151的加载时,访问字段151b。
[0035]在一个实施例中,线、位置、区块或字——如线151a、152a和153a——能够存储多个元素。元素指的是任何指令、操作数、数据操作数、变量或其它逻辑值的分组,其通常存储在存储器中。作为例子,高速缓存线151在区段151a中存储四个元素,如四个操作数。存储在高速缓存线151a中的元素可处于打包或压缩状态以及解压缩状态中。此外,可以将元素与线的边界,集合,或者高速缓存150的路线对准或者不对准地存储在高速缓存150中。在下面将关于示例性的实施例来更详细地讨论存储器150。
[0036]高速缓存150和其它在处理器100中的特征和设备都对逻辑值进行存储和/或操作。通常,还将逻辑电平、逻辑值或逻辑的值的使用称为I和0,其简单地表示二进制逻辑状态。例如,I指的是高逻辑电平,而O指的是低逻辑电平。已经使用了在计算机系统其它的值表示,如逻辑值或二进制值的十进制和十六进制表示。例如,以十进制数10为例,其按二进制表示为1010,按十六进制表示为字母A。
[0037]在图1说明的实施例中,跟踪对线151、152和153的访问以支持临界段的执行。访问包括诸如读取、写入、存储、加载、收回、监听或其它已知的对存储器单元的访问等操作。使用诸如字段151b、152b和153b之类的访问跟踪字段来跟踪对它们相应存储器线的访问。例如,存储器线/区段151a与相应的跟踪字段151b相关联。这里,访问跟踪字段151b与高速缓存线151a相关并相对应,因为跟踪字段151b包括作为高速缓存线151 —部分的位。如所示,相关联可通过物理布局,或者其它的相关联,如将访问跟踪字段151关联或者映射到硬件或软件查找表中的存储器线151a或151b。
[0038]如简化说明的例子,假定访问跟踪字段151b、152b和153b包括两个事务位:第一读跟踪位和第二写跟踪位。在缺省状态中一即第一逻辑值,在访问跟踪字段151b、152b和153b中的第一和第二位分别表示高速缓存线151、152和153在临界段执行期间没有被访问。
[0039]假定在临界段中遇到从线151a加载的加载操作。将第一读跟踪位从缺省状态更新为第二访问状态,例如第二逻辑值。这里,持有第二逻辑值的第一读取跟踪位表示从高速缓存线151的读取/加载发生在临界段执行期间。可以按类似方式来处理存储操作以更新第一写入跟踪位来表明在临界段执行期间发生了对存储器单元的存储。
[0040]因而,如果检查了在与线151相关联的字段151b中的跟踪位,并且事务位表示缺省状态,那么高速缓存线151在临界段的未决期间没有被访问。相反地,如果第一读取跟踪位表示为第二值,那么高速缓存线151在临界段执行期间先前已被读取。此外,如果第一写入跟踪位表示第二值,那么在临界段的未决期间就发生了对线151的写入。
[0041]访问字段151b、152b和153b可用于支持任何类型的事务性执行或HLE。在其中处理器100能够进行硬件事务性执行的一个实施例中,访问字段151b、152b和153b将检测冲突并且执行确认。在其中硬件事务性存储器(HTM)、软件事务性存储器(STM)或它们的组合用于事务性执行的另一个实施例中,访问跟踪字段151b、152b和153b提供相似的跟踪以及确认功能。
[0042]如同第一个例子中如何将访问字段一特别是跟踪位一潜在地用于帮助事务性执行那样,序列号为 11/349,787 的题为 “Hardware Acceleration for A SoftwareTransactional Memory System(用于软件事务性存储器系统的硬件加速)”的共同待审批申请公开了访问字段/事务位对于加快STM的使用。作为另一个例子,在序列号为11/479,902以及代理记录编号为 042390.P23547、题为 “Global Overflow Method for VirtualizedTransactional Memory (用于虚拟化事务性存储器的全局溢出方法)”的共同待审批申请中论述了包括将访问字段/事务跟踪位的状态存储到第二存储器中的扩展/虚拟化事务性存储器。
[0043]转向图2,示出对于临界段启动后期锁获取逻辑的实施例。如上所述,事务通常由开始事务以及终止事务指令来划分,其提供了对临界段容易的标识。但是,HLE包括检测/标识以及可能地预测临界段、取消划分临界段的锁、用于对临界段异常中断的重新运行的检查点寄存器状态、跟踪尝试的存储器更新以及检测潜在性数据冲突。在检测/标识临界段中的一个困难是在常规锁指令以及区别临界段的锁/锁解除指令之间划出轮廓,其中常规锁指令没有定义临界段。
[0044]在一个实施例中,对于HLE,由锁指令(即开始临界段指令)以及匹配的锁解除指令(即终止临界段指令)定义临界段。锁指令可包括从寻址单元的加载一即检查锁是否可用,以及对寻址单元的修改/写入一即对该寻址单元进行更新以获取锁。可以用作锁指令的几个指令的例子包括比较和交换指令、位测试和设置指令以及交换和加法指令。在英特尔的IA-32和IA-64指令集中,上述指令包括CMPXCHG、BTS和XADD,如同在以上讨论的
英特尔3 64和IA-32指令集文件中所描述的。
[0045]作为其中检出/认识诸如CMPXCHG、BTS和XADD的预定指令的例子,检测逻辑和/或解码逻辑检测到利用操作码字段或指令其它字段的指令。作为例子,CMPXCHG与以下操作码相关:OF B0/r, REX+0F B0/r和REX.W+0F Bl/r。在另一个实施例中,利用与指令有关的操作来检测锁指令。例如,在x86中以下三个存储器微-操作通常用于执行原子存储器更新来指示可能的锁指令:(I)具有操作码0x63的Load_Store_Intent (L_S_I) ; (2)具有操作码0x76的STA ;以及(3)具有操作码0x7F的STD。这里,L_S_I以独占拥有状态获取存储器单元并且执行对存储器单元的读取,尽管STA和STD操作修改并且写入存储器单元。换句话说,检测逻辑搜索有存储意向的加载(L_S_I)来定义临界段的开始。注意锁指令可能具有任意数量的其它与读取、写入、修改存储器操作相关联的非-存储器以及其它存储器操作。
[0046]通常利用堆栈,例如锁堆栈205来保持项,例如与锁指令相关的项206。锁指令项(LIE) 206可能包括任意数量的字段来存储临界段相关的信息,如锁指令存储物理地址(LIStr PA)、锁指令加载值以及加载大小、解锁值、锁指令存储值以及大小、锁定值、微操作计数、释放标志、后期锁获取标志以及最后指令指针字段。
[0047]这里与锁指令相对应的锁释放指令划分临界段的末端。检测逻辑搜索对应于由锁指令修改的地址的锁释放指令。注意由锁指令修改的地址可保持在锁堆栈205上的LIE206中。结果,在一个实施例中,锁释放指令包括任何将由相应的锁指令所修改的地址设置回解锁值的存储操作。将由存储在锁堆栈206中的L_S_I指令所引用的地址与后续的存储指令相比较来检测相应的锁释放指令。可以在题为“A CRITICAL SECTION DETECTION ANDPREDICTION MECHANISM FOR HARDWARE LOCK ELISION (对硬件锁省略的临界段检测和预测机制)”的申请序列号为11/599,009的共同待审批申请中找到更多的有关检测和预测临界段的息。
[0048]换句话说,在一个实施例中,对于HLE,临界段由L_S_I指令和相应的锁释放存储指令来划分。类似的,由开始事务指令和终止事务指令来定义事务的临界段。因此,对开始临界段操作/指令的参考包括任何开始HLE、事务性存储器或其它临界段的指令,而对终止临界段操作/指令的参考包括开始HLE、事务性存储器或其它临界段终止指令。
[0049]在一个实施例中,访问缓冲器一如加载缓冲器220和/或存储缓冲器280将保持与存储器存取操作相关联的访问项。每个访问缓冲器项都包括阻塞代码字段/区段。作为默认,阻塞代码字段将保持第一值,如未阻塞值,以指示可以自由地分配相应的存储器存取操作。但是,当对于当前临界段启动后期锁获取时,与后续临界段相关联的用于缓冲器项的阻塞代码字段被更新为第二值或者阻塞值以指示将阻塞/停止相关联的存储器存取操作。
[0050]如同所说明的,加载缓冲器220包括多个加载缓冲器项,例如项228-233。当遇到加载操作的时候,在加载缓冲器220中创建/存储加载缓冲器项。在一个实施例中,加载缓冲器220以程序顺序存储加载缓冲器项,即在程序代码中对指令或操作进行排序的顺序。这里,由加载尾指针235来参考最近的加载缓冲器项228,即最近存储的加载缓冲器项。相反的,由加载头指针236来参考最早的加载缓冲器项230,其不是高级加载。
[0051]在按顺序执行的处理元素中,以存储在加载缓冲器中的程序顺序来执行加载操作。结果,首先执行最早的缓冲器项,并且将加载头指针236重新指向下一个最早的项,例如项229。相反的,在无序机器中,以任意的顺序来执行操作。但是,一般会在程序顺序中移除记录,即从加载缓冲器中去分配。结果,加载头指针236和加载尾指针235在两种类型的执行之间以相似的方式进行操作。
[0052]加载缓冲器项230可能包括任何类型的信息,诸如存储器更新值、指针值、对相关加载操作的参考、对与加载操作相关地址的参考、从地址加载的值及其它相关加载缓冲值、标志或者参考。注意存储缓冲器280可能以相似的方式来操作以加载缓冲器220,如同存储缓冲器280所描述的包括项281-286以及用于项283的阻塞代码字段283a。此外,加载缓冲器220以及存储缓冲器280两者分别包括高级加载区段250以及280。结果,在事务性执行或者HLE期间,预先退出访问、后退出访问或者它们的混合可用来更新访问跟踪位271-273a-b。题为 “A POST-RETIRE SCHEME FOR TRACKING TENTATIVE ACCESSES DURINGTRANSACTIONAL EXE⑶TION(用于跟踪在事务性执行期间尝试性访问的后退出方案)”的申请序列号为11/517,029的共同待审批申请更加详细地讨论了用于假设存储器存取的后退出访问跟踪。此外,申请序列号为11/936,243的题为“A PRE-POST RETIRE HYBRID HARDWARELOCK ELISION (HLE) SCHEME (预先-后退出混合硬件锁省略(HLE)方案)”的共同未决申请讨论了用于尝试性访问跟踪的混合方案。
[0053]在一个实施例中,每个加载缓冲器项一如项230包括阻塞代码字段,例如阻塞代码字段225。作为一个例子,假定与加载项230有关的有存储意图的加载(LSI)操作参考系统存储器地址。无论初始拥有的且位于高速缓存线271a中或者响应于对高速缓存270的未命中所取回的如何,假定由系统存储器地址参考的元素当前驻留在高速缓存线271a中。在该例子中,高速缓存线271a保持用于在临界段执行期间要访问的地址或地址范围的锁值。因此,在加载线271a中读取锁值。这里,确定锁271a是否保存锁定值或者解锁值。[0054]当分配加载操作时,存储器更新字段225被默认地更新为解锁值以指示能够分配处理加载操作。注意更新位、值或者字段不一定指示对位、值或者字段的改变。例如,如果字段225已经设置为逻辑0,那么更新为逻辑O可能包括将逻辑O再写入字段225、以及没有动作而使字段225保持逻辑O。
[0055]与上述讨论的方案相反,假定加载项230与后续的临界段——如后续的开始临界段操作相关联。此外,当前临界段遇到后期锁获取事件。后期锁获取事件的例子包括计时器的到期、高速缓存装置是满的以及检测不可撤回事件。在下面讨论关于后期锁获取事件的更多细节。响应于检测后期锁获取事件,将字段225更新为阻塞值以阻塞/停止后续的开始临界段操作。在下面还将更详细地讨论后续的开始临界段操作的阻塞和停止以及用于后续临界段检查点的阻塞创建。
[0056]在一个实施例中,当前临界段确定在启动后期锁获取之前是否满足了预先的条件。预先条件的第一例子包括等待未决填充缓冲器项被全局地排序。这里,当对高速缓存270的访问未命中时,即线不是呈现修改或者独占的状态中,那么分配填充缓冲器项以依据检索来接收所请求的元素。在一个实施例中,全局排序包括至少在后期锁获取存储之前的存储的任何排序,以保证存储器相干性,即没有存储器排序违规。
[0057]用于后期锁获取可能的预先条件的另一个例子包括确定当前临界段的开始临界段操作已经将锁堆栈更新为锁值。正如以上所讨论的,开始临界段操作可能包括加载/读取以确定锁是否保持锁定或者解锁值,以及存储操作以对锁位置执行锁值的存储。但是,在HLE中锁被取消并且尝试性地执行临界段。因此,没有执行与存储缓冲器280中的存储项283相关联的、用于更新线271a的存储,而是将更新锁堆栈205。事实上,当尝试后期锁获取的时候,来自锁堆栈项206的锁值用于将高速缓存存储器线271a更新为锁定值。换句话说,对于HLE,没有获取在高速缓存线271a中的锁,直到通过用来自项206的锁定值更新高速缓存线271a来执行后期锁。
[0058]但是,在一个实施例中,响应于后期锁获取的启动,来阻塞/停止存储,例如高级存储。因而,如果没有执行用锁值更新锁堆栈项206的存储且启动了后期锁获取,那么可能发生死锁的情况。这里,没有对锁堆栈205执行用于后期锁获取的锁值的存储,并且现在在后期锁获取期间停止那个存储。换句话说,后期锁获取在等待锁定堆栈205的存储,并且存储在等待后期锁获取在它更新锁堆栈205之前完成。因此,在一个实施例中,预先条件包括:在为当前临界段启动后期锁获取之前确定对于具有用于当前临界段锁值的锁堆栈205的存储已经执行。
[0059]如上所述,在一个实施例中,在对于当前临界段的后期锁获取期间,当遇到后续的临界段时,停止后续的临界段。在一个实施例中,停止临界段包括阻塞诸如与加载项230相关联的LSI之类的开始临界段操作创建检查点。通常,当LSI解除的时候创建检查点。因此,在对于当前临界段的后期锁获取期间,将阻塞诸如与加载项230相关联的LSI之类的开始后续临界段操作。这里,更新逻辑210将字段225更新为阻塞值。响应于字段225持有阻塞值,没有分派与项230相关联的LSI。作为一个例子,调度器没有基于持有阻塞值的字段225来调度后续临界段LSI。注意更新逻辑可能将任何数量的类似于字段225的字段设置为阻塞值以阻塞/停止任何其它的操作。
[0060]在一个实施例中,阻塞值包括标识符(ID)。结果,当解锁诸如与项230相关联的加载之类的存取操作的条件满足的时候,由更新逻辑210广播该ID。释放——即解锁包括ID的全部字段。例如,当字段225包括诸如MOB_BLOCK_CODE值之类的阻塞值时,就响应于存储缓冲器的枯竭,由更新逻辑210来广播ID。释放一即解锁与ID相匹配的所有加载项。作为另一个例子,字段225可以是HLE_BLOCK_CODE字段。这里,响应于后期锁获取的完成,将ID广播给在加载缓冲器220中的项,加载缓冲器220释放/解锁与ID匹配的加载项。
[0061]如上所述,在一个实施例中,在后期锁获取期间停止了高级存储。这里诸如逻辑225的逻辑将诸如字段283a的字段更新为阻塞值停止高级存储。这里,避免了诸如锁释放操作之类的终止临界段操作与后期锁获取操作之间的竞争状态。作为一个例子,假定在高速缓存线271a中保持锁。取消获取锁的开始临界段操作并且在锁堆栈项206中存储获得锁的值。然后,检测出后期锁获取事件。这里,引用解锁值的锁释放存储将可能与后期锁获取存储争用以获得锁。结果,停止高级存储分派以避免这种潜在的争用。
[0062]注意,如所不,锁堆栈205包括多个堆栈项。在一个实施例中,锁堆栈205能够为诸如嵌套临界段之类的多个临界段维持多个项。作为一个例子,当将要为一个嵌套在堆栈205上的临界段执行后期锁获取的时候,将为群殴它在堆栈205上参考的临界段执行后期锁获取。为了说明,由LIE206参考的临界段是在由LIE207参考的第二个临界段之内所嵌套的最里面的临界段。此外,第二临界段嵌套在与项208相关联的最外面的临界段之内。
[0063]这里,当要为最里面的临界段执行后期锁获取的时候,还为第二个和最外面的临界段执行后期锁获取。但是,在另一个实施例中,当已经对最里面的临界段观察到锁释放并且为第二个临界段执行后期锁获取的时候,就为最外面的临界段,而不是最里面的临界段执行后期锁获取。换句话说,在该实施例中对于所有的位于比当前后期锁获取的更高嵌套深度的临界段来执行后期锁获取。
[0064]转向图3a_3c,示出了在临界段的硬件锁省略执行期间所进行的后期锁获取的方法的流程图实施例。虽然该流程图以合理地线性方式说明了流程,但是在不同实施例中流程可以任何顺序发生。例如,可在确定是否当前临界段锁值是否已经更新锁堆栈之后发生确定是否全局上观察到过滤器缓冲器项。
[0065]在流程305中,检测到后期锁获取事件。这里,已经检测到并且取消了开始临界段操作。例如,将锁值存储在位于锁堆栈上的锁指令项(LIE)中,该锁值将获取临界段的锁。后期锁获取事件的例子包括计时器的到期,填满的高速缓存集合,以及不可撤回事件。
[0066]在一个实施例中,计时器的到期包括监视计时器的到期。这里,响应于检测到具有存储意图(LSI)操作和/或分配了相关联的LIE来启动监视计时器。如果在监视计时器期满之前没有检测出相应的锁释放指令那么执行后期锁获取。换句话说,当预知临界段开始并且在相当的时间内没有发现相应的临界段末端时,将获取锁。
[0067]在另一个实施例中,后期锁获取包括填满的高速缓存集合。例如,在临界段的执行期间,对访问进行跟踪以检测数据冲突。但是,高速缓存集合可以用在临界段的执行期间跟踪的尝试性访问来填充满。因此,后续的访问可以导致选择高速缓存线用于收回,其中那个线包括对于先前尝试性访问的跟踪信息。结果,可响应于指示填满的高速缓存集合的收回来启动后期锁获取。
[0068]作为另一个例子,后期锁获取事件可以包括不可撤回事件的检测,即可能是不容易废止的事件、过程或访问。作为具体的例子,I/o访问通常是不可撤回的,因为对I/O设备的访问很难是不恰当的。因此,响应于检测到I/o访问,来启动后期锁获取。
[0069]然后,在流程310中,在检测到后期锁获取之后,确定是否已经全局上观察到先前的填充缓冲器项(FBE)。如果没有全局上观察到先前的项,那么停止后期锁获取——即没有启动后期锁获取,直到在流程315中全局上观察到/排序先前的FBE。在一个实施例中,全局上观察到包括以任何方式排序,例如在总线/互连上要完成的分派。还是作为一个例子,后期锁获取的停止包括更新与具有阻塞值的后期锁获取存储相关联的存储缓冲器项。
[0070]作为另一个后期锁获取的可能预先条件,在流程320中确定当前临界段锁值是否已经更新了锁堆栈。如上所述,临界段的开始临界段指令通常包括通过对锁位置存储锁值来获取锁的存储指令。但是,在HLE期间,对锁位置取消了存储并且在与临界段有关的锁堆栈项中记录锁值。在一个实施例中,比如在流程335中,停止高级存储。但是,因为在后期锁获取期间将利用来自锁堆栈的锁值,在存储高级停止之前,停止了后期锁获取直到在流程325中锁值更新了锁堆栈。
[0071]然后,在流程330中启动后期锁犾取。在个实施例中,启动后期锁犾取包括启动存储操作以将来自锁堆栈的锁值存储到锁位置以获取锁。注意后期锁获取可能失败,如同在流程345中那样,并且在流程355中可中断并重试临界段。例如,在后期锁获取期间,可能已经由另一个处理部件获取了该锁。这里,后期锁获取可能自旋直到锁被释放然后当它由另一个处理部件释放的时候获取锁。换句话说,后期锁获取是立即失败的并且中断/重新开始临界段。
[0072]在一个实施例中,如在流程335中所示,在后期锁获取期间停止高级存储。注意,可在流程345中成功地完成后期锁获取,而不检测后续的临界段;而在这样情况下,对加载以及高级存储进行解锁,而在流程350中临界段与锁的执行还继续。但是,如果后续的临界段在流程340中,那么流程通过连接流程360继续到图3a和3b。
[0073]图3a示出在对临界段后期锁获取的期间,处理后续临界段的一个实施例,该后续临界段例如为连贯的临界段。这里,在流程365停止了后续的开始临界段操作。例如,在加载缓冲器中阻塞了具有存储意图的加载操作直到完成了后期锁的获取。图3b说明了在对当前临界段后期锁获取期间,处理后续临界段的另一个实施例。
[0074]在流程370中,确定是否排空存储缓冲器。如果没有排空存储缓冲器,那么阻塞后续临界段的加载直到在流程375中排空存储缓冲器。在一个实施例中,加载缓冲器项包括阻塞代码(blOCk_COde)字段。当阻塞代码字段持有阻塞值的时候,阻塞来自分派的相关联加载。这里,当排空存储缓冲器的时候,将诸如ID之类的值广播给加载缓冲器。对于分派解锁/释放与该值匹配的加载缓冲器项。
[0075]在排空存储缓冲器之后,在流程380中确定后续的临界段是否是嵌套临界段。在一个实施例中,当排空存储缓冲器的时候,如果没有检测到关于当前临界段的锁释放——即释放锁的存储,那么后续的临界段是嵌套临界段。这里,没有创建检查点,因为关于最外面的临界段的初始检查点就可能足够了。相反,阻塞后续临界段访问,例如具有存储意图的加载访问,直到完成后期锁获取。在一个实施例中,停止L_S_I包括阻塞L_S_I去创建检查点。这里,可以利用与上述的阻塞代码字段类似的阻塞代码字段来阻塞访问。为了说明,第一个阻塞代码字段是M0B_BL0CK_C0DE字段并且第二个阻塞代码字段是HLE_BL0CK_C0DE字段。类似地,当完成后期锁获取的时候,将值广播以释放/解锁L_S_I。[0076]如同上述所说明的,可以利用事务性存储器和/或硬件锁省略(HLE)来执行临界段。作为中断临界段以及通过再试临界段而浪费先前执行周期的替代,后期锁获取可以尝试继续向前执行临界段。但是,为了避免死锁以及无效数据,在启动后期锁获取之前以及在后期锁获取期间,可以选择地施加某些条件。例如,可以停止后续连贯的临界段直到对于当前临界段完成后期锁获取以保证相干性以及数据有效性。
[0077]可以通过存储在机器可访问或者机器可读介质上的、可由处理部件执行的指令或者代码来实现上面所阐述的方法、软件、固件或代码的实施例。机器可访问的/可读介质包括以由诸如计算机或者电子系统之类的机器可读的形式来提供(即,存储和/或发送)信息的任何机制。例如,机器可访问的介质包括随机存取存储器(RAM),如静态RAM (SRAM)或动态RAM(DRAM);只读存储器(ROM);磁或光存储介质;以及闪存设备。作为另一个例子,机器可访问/可读介质包括接收、复制、存储、发送或者以其它方式操作电、光、声或其它传播信号(例如,载波,红外信号,数字信号)形式的任何机制;等等,包括了上面所提出方法、软件、固件或代码的实施例。
[0078]贯穿本说明书的对“一个实施例”或者“实施例”的参考指的是结合实施例描述的特定的特征、结构或特性被包括在本发明的一个实施例中并且没有必要在所有讨论的实施例中出现。因此,在贯穿于本说明书中不同地方中出现的短语“在一个实施例中”或者“在实施例中”不必完全指代相同的实施例。此外,可以在一个或多个实施例中以任何适合的方式来组合特定的特征、结构或特性。
[0079]在上述说明书中,已经参考具体的示例性实施例给出了详细说明。但是,显然地可以对其进行不同的修改和变化而不背离所附权利要求所提出的本发明宽广的精神和范围。相应地,将说明书和附图作为说明的意义而非限制的意义。此外,上述实施例及其它示例性语言的使用不一定指代相同的实施例或者相同的例子,但是可能参考不同的和个别的实施例,并且可能是相同的实施例。
【权利要求】
1.一种装置,包括: 处理部件,其执行临界段,所述临界段由开始临界段操作和终止临界段操作来划界,其中所述开始临界段操作参考锁值和地址; 存储区,其与处理部件相关联以保持与所述临界段相关联的项,所述项保持所述锁值;以及 后期锁获取逻辑,其与所述存储区耦合,以响应于在所述临界段的未决期间遇到后期锁获取事件来尝试对地址的锁值更新。
2.如权利要求1所述的装置,其特征在于,还包括与所述处理部件相关联的高速缓存存储器,其中所述高速缓存存储器的线将与所述地址相关,并且其中尝试对地址锁值更新的后期锁获取逻辑包括后期锁获取逻辑以尝试对高速缓存存储器线的锁值更新。
3.如权利要求2所述的装置,其特征在于,存储区将在项堆栈中保存项并且所述项还将保持地址的表示,并且其中所述开始临界段操作包括对所述地址的锁值存储操作,当通过所述处理部件执行所述锁值的存储操作时,对与所述临界段相关联的项而不是所述地址进行所述锁值的存储操作。
4.如权利要求3所述的装置,其特征在于,与所述处理部件相关联的存储缓冲器将保持与所述锁值的存储相关的存储项,所述存储项包括阻塞代码字段,其中与所述存储缓冲器相关的更新逻辑将响应于所遇到的后期锁获取事件将所述阻塞代码字段更新为阻塞值。
5.如权利要求4所述的装置,其特征在于,更新逻辑响应于由后期锁获取逻辑尝试用所述锁值更新高速缓存存储器线是成功的来将所述阻塞代码字段更新为解锁值。
6.如权利要求5所述的装置,其特征在于,由后期锁获取逻辑尝试更新高速缓存存储器线是成功的包括在所述高速缓存存储器线中表示解锁值的当前值允许执行由锁值的后期锁获取逻辑所进行的更新。
7.如权利要求1所述的装置,其特征在于,后期锁获取事件是从由计时器到期事件、填满的高速缓存集合事件以及不可撤回事件所组成的分组中挑选出来。
8.一种装置,包括: 处理部件,其执行当前临界段以及后续的临界段; 与所述处理部件相关联的访问缓冲器,其保持与来自所述后续临界段的访问操作相关联的访问项,所述访问缓冲器项包括阻塞代码字段,其中所述阻塞代码字段将保持阻塞值以指示将阻止所述访问操作的分派;以及 与所述访问缓冲器相耦合的更新逻辑,其响应于检测到与所述当前临界段相关联的后期锁获取事件来更新所述阻塞代码字段以保持阻塞值。
9.如权利要求8所述的装置,其特征在于,所述阻塞代码字段将默认地保持解锁值以指示将要分派所述访问操作。
10.如权利要求8所述的装置,其特征在于,所述后期锁获取事件是从由计时器期满事件、填满的高速缓存集合事件以及不可撤回事件所组成的分组中挑选出来。
11.如权利要求8所述的装置,其特征在于,所述更新逻辑响应于检测到所述后期锁获取事件以及响应于满足后期锁获取预先条件来将所述阻塞代码字段更新为所述阻塞值。
12.如权利要求11所述的装置,其特征在于,所述后期锁获取预先条件包括允许全局上观察到多个未解决的填充缓冲器项。
13.如权利要求11所述的装置,其特征在于,所述访问缓冲器是加载缓冲器,并且其中所述访问操作包括后续的具有存储意图的加载(L_S_I)操作以指明所述后续临界段的开始。
14.如权利要求13所述的装置,其特征在于,还包括锁堆栈,其包括与指明当前临界段开始的当前L_S_I操作相关联的锁堆栈项,其中后期锁获取预先条件包括等待与当前临界段的当前L_S_I相关的存储操作以更新锁堆栈项。
15.如权利要求13所述的装置,其特征在于,所述阻塞值包括标识符,并且其中响应于后期锁获取的完成,所述更新逻辑将所述标识符广播到所述加载缓冲器项以允许分派L_S_I操作。
16.—种方法,包括: 在当前临界段执行期间检测后期锁获取事件; 启动对于所述当前临界段的后期锁获取;以及 响应于对于所述当前临界段启动所述后期锁获取来阻止多个高级存储。
17.如权利要求16所述的方法,其特征在于,所述后期锁获取事件是从包括监视计时器到期、对于已经在所述临界段的执行期间跟踪存储器存取的收回选择高速缓存线、以及遇到不可撤回事件的分组中选出来的。
18.如权利要求16所述的方法,其特征在于,对于所述当前临界段启动后期锁获取包括启动参考锁地址的锁值存储,所述锁值以及地址保持在与所述当前临界段的开始临界段操作相关联的锁堆栈项中。
19.如权利要求18所述的方法,其特征在于,所述多个高级存储被保持在存储缓冲器中,并且其中所述多个高级存储被解锁,以响应于参照所述锁地址退役的锁值的存储来分配。
20.如权利要求16所述的方法,其特征在于,响应于全局上观察到多个未决的填充缓冲器项来启动所述临界段的所述后期锁获取,并且用锁值来更新确定与所述临界段相关联的锁堆栈项。
21.如权利要求20所述的方法,其特征在于,还包括: 对后续临界段检测后续开始临界段操作;及 阻塞与所述后续临界段相关的检查点的创建。
22.如权利要求21所述的方法,其特征在于,阻塞与后续临界段相关的检查点的创建是响应于检测到所述后续的开始临界段操作的。
23.如权利要求21 所述的方法,其特征在于,还包括:确定所述后续的临界段不是嵌套临界段,其中阻塞所述检查点的创建是响应于确定所述后续的临界段不是嵌套临界段的。
24.如权利要求23所述的方法,其特征在于,确定所述后续的临界段不是嵌套临界段包括: 响应于所述存储缓冲器保持存储缓冲器项来排空存储缓冲器; 响应于所述存储缓冲器是排空的: 对没有检测到当前终止临界段操作作出响应来确定所述后续临界段是嵌套临界段;以及 对检测到当前终止临界段操作作出响应来确定所述后续临界段不是嵌套临界段。
25.如权利要求21所述的方法,其特征在于,对于所述后续临界段的所述开始临界段操作包括具有存储意向的加载(L_S_I)操作,并且其中阻塞与所述后续临界段相关的检查点的创建包括:阻塞所述L_S_I操作被从加载缓冲器中分配。
【文档编号】G06F9/46GK103544052SQ201310482999
【公开日】2014年1月29日 申请日期:2008年11月7日 优先权日:2007年11月7日
【发明者】H·阿卡瑞, R·拉杰瓦, S·T·斯里尼瓦桑 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1