具有高效的高速缓存支持的事务内存系统的制作方法

文档序号:6350277阅读:147来源:国知局
专利名称:具有高效的高速缓存支持的事务内存系统的制作方法
具有高效的高速缓存支持的事务内存系统
背景技术
本发明一般地涉及计算环境内的处理,更具体地讲,涉及一种具有对事务内存的优化支持的计算系统。当前的多处理器和多线程计算系统允许单个软件应用的性能提升到单线程应用的可能性能的许多倍。当前的软件和硬件系统提供执行的多个线程的并行处理。软件应用能够使用现有的线程库(诸如,POSIX pthread库),来控制并行执行的多个线程的创建。多个线程的使用对于对容易分割的任务和数据进行操作的应用而言工作良好;可使用粗粒度锁来控制对几个共享的数据结构的访问以防止多个线程的数据更新之间的少有冲突。许多软件应用包含必须在多个线程之间共享的数据结构并具有共享数据结构的频繁的并发检查和更新。这些应用需要另外的修改以便当使用大量线程时获得良好的调整。使用并发地访问共享数据结构的执行的多个线程的应用需要使用专门的数据加锁例程以便产生没有死锁和崩溃数据的可靠结果。大多数这个类别的现有多线程应用使用细粒度软件锁来实现良好的性能和正确的操作。编写使用细粒度软件锁的高性能多线程程序是极为困难的并且需要专家级编程技能。软件行业的这些技能的缺乏可能限制需要使用共享数据结构的多线程应用的生产,并且因此限制针对某些应用种类(包括许多形式的事务处理)的多线程和多处理器计算系统的效用。已提出并建立了各种“事务内存”系统以提供更简单的用于构造需要控制对共享数据结构的访问的多线程应用的编程模型。这些系统允许在执行的一个线程上运行的软件乐观地假定能够在与执行的其它线程的访问和更新没有冲突的情况下更新共享数据结构。 对内存的推测性更新保持为“未决”,直至事务内存系统确认未发生与其它线程的存储器访问的冲突。当检测到多个线程的存储访问之间的冲突时,事务内存系统必须能够丢弃未决的推测性更新。

发明内容
一个示例性实施例是一种由事务程序用来管理对第一线程的事务数据的共享内存位置的内存访问的计算机实现的方法,所述共享内存位置可由第一线程和第二线程访问。该方法包括在计算系统执行一串指令以完成第一线程的事务,该事务开始于所述一串指令中的一个指令。在计算系统确定所述一个指令是否是与第一线程的事务关联的指令的有效原子指令组(AIG)的一部分。定位一起提供AIG的处于有效模式的条目的高速缓存结构和事务表。响应于确定所述一个指令是有效AIG的一部分而执行所述定位。条目包括存储在高速缓存结构中的旧数据状态和存储在事务表中的控制信息。被有效AIG的指令检查或修改的所有存储器位置保持为未决,直至计算系统指示应该提交(commit)存储器位置。 响应于确定所述一个指令不是有效AIG的一部分,在普通执行模式下在计算系统执行下一指令。另一示例性实施例是一种由事务程序用来管理对第一线程的事务数据的共享内存位置的内存访问的计算机程序产品,所述共享内存位置可由第一线程和第二线程访问。 该计算机程序产品包括可由处理电路读取并存储由处理电路为执行一种方法而执行的指令的有形存储介质。该方法包括执行一串指令以完成第一线程的事务,该事务开始于所述一串指令中的一个指令。确定所述一个指令是否是与第一线程的事务关联的指令的有效 AIG的一部分。定位一起提供AIG的处于有效模式的条目的高速缓存结构和事务表。响应于确定所述一个指令是有效AIG的一部分而执行所述定位。条目包括存储在高速缓存结构中的旧数据状态和存储在事务表中的控制信息。被有效AIG的指令检查或修改的所有存储器位置保持为未决,直至计算系统指示应该提交存储器位置。响应于确定所述一个指令不是有效AIG的一部分,在普通执行模式下执行下一指令。另一示例性实施例是一种由事务程序用以在计算机系统中管理对第一线程的事务数据的共享内存位置的内存访问的系统,所述共享内存位置可由第一线程和第二线程访问。该系统包括计算机内存和与计算机内存通信的处理器。该处理器包括用于从内存取回指令的指令取回元件和用于执行取回的指令的一个或多个执行元件。该计算机系统能够执行一种方法。该方法包括执行一串指令以完成第一线程的事务,该事务开始于所述一串指令中的一个指令。确定所述一个指令是否是与第一线程的事务关联的指令的有效AIG的一部分。定位一起提供AIG的处于有效模式的条目的高速缓存结构和事务表。响应于确定所述一个指令是有效AIG的一部分而执行所述定位。条目包括存储在高速缓存结构中的旧数据状态和存储在事务表中的控制信息。被有效AIG的指令检查或修改的所有存储器位置保持为未决,直至计算系统指示应该提交存储器位置。响应于确定所述一个指令不是有效AIG 的一部分,在普通执行模式下执行下一指令。通过本发明的技术实现另外的特征和优点。本文详细描述本发明的其它实施例和方面并把它们视为要求保护的本发明的一部分。为了更好地理解本发明的优点和特征,参照描述和附图。


现在参照附图,其中在几个附图中相似的元件具有相似的标号图1表示可由本发明的示例性实施例实现的具有优化事务内存的计算系统;图2表示可由示例性实施例实现的真实系统事务内存表;图3表示可由示例性实施例实现的加载处理流程;图4表示可由示例性实施例实现的存储处理流程;图5表示可由示例性实施例实现的提交处理流程;图6表示可由示例性实施例实现的回滚处理流程;图7表示可由示例性实施例实现的专用指令和嵌套原子指令组(AIG)中使用的指令的AIG ;图8表示显示示例性实施例中的指令的解码和执行的流程的一般化流程图;图9表示可由示例性实施例实现的旧数据状态存储流程;以及图10表示可由示例性实施例实现的计算机程序产品。
具体实施方式
本发明的示例性实施例涉及一种组合数据高速缓存结构(例如,硬件缓冲器)与基于日志的结构(例如,软件表)以保持推测性事务数据的事务内存系统。示例性实施例规定“旧数据状态”存储在高速缓存中并消除了把“旧数据状态”移动到基于日志的结构中的需要。然而,在数据高速缓存结构不能存储旧数据状态(例如,它已满)的情况下,示例性实施例规定把旧数据状态存储在基于日志的结构中。示例性实施例提供一种计算系统,该计算系统使用附加到真实系统内存的每个增量的“事务专有”(PTRAN)标签、推测性加载和存储的日志以及存储与推测性加载和存储关联的旧数据状态的数据高速缓存结构的组合,提供事务内存系统的改进实现方式。示例性实施例使用以添加的标记位用作PTRAN标签并与真实系统内存的每个增量关联的日志。提供硬件以快速检测执行的多个线程上运行的事务的存储器访问之间的冲突。当与现有系统相比时,本发明的示例性实施例中所包括的内存中的标签和关联的冲突检测硬件的使用以小得多的开销提供了一种快得多的事务内存系统。示例性实施例的复杂性低于以前在使用另外的高速缓存一致性状态进行冲突检测方面的尝试,对于具有大量处理器和关联的互连的系统而言尤其如此。本发明的示例性实施例使用计算系统的高速缓存和主内存阵列的组合来保持推测性数据(既包括旧数据状态又包括控制信息)并且能够支持非常长的事务。示例性实施例使用高速缓存存储旧数据状态并且使用主内存阵列(这里也称为主存储器或主内存)存储事务和与推测性加载和存储关联的地址信息(例如,控制信息)。另外,主内存阵列用于存储不适合为旧数据状态保留的高速缓存部分(例如,缓冲器)的任何溢出旧数据状态。这里所使用的术语“旧数据状态”是指在作为事务内部的存储指令的目标的存储器位置的原始非推测性数据。示例性实施例提供在没有通常情况的长搜索过程的情况下检查新的内存访问的地址的能力。同样地,它是对仅使用软件的事务内存系统的改进,因为冲突检测和内存中的标签的使用消除了与跟踪事务的推测性状态关联的一些软件开销。与跟踪可能为几百或几千字节的整个软件对象的更新的现有技术软件系统相比,它还提供以非常精细的水平(下至单个字节)检测存储器冲突的能力。当尝试跟踪对软件对象的个体组成部分的更新时,现有软件系统将会给出潜在数据冲突的频繁的过度指示或者引起非常大的软件路径长度的不利后果。通过提供用于存储旧数据状态的高速缓存位置,实现了消除对主内存进行读写所需的带宽的另一优点。如美国专利号7,536,517(以下,“’ 517专利”)所示已提出事务内存系统,该专利教导使用与已由事务访问的内存位置关联的软件征募(enlistment)记录。‘517专利中描述的系统也使用“征募记录”中的“版本值”。‘517专利的图3包括操作“定位内存位置的征募记录”。描述图3的文本给出征募记录的例子,该征募记录是在引用的内存地址的软件对象的一部分并且是使用“软件事务内存接口”创建的。‘517专利使用与每个征募记录关联的版本号并且需要处理版本号超过由征募记录支持的最大编号的情况。事后来看,在学习本发明的示例性实施例的细节之后,将会认识到,不需要事务内存系统的最近发展的这些特征并且能够改进这些特征。早先,现在说在很久以前,如David A. Wood在他的标题为“An Overview of Hardware Alternatives,,的文章(Transactional Memory Workshop, 2005 年 4 月 8 日) 中总结的快步调的计算系统发展的发展中所指出的,正是IBM的Chang和Mergen(在801Storage Architecture and Programming中描述)提出使用与虚拟内存的每段关联的加锁位。他们的系统提供了检测多个线程对存储器位置的并发访问的能力,但在事务加锁机构变为有效时限制在任何单个虚拟内存段上能够操作的并发线程的总数。Chang和 Mergen执行并发线程所需的大虚拟内存页表对使用虚拟内存执行的所有线程施加了性能上的不利后果,而非仅对执行事务的线程施加了性能上的不利后果,因此Chang和Mergen 的建议变为现有技术中的趣闻,如Woods所说“好像没有人看见他们学到了什么”。本发明的示例性实施例结合数据高速缓存结构使用不同于该系统的虚拟内存页表的“事务表”存储与推测性加载和存储关联的信息。Woods并不知道,在Chang和Mergen IBM Yorktown设施中,存在正在进行的与事务内存系统相关的实验室开发,包括于2005年6月20日提交的标题为“Architecture Support of Best-Effort Atomic Transactions for Multiprocessor Systems,,的美国专利No. 7,350,034 (以下,“’ 034专利”)中描述的内存系统。‘034专利描述了一种致力于使用“高速缓存作为用于由原子事务访问的数据的缓冲器”的事务内存系统。‘034专利教导在系统检测到“缓冲器溢出”时强制使事务失败,而未提出处理从高速缓存逐出推测性数据的情况。如果太多的事务加载或存储以同一高速缓存同余类为目标,则将会导致缓冲器溢出。从高速缓存溢出并失败的事务的百分比将会与事务中包含的加载和存储的数量成比例。长事务将会更频繁地失败。已提出使用高速缓存实现冲突检测方案并且捕捉从高速缓存溢出的推测性数据的其它系统。本发明的示例性实施例并不主要依赖于数据高速缓存状态进行冲突检测。 所要求的专门高速缓存状态使复杂性不希望地增加并且还使得难以把所需的检测和隔离机制添加到现有多处理器高速缓存一致性设计。然而,除了 ‘034专利中描述的方案之夕卜,存在众多已进行的、利用高速缓存的尝试。一种方法是使用“像前日志(before-image log)”和高速缓存一致性状态来实现冲突检测方案。另一种方法由Ananian等人在他们的标题为"Unbounded Transactional Memory,,的论文(Research Abstracts 2006, CSAILPublications and Digital Archive)中描述,该论文描述了一种使用单个“未排序线性阵列数据结构”捕捉从数据高速缓存溢出的推测性数据的事务内存系统。他们对每个高速缓存组使用一个额外的位,即,使用“0”位指示该组是否已“溢出”,并且对每个高速缓存条目使用另一位,即,使用“T”位指示该条目保持推测性数据。该线性阵列数据结构提供支持更长的事务的能力,但它不提供本发明的示例性实施例的快速检测能力。需要针对以“溢出”的组为目标的任何高速缓存访问,搜索Ananian的线性阵列。这对于引起许多溢出的事务将是较长的过程。Rajwar、Herlihy和Lai在他们的标题为“Virtualizing Transactional Memory"(2005IEEE)中采用了与 Ananian 相似的方法。Rajwar 等人也使用数据高速缓存作为用于跟踪与事务关联的推测性状态的主要机构。被迫离开高速缓存的推测性数据被移至虚拟内存中的事务地址数据表(XADT)溢出区域。与作为XADT的一部分的地址的可能冲突的检测需要对XADT的缓慢线性搜索。Rajwar描述使用过滤器来消除这些搜索中的一些,但存在许多仍然需要进行搜索的情况。除了以上总结的本领域中的发展以外,已提出许多软件接口和指令集修改以支持事务内存。论文 “Architectural Semantics for Practical Transactional Memory” (McDonald 等人,Computer Systems Laboratory, Stanford University, 2006)比
6较了一些提议并提供了许多其它提议的参考,并且通过引用将其全部内容包括在本文中。已提出许多软件接口和指令集修改以支持事务内存。本发明的示例性实施例可以结合它们中的任一种使用以便提供高性能事务内存操作,而不会引起硬件或软件复杂性的较大增加。针对IBMpowerpc 架构描述了示例性实施例,但任何本领域技术人员能够把相同的方法应用于任何其它架构,诸如具有P3、P4、P5处理器的IBM的zSeries 、IBM的 pSeries ,甚至ibm的系统38及其As/400 能够使用本发明的示例性实施例的支持,其它计算机系统(诸如,SunMicrosystems的SPARC 和Intel IA-32等)也是如此。任何本领域技术人员可扩展示例性实施例,以与可能为其它专用版本的事务内存实现方式创建的其它应用编程接口(API) —起使用。本发明的示例性实施例使用与所有内存位置(而非仅仅当前作为有效事务的一部分的内存位置)关联的一个或多个硬件位。与使用‘517专利中描述的过程能够获得的事务执行相比,示例性实施例使用添加的一个或多个硬件位提供快得多的事务执行。示例性实施例结合用于优化内存使用的作为日志的改进事务表,使用数据高速缓存结构保持旧数据状态,并提供使用比由像‘517专利中描述的系统一样的其它系统将会使用的内存少的内存的系统,但示例性实施例仍能够执行为这些其它系统开发的应用。示例性实施例为每个存储器增量提供一个或多个PTRAN位。在当前实施例中不需要“定位"PTRAN位的间接方法。示例性实施例提供潜在冲突的快得多的指示,因为PTRAN位是要标记的内存位置的可直接寻址部分。示例性实施例不需要诸如在‘517专利中描述的接口,并通过使用硬件和固件更新并重置PTRAN位实现它的益处。虽然根据需要可以提供直接接口,但示例性实施例不要求应用软件知道PTRAN位的状态。示例性实施例还针对短的提交处理时间进行了优化。示例性实施例不要求使用每个存储器位置的版本号。示例性实施例的优点在于它使用不同于系统的虚拟内存页表的“事务表”。这使非常大的事务能够被处理并提供下至单个字节的冲突检测。示例性实施例对能够同时访问同一虚拟内存段中的内存位置的并发线程的数量没有限制。示例性实施例对物理内存地址(或真实地址)执行冲突检测并仅在这个冲突检测的粒度限制同时访问。这个粒度能够针对示例性实施例的各种实现方式而不同,但将典型地为字节的数量级。如果Chang和 Mergen系统尝试使用大量并发线程,则该系统不能在不使用极大虚拟页表格式并因此引起性能不利后果的情况下提供类似的益处。本发明的示例性实施例不施加这种性能不利后果。示例性实施例的另一优点在于与推测性加载和存储关联的旧数据状态被存储在位于高速缓存中的数据高速缓存结构中,因此节省了把旧数据状态移至事务表所需的任何带宽和时钟周期。如果该数据高速缓存结构变满,则旧数据状态被存储在作为数据高速缓存结构的后备的事务表中。现在更详细地参照附图,将会看到,在图1中,存在表示本发明的示例性实施例的计算系统,该计算系统具有经由互连元件(110)耦接到物理内存阵列(120)的一个或多个微处理器(100,101,102)。微处理器(100,101,102)包括高速缓存104 (在本文也称为“高速缓冲存储器”)并且高速缓存104包括用于存储与事务关联的旧数据状态的高速缓存结构106。在示例性实施例中,高速缓存结构106是包含32个高速缓存行的硬件缓冲器。可由示例性实施例实现其它高速缓存结构和高速缓存行数,并且可基于诸如应用和系统要求的准则选择其它高速缓存结构和高速缓存行数。物理内存阵列存储与真实系统内存的每个增量关联的PTRAN标签(122)和事务数据(121)。互连元件(110)能够实现为共享总线或纵横开关。示例性实施例适用于使用把物理内存互连到可实现于一个或多个芯片中的多处理器系统的任何其它方案的系统。内存能够被分成更小的部分并且跨每个中央处理单元 (CPU)芯片的专有连接分布,如同针对使用POWER4 微处理器的一些IBM系统或者针对基于Amdahl的AMDOpteron 的服务器所做的那样。微处理器和内存控制器可一起位于单个硅芯片上或者它们可以散布在多个芯片上。计算系统的物理内存被分成η个增量。为η个增量中的每个增量提供与真实系统内存的每个增量关联的一个或多个(PTRAN)位。示例性实施例允许选择任何内存增量大小并且最好的选择将取决于工作负荷特性、硬件成本和目标系统中使用的数据高速缓存结构。在示出的实施例中使用16字节的增量。PTRAN位用于指示内存中的数据条目是否是系统中当前有效的未提交事务的推测性内存状态的一部分。如图7的嵌套AIG代码序列表示的特殊新指令(BEGIN_AIG,END_AIG)用于标记一组指令的开始和结束。在特殊新指令之间执行的指令被称为由图7中显示的“原子指令组”(AIG)指令(指令A0,指令Al,指令A2)表示的AIG。当处理器在执行作为AIG的一部分的指令时,使用另外的存储器访问规则。以原子方式在内存中更新被AIG指令组修改的所有存储器位置。对存储器位置的更新保持为“未决”,直至处理器和/或软件应用指示它们应该被“提交”。所有的更新或者被一次性提交给“普通”内存或者它们被丢弃。当硬件和 /或软件检测到多处理器系统中并发执行的多个AIG的存储器访问之间的冲突时,结果被丢弃。示例性实施例为硬件提供快速检测多个AIG的存储器访问之间的潜在冲突的方法。 虽然示例性实施例使用特殊新指令来标记事务的边界,但任何其它方法能够用于识别要以原子方式更新的一组内存位置。示例性实施例与可用于实现事务内存系统的任何数量的软件接口兼容。示例性实施例能够为尝试提供多个存储器位置的原子更新的任何系统提供相同的快速冲突检测。示例性实施例还适用于以任何其它方式标记指令组的边界的系统,包括编译器产生的附加到其它指令的提示、由内部微码或毫码产生的内部微处理器命令。PTRAN标签(122)是为由作为AIG的一部分的指令产生的所有内存访问设置的、与内存中的增量关联的一个或多个位。处理器在尝试设置位之前检查这个位;这能够实现快速检测与在其它线程上并发执行的其它AIG的潜在冲突。该位的设置可通过IBM ζ/架构的“测试并置位”(TS)操作或能够实现多线程或多处理器系统中的原子更新的任何其它等效操作完成。现在参照图2,将会看见,创建事务表(230,231)作为在这里作为物理内存(120) 示出的真实系统内存(220)(在本文也称为“主存储器”)的一部分。也能够在逻辑或虚拟内存中创建事务表(230,231)。能够使用把逻辑系统内存映射到物理系统内存的任何系统,并且在现有技术中已知许多能够使用的例子,诸如IBM zSeries、IBM pSeries、Sun Microsystems的SPARC、Intel的IA-32等中的例子。当作为AIG的一部分的指令引起内存位置被检查或更新时,制作事务表条目。线程标识符(203,213)与每个事务表(230,231) 关联。下一条目寄存器(202,212)用作事务表(230,231)的索引并指示接下来应该写哪个条目。表起点(201,211)指示事务表(230,231)针对其线程(203,213)的第一个条目的地址。事务表(230,231)用于保持除了与已被检查或更新的内存位置关联的PTRAN标签位所关联的简单信息之外的附加信息。这种附加信息和与AIG关联的推测性状态相关。在本文描述的示出的IBM zSeries或pSeries CPU(100,101,102)实施例中,使用单个PTRAN位。 在这种情况下,事务表(230,231)和高速缓存结构(106)的组合将包含关于推测性状态的所有附加信息(例如,该组合将包含AIG的处于有效模式的条目),因此该PTRAN位将仅指示物理地址被包括在AIG中。这针对事务表A(230)被示出为地址(240)、事务信息标识符 (241)和旧或新数据(242)。如本文所述,如果高速缓存结构(106)不能存储旧数据,则事务表A(230)仅包含旧数据。这在高速缓存结构(106)变满时可能发生。以这种方式,事务表A(230)用作用于存储旧数据状态的高速缓存结构(106)的后备。其它实施例可使用能够由硬件或软件使用的另外的PTRAN位以加速AIG或任何其它事务内存系统的推测性状态的处理中涉及的某些事件的处理。仅在内存中使用单个位和使该位和与高速缓存结构组合的事务表中的事务状态的更完整的描述相关联的组合提供了这样一种事务内存系统它需要非常少的硬件开销,不会引起现有技术软件事务内存系统中看到的性能不利后果。再次参照图2,将会看见,例如事务表A (230)中的条目包括已在AIG内部检查或更新的地址(240)、事务信息字段(241)和数据字段(242)。作为AIG的一部分的存储指令将会使系统针对该地址把“旧”数据值、旧数据状态从原始存储器位置复制到高速缓存结构 (106),并且新的推测性数据放置在主存储器位置(例如,物理内存(120))中。如果高速缓存结构(106)不能存储旧数据状态,则它在事务表中被存储在数据字段(242)中。如果需要,可以使示例性实施例与高速缓存结构(106)中保持的新值一起工作。 把旧数据值放置在高速缓存结构(106)中允许针对大多数事务成功的情况优化系统。通过改变高速缓存结构(106)的指针或者通过清除高速缓存结构(106)的内容,当事务被永久地提交给内存时,在不再需要旧数据时能够快速地丢弃旧数据。事务表条目的事务信息字段241包括详细决定引起事务失败的需要所需的任何事务信息。还提供附加信息以允许对嵌套事务、虚拟化事务或事务内存架构的其它扩展的高效支持。在示例性实施例中,事务信息字段(241)包括这样的指示关联地址(240)的存储访问是加载型访问还是存储型访问。 事务信息字段(240)还能够指示该地址是否在系统中的多个AIG之间被共享。图3显示使用PTRAN位和事务表跟踪推测性状态的动作的加载处理流程图。当处理器尝试加载型访问时,最初,进行判定(310)以确定加载访问地址是否是AIG的一部分以及用于AIG访问的特殊存储器访问规则是否适用。如果判定结果是否定的,则应用普通处理并且遵循普通加载处理(320)操作。在判定处理步骤(310)中可以以许多不同方式确定加载型访问是否是AIG的一部分。可以在处理器管道中或者在加载/存储单元中设置模式位以指示特殊AIG操作模式为有效。该模式可以是处理器的物理状态或虚拟处理器的逻辑状态的一部分。如果该特殊操作模式不是有效的,则该加载被视为普通加载(320)。可提供这种“AIG有效模式”的“覆盖(override) ”。覆盖能够与包含目标地址的逻辑内存段或逻辑内存页关联。覆盖强迫系统把存储请求视为普通,而不管该请求是AIG 的一部分的事实。如果覆盖有效,则判定(310)的结果将会导致发生普通处理(320)。假设 AIG有效而覆盖不是有效的,则在检查步骤(330)检查关联的PTRAN位。AIG内部的加载指令在检查时检测PTRAN位的状态。当PTRAN位已被置位(330)时,这可能是由于在同一处理器上或者在另一处理器上执行的另一线程的动作所导致。如果在检查步骤330发现PTRAN 位未被置位(340),则处理器把PTRAN位置位并通过在置位PTRAN块(340)添加到事务表以针对有效AIG在事务表(230)中记录该访问,然后完全加载能够继续(360)。如果PTRAN位已被置位,则把引起这种潜在冲突的地址与在处理器的事务表中已经输入的地址进行比较。如果当由同一AIG中更早的另一次加载在检查块(330)测试时把PTRAN位置位,则测试并确定(350)它已经是该AIG的一部分并且随后完全加载可继续(360)。每个事务表(230, 231)包含用于特定AIG的地址。类似地,在示例性实施例中,每个高速缓存结构(106)包含用于特定AIG的旧数据状态。在示例性实施例中,每个高速缓存结构(106)对应于一个事务表并且同一索引用于存储旧数据状态和与AIG中正在跟踪的每个指令关联的控制信息。因此,如果测试并确定(350)该地址不是该AIG的一部分,则未在处理器的事务表中找到用于该加载的地址并且随后在AIG共享的确定步骤(370)中处理器检查是否启用该地址在AIG 之间共享。如果该地址当前未被启用在多个AIG之间共享,则在是否允许在AIG之间共享的确定步骤(370)中,处理器可通知系统中的其它处理器以请求对这个地址的“共享AIG访问”。如果系统中没有其它AIG已推测性地写该存储器位置,则能够准许共享访问。如果未准许共享访问,则AIG失败(380),否则(390)加载地址被添加到事务表(230)并且事务信息字段(241)被更新以指示该地址是在系统中的多个AIG之间共享的加载访问。图4是显示用于处理作为AIG的一部分的存储的动作的存储处理流程图。当处理器尝试存储型访问时,最初,进行存储判定(400)以确定该访问是否是AIG的一部分以及用于AIG访问的特殊存储器访问规则是否适用。以与先前针对加载访问描述的方法类似的方法检查处理器的模式。如果用于AIG访问的特殊访问规则适用的特殊操作模式不是有效的,则该存储被视为普通存储(440)。假设AIG有效,在存储过程检查块(410)检查关联的 PTRAN位。如果PTRAN位未被置位,则在存储事务步骤(450)把PTRAN位置位并且把新条目添加到事务表(230)。“旧数据”被移至高速缓存结构(106),地址被写到该新条目(240) 并且事务信息字段(241)被更新。如以下参照图9所述,如果高速缓存结构(106)不能存储旧数据状态,则旧数据状态被存储在事务表的数据字段(242)中。事务信息字段(241) 被标记以指示与这个条目关联的访问是存储型访问。在PTRAN位的置位完成之后,新的存储数据被写到内存。如果PTRAN位的检查(410)指示该位已被置位,则判定(420)当前存储地址是否是在处理器上有效的AIG的一部分。检查该处理器的事务表(230),如果确定该地址存在于事务表中,则检查该条目的事务信息字段(241)并判定共享访问条目(460)。 如果事务信息字段(241)指示该条目是在多个AIG之间共享的加载型访问条目,则事务失败(430),否则关联的条目的事务信息字段(241)被更新以指示存储型访问并且处理该存储(470)。现在参照图5的提交处理流程图,将会看见,示例性实施例包括如在测试步骤 (500)最初确定的当AIG中的最后一个指令已被处理并且整个组准备好被永久地“提交”给内存时完成的一组动作。如果测试结果是否定的,则处理在AIG模式下继续进行(550)。当根据图3和图4的流程图的AIG的加载和存储的处理未导致事务失败时,AIG被提交给内存。在AIG成功的情况下,测试(500)确定AIG中的最后一个指令已被处理并且整个组准备好被永久地“提交”给内存。然后,检查(510,520)事务表并且读取要提交的针对AIG的每个条目并且它的关联PTRAN位在事务表提交步骤(530)确定中在内存中被重置。专用硬件弓I擎可用于完成这种提交操作的执行。处理器高速缓存、多处理器一致性动作和示例性实施例的组合能够用于提供具有这样的错觉的软件即使主内存存储器阵列未被同时更新,单个AIG的所有内存更新也同时发生。在提交处理期间,PTRAN位的重置持续,直至已确定到达事务表中的最后一个有效条目(530)。此时,AIG被认为已被提交并且引擎的执行因此完成(540)。—些条件阻止AIG的完成。在执行AIG时的加载处理(380)期间或者在执行AIG 时的存储处理(430)期间,可以检测到这些条件。存在可能导致需要异常中止AIG的处理的许多其它可能的处理器条件。这些条件包括在系统中检测到的错误条件以及将需要大量另外的硬件支持以便使处理器能够正确地处理它们的其它条件。许多现有技术事务内存架构包括事务的异常中止和随后重试的规定。现有技术软件构造能够与示例性实施例一起使用以消除提供处理所有可能的特殊情况的硬件的需要。简单的例子是在处理AIG中的定时器中断的情况。该中断可能使处理器花费大量时间运行不是部分完成的AIG的一部分的代码。可能不希望处理器在这个时间期间使AIG保持有效。当定时器中断发生时,该系统能够强迫当前执行的任何AIG的事务失败。类似的方法能够用于处理器中发生的任何其它特殊情况事件。根据图6中显示的用于“回滚”处理的回滚处理流程图的过程来处理事务失败或强制重试。现在参照图6,将会看见,事务失败条件(600)的缺乏使处理器在AIG有效模式下继续工作(650)。关于检测事务失败和引起事务回滚,示例性实施例使用“急切式(eager)” 策略。此外,示例性实施例可用于等待直至事务结束以采取回滚所需的动作的系统。作为 AIG的一部分执行的内存更新被同时提交给普通主存储器(图5)或者利用“回滚”操作 (620-640)丢弃它们。当发现事务失败条件(600)失败时,需要另外几个步骤(610,620)。回滚事务表处理条目步骤规定检查AIG的事务表(230)和高速缓存结构(106)并且把任何旧数据(或旧数据状态)写回至条目中指示的主内存地址(240)。用于关联的地址的PTRAN位被重置。 回滚处理(620)继续,直至表中的最后一个有效条目已被处理(630)。在最后一个有效条目已被处理之后,回滚完成(640)。在此时由处理器采取的动作将会基于用于事务内存的各种软件架构而不同。可使用背景中描述的任何事务内存架构。在一些情况下,将会从开始重试AIG。在其它情况下,特殊软件处理程序将被调用以处理事务失败。示例性实施例可以与这些不同架构中的任何架构一起使用。示例性实施例支持“嵌套”事务的执行。如图7中所示,第二 AIG可以被包括在第一 AIG的范围内。每个BEGIN_AIG特殊指令(图7)语句使系统创建一个事务表(230)并把该表与该AIG关联。关于存储器地址是否属于AIG的判定(350)可包括内AIG(A)或者内 AIG和外AIG的组合(A&B)。END-AIG特殊指令语句(图7)结束事务序列,但如图中所示, 用于特定事务(事务B)的序列可以嵌套在另一序列(事务A)内。多个事务表(230)的使用可用于支持许多用于事务内存的嵌套架构。多个版本的“旧数据”或旧数据状态可以以任何嵌套深度存储在任何数量的高速缓存结构(106)或事务表(230)中。依赖于数据高速缓存保持推测性状态的现有技术事务内存系统不能在没有把附加状态信息添加到高速缓存目录以及为高速缓存一致性协议增加额外复杂性的情况下为嵌套的事务提供类似的支持。 现有技术系统上的嵌套支持将把大的硬件复杂性不利后果施加于这些设计。示例性实施例也能够被扩展以包括包含来自内AIG (指令B0,指令Bi)和外AIG (指令A0,指令Al,指令 A2)两者的条目的组合事务表/高速缓存结构。可替代于单独的事务表和高速缓存结构使用这种组合事务表/高速缓存结构,或者除了单独的事务表和高速缓存结构之外还使用这
11种组合事务表/高速缓存结构。存在许多能够添加到示例性实施例以加速事务表操作的处理以及PTRAN位的置位和重置的另外的硬件特征。由于PTRAN位是主存储器数据的一部分,所以它能够被缓存在系统的普通数据高速缓存中。事务表也是主存储器的一部分并且也能够被缓存。本文所使用术语“主存储器”是指DRAM内存芯片的阵列。附加控制信息能够被添加到数据高速缓存以指示特定地址是否已被启用以用于“共享AIG访问,,并因此针对一些情况消除搜索事务表的需要。如上所述的本发明的示例性实施例的能力能够实现于软件、固件、硬件以及软件和固件的某种组合。图8显示使用示例性实施例的计算系统中的指令的解码和执行的流程。示例性实施例使用BEGIN_AIG指令指示AIG的开始并使用END_AIG指令指示AIG的结束。能够使用标记一组指令的开始和结束的任何其它合适的方法。指令或标记可以由编程者以高级语言显式地插入在代码中或者由编译器或翻译器添加,作为高级加锁功能的实现方式。在运行时环境中,可通过库函数调用来添加指令或标记,或者可通过特殊事件包括指令或标记。作为针对对特定指令序列进行解码或接收进入新执行模式的特殊命令的响应,可由固件、硬件或二者的组合产生指令或标记。示例性实施例在指令的解码(800)之后识别AIG的开始。如果确定已解码出 BEGIN_AIG指令(805),则处理器进入新执行模式(AIG模式)(815),否则像往常一样执行指令(810)并且对于下一指令继续进行处理(800)。在进入AIG模式之前,以与在IBM Z-Series架构中处理传统程序调用的方式相同的方式保存处理器的架构状态。任何类似的状态保存机制可用在任何其它处理器架构上。 处理器可在AIG失败的情况下直接返回到该保存的状态或者可在已调用一系列其它错误处理例程之后返回到该状态。在处于AIG模式时,指令的解码继续(820)。如果解码了加载或存储(825),则需要对这些加载和存储进行特殊处理(840)。AIG内部的加载的处理所需的步骤描述于图3中,AIG内部的存储的处理所需的步骤描述于图4中。在AIG中的加载和存储被处理之后,确定(850)是否如图3和图4的说明中所述存在AIG失败。如果存在失败,则调用特殊处理程序(860)。用于事务失败的特殊处理程序的动作可根据使用示例性实施例的系统的架构而不同。在现有技术中已描述许多处理事务失败的方法,它们中的任何一种方法能够用于这个目的。可能的方法包括从开始把事务重试设置的尝试次数、等待引起失败改变的条件、调用专用软件例程以解决线程之间的冲突等。这些可能的失败处理程序可能需要引起失败的AIG的回滚(860)。如果未检测到失败,则确定加载或存储是否是 AIG的最后一个指令(855)。如果指令是AIG中的最后一个指令,则使用图5中描述的过程提交AIG(865)。处理器随后退出AIG模式并继续执行AIG之后的下一顺序指令(800)。AIG内部除加载和存储之外的指令的解码不是必须要求特殊处理(830)。如果指令不是加载或存储型指令,则确定指令是另一 BEGIN_AIG(830)。嵌套的AIG指令需要特殊处理(835)。现有技术包含许多不同的处理嵌套事务的方法。示例性实施例能够用于支持它们中的任何一种方法。用于示例性实施例的嵌套AIG处理程序把“内” AIG的指令添加至IJ“外”AIG,从而创建单个更大的AIG。本发明的其它实施例可提供作为内嵌套事务的一部分的加载和存储的处理的不同规则以及用于内嵌套事务的提交和失败处理的特殊规则。如果确定指令不是BEGIN_AIG,则执行该指令(845)并且接下来确定(855)该指令是否是AIG 的最后一个指令。优选实施例使用END_AIG指令的解码来指示已到达AIG的最后一个指令。如果已到达AIG的最后一个指令,则AIG被提交给内存并且处理器退出操作的AIG模式(865)。图9表示可由示例性实施例实现的旧数据状态存储流程。在块902,(例如,从图 4中的块450)接收把与AIG关联的旧数据状态写到高速缓存结构(106)的请求。如前所述,高速缓存结构(106)位于高速缓冲存储器(104)中;这在写和读旧数据状态时提供了快速数据访问。在示例性实施例中,高速缓存结构(106)是硬件缓冲器,然而可由示例性实施例实现其它软件和/或硬件实现方式。在示例性实施例中,硬件缓冲器对应于事务表(230,231)并且针对每个事务表(230,231)实现的一个缓冲器(逻辑的或物理的)。在这个实施例中,事务表(230,231)的下一条目寄存器(202,212)可由对应缓冲器用来存储(和检索)旧数据状态。在其它示例性实施例中,一个缓冲器被多个事务表(230, 231)用来存储旧数据状态。在这个实施例中,为缓冲器保持单独的索引,并且保持事务表 (230,231)中旧数据状态和地址之间的相关性。在块904,确定旧数据状态是否能够存储在该缓冲器中。在图9中描述的实施例中,如果该缓冲器已满,则旧数据状态不能存储在该缓冲器中。在示例性实施例中,高速缓存的控制结构中的位用于指示缓冲器已满。如果缓冲器已满,则执行块908并且旧数据状态被写到事务表的在由下一条目寄存器(202,212)指示的位置(即,事务表中与对应地址相同的行)。在事务表的头部中把一个位置位以指示旧数据状态位于事务表中。如果在块904中确定缓冲器未满,则在块906继续进行处理。在块906,旧数据状态被写到该缓冲器。在图9中描述的实施例中,每个事务表具有对应的缓冲器并且旧数据状态被写到缓冲器的由下一条目寄存器(202,212)指示的位置。在事务表中把一个位置位以指示旧数据状态是位于缓冲器中还是位于事务表的数据字段242中。技术效果和益处包括当与现有系统相比时具有少得多的开销的高速事务内存系统。另外,通过提供用于存储与推测性加载和存储指令关联的旧数据状态的高速缓存位置, 减少了带宽要求和处理时间。另外,通过在高速缓存结构变满时使用主存储器中的事务表作为高速缓存的后备,提高了系统可靠性和可用性。本文使用的术语仅用于描述特定实施例的目的,而非意在限制本发明。如本文所使用的,单数形式“a” “an”和“the”也包括复数形式,除非上下文清楚地指示不是这样。另夕卜,应该理解,当在本说明书中使用时,术语“包括”和/或“包含”指定存在声称的特征、整数、步骤、操作、元件和/或部件,但并不排除存在或增加一个或多个其它特征、整数、步骤、 操作、元件、部件和/或它们的组合。以下权利要求中的所有装置或步骤加功能元件的相应结构、材料、动作和等同物意在包括用于结合具体要求保护的其它要求保护的要素而执行功能的任何结构、材料或动作。本发明的描述是为了说明和描述的目的而给出,而不是想要穷举或者将本发明限制为所公开的形式。在不脱离本发明的范围和精神的情况下,许多修改和变型对于本领域普通技术人员而言是显而易见的。选择并描述实施例以最好地解释本发明的原理和实际应用, 并且使其他本领域普通技术人员能够针对具有适合设想的特定用途的各种修改的各种实施例来理解本发明。本领域技术人员应该理解,本发明的各方面可以实现为系统、方法或计算机程序产品。因此,本发明的各方面可以采用通常全部可在本文称为“电路”、“模块”或“系统”的完全硬件实施例、完全软件实施例(包括固件、常驻软件、微码等)或组合软件和硬件方面的实施例的形式。另外,本发明的各方面可以采用实现于具有计算机可读程序代码的一个或多个计算机可读介质的计算机程序产品的形式。可以使用一个或多个计算机可读介质的任何组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是例如但不限于电子、磁、 光学、电磁、红外或半导体系统、设备或装置或者前述各项的任何合适的组合。计算机可读存储介质的更具体的例子(非穷举列表)将包括下述各项具有一个或多个线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器 (EPR0M或闪存)、光纤、便携式压缩盘只读存储器(CD-ROM)、光学存储装置、磁存储装置或前述各项的任何合适的组合。在本文的上下文中,计算机可读存储介质可以是能够包含或存储由指令执行系统、设备或装置使用或结合指令执行系统、设备或装置使用的程序的任何有形介质。计算机可读信号介质可包括例如基带中或作为载波的一部分的嵌入了计算机可读程序代码的传播数据信号。这种传播信号可采用多种形式中的任何形式,包括但不限于电磁信号、光学信号或者它们的任何合适的组合。计算机可读信号介质可以是并非计算机可读存储介质并且能够传送、传播或传输由指令执行系统、设备或装置使用或结合指令执行系统、设备或装置使用的程序的任何计算机可读介质。可以使用任何合适的介质(包括但不限于无线、有线、光缆、RF等或前述各项的任何合适的组合)传输计算机可读介质上包含的程序代码。可以按照一种或多种编程语言的任何组合编写用于执行本发明的各方面的操作的计算机程序代码,所述编程语言包括面向对象的编程语言,诸如Java、Smalltalk, C++ 等;和常规的过程编程语言,诸如“C”编程语言或类似编程语言。程序代码可以完全在用户的计算机上执行、部分在用户的计算机上执行、作为独立软件包执行、部分在用户的计算机上并且部分在远程计算机上执行或者完全在远程计算机或服务器上执行。在后一情形中, 远程计算机可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接到用户的计算机,或者可以(例如,使用互联网服务提供商通过互联网)连接到外部计算机。以下参考根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图和/ 或方框图描述了本发明的各方面。应该理解,流程图和/或方框图中的每个方框以及流程图和/或方框图中的方框的组合能够由计算机程序指令实现。这些计算机程序指令可被提供给通用计算机、专用计算机或者其它可编程数据处理设备的处理器,以产生一台机器,从而指令(所述指令经由计算机或者其它可编程数据处理设备的处理器执行)产生用于实现流程图和/或方框图的一个或多个方框中指定的功能/动作的装置。这些计算机程序指令也可存储在计算机可读介质中,该计算机可读介质能够指示计算机、其它可编程数据处理设备或其它装置按照特定的方式发挥作用,从而存储在计算机可读介质中的指令产生一种制品,所述制品包括实现流程图和/或方框图的一个或多个方框中指定的功能/动作的指令。
计算机程序指令也可被加载到计算机、其它可编程数据处理设备或其它装置上, 以使得在所述计算机、其它可编程设备或其它装置上执行一系列的操作步骤以产生计算机实现的过程,从而在该计算机或其它可编程设备上执行的指令提供用于实现流程图和/或方框图的一个或多个方框中指定的功能/动作的过程。如上所述,实施例能够实现为计算机执行的过程和实施这些过程的设备的形式。 在示例性实施例中,本发明实现为由一个或多个网络元件执行的计算机程序代码。实施例包括具有计算机程序代码逻辑1004的计算机可用介质1002上的如图10中所述的计算机程序产品900,计算机程序代码逻辑1004包含在作为制品的有形介质中实现的指令。计算机可用介质1002的示例性制品可包括软盘、CD-ROM、硬盘驱动器、通用串行总线(USB)闪驱或者任何其它计算机可读存储介质,其中,当计算机程序代码逻辑1004被载入到计算机中并由计算机执行时,该计算机变为用于实施本发明的设备。实施例包括例如计算机程序代码逻辑1004,不管存储在存储介质中、载入到计算机中和/或由计算机执行、或者在某传输介质上传输,诸如在电线或线缆上、通过光纤光学器件或者经由电磁辐射传输,其中当计算机程序代码逻辑1004被载入到计算机中并由计算机执行时,该计算机变为用于实施本发明的设备。当实现于通用微处理器上时,计算机程序代码逻辑1004段配置微处理器以创建特定逻辑电路。附图中的流程图和方框图表示根据本发明各种实施例的系统、方法和计算机程序产品的可能实现方式的架构、功能和操作。在这个方面,流程图或方框图中的每个方框可代表包括用于实现指定的逻辑功能的一个或多个可执行指令的代码的模块、段或一部分。还应该注意的是,在一些另外的实现方式中,方框中标注的功能可以不按附图中标注的次序执行。例如,事实上,根据涉及的功能,连续示出的两个方框可以基本上并发地执行,或者这些方框有时候可以以相反的次序执行。还应该注意的是,方框图和/或流程图中的每个方框以及方框图和/或流程图中的方框的组合能够由执行指定的功能或动作的基于专用硬件的系统或专用硬件和计算机指令的组合实现。
权利要求
1.一种由事务程序用来管理对第一线程的事务数据的共享内存位置的内存访问的方法,所述共享内存位置可由第一线程和第二线程访问,该方法包括下述步骤在计算系统执行一串指令以完成第一线程的事务,该事务开始于所述一串指令中的一个指令;在计算系统确定所述一个指令是否是与第一线程的事务关联的指令的有效原子指令组(AIG)的一部分;定位一起提供AIG的处于有效模式的条目的高速缓存结构和事务表,响应于确定所述一个指令是有效AIG的一部分而执行所述定位,条目包括存储在高速缓存结构中的旧数据状态和存储在事务表中的控制信息,并且被有效AIG的指令检查或修改的所有存储器位置保持为未决,直至计算系统指示应该提交存储器位置;以及响应于确定所述一个指令不是有效AIG的一部分,在普通执行模式下在计算系统执行下一指令。
2.如权利要求1所述的方法,还包括 接收存储旧数据状态的请求;确定把旧数据状态存储在高速缓存结构中还是存储在事务表中; 响应于确定旧数据状态应该被存储在高速缓存结构中,把旧数据状态存储在高速缓存结构中;以及响应于确定旧数据状态应该被存储在高速缓存结构中,把旧数据状态存储在事务表中。
3.如权利要求2所述的方法,还包括 接收存储控制信息的请求;以及把控制信息存储在事务表中。
4.如权利要求1所述的方法,其中所述控制信息包括物理地址和事务专有(PTRAN)标签。
5.如权利要求1所述的方法,其中所述事务表位于主存储器中。
6.如权利要求1所述的方法,其中所述高速缓存结构位于高速缓冲存储器中。
7.一种包括适于执行如任一前述方法权利要求所述的方法的所有步骤的装置的系统。
8.一种计算机程序,该计算机程序包括当在计算机系统上执行所述计算机程序时用于执行如任一前述方法权利要求所述的方法的所有步骤的指令。
全文摘要
一种由事务程序用来管理对第一线程的事务数据的共享内存位置的内存访问的计算机实现的方法,所述共享内存位置可由第一线程和第二线程访问。执行用于完成第一线程的事务的一串指令,该事务开始于所述一串指令中的一个指令。确定所述一个指令是否是与第一线程的事务关联的指令的有效原子指令组(AIG)的一部分。如果所述一个指令是有效AIG的一部分,则定位一起提供AIG的处于有效模式的条目的高速缓存结构和事务表。响应于确定所述一个指令不是有效AIG的一部分,在普通执行模式下执行下一指令。
文档编号G06F9/46GK102483704SQ201080038491
公开日2012年5月30日 申请日期2010年8月24日 优先权日2009年8月31日
发明者小T·赫勒 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1