管理对共享存储器单元的存储器访问的方法和计算系统的制作方法

文档序号:6462295阅读:111来源:国知局
专利名称:管理对共享存储器单元的存储器访问的方法和计算系统的制作方法
技术领域
本发明涉及计算机系统,更具体地,涉及具有事务存储器优化支持的 计算系统。
背景技术
现在的多处理器和多线程计算系统能j吏得单个软件应用的性能扩大为 单线程应用的可用性能的许多倍。现在的软件和硬件系统提供了多个执行
线程的并^亍处理。软件应用可以使用现有的线程库,例如POSIX pthread 线程库,以控制多个并行执行线程的创建。多个线程的使用能很好地用于 涉及容易划分的任务和数据的应用。可使用过程粒度锁(course grain lock) 来控制对为数不多的共享数据结构的访问,以防止在多个线程的数据更新 之间造成的不常发生的冲突。
许多软件应用包含必须在多个线程之间共享的数据结构,并具有对共 享数据结构的频繁并发检查以及更新。这些应用需要额外的修改,以在使 用大量线程时获得较好的伸缩。使用访问共享数据结构的多个执行线程的 应用目前需要使用专用的数据锁定例程,以产生不受死锁或损坏数据影响 的可靠结果。大多数这种类型的现有多线程应用使用细粒度(fine grained ) 软件锁来实现良好性能和正确运行。编写使用细粒度软件锁的高性能多线 程程序非常困难,而且需要专家级的编程技能。在软件业中对这些技能的
匮乏极大地限制了需要使用共享数据结构的多线程应用的生产,因此限制 了含有多种形式事务处理的用于某些应用类的多线程和多处理器计算系统 的效用。
已经提出并建立各种"事务存储器,,系统,以提供更简单的编程模型, 用于构建需要控制对共享数据结构的访问的多线程应用。这些系统允许软件运行在一个执行线程上,从而可以乐观地假设可以在不与其他执行线程 的访问和更新沖突的情况下更新共享数据结构。对存储器的预测
(speculative)更新保持"未决",直到事务存储器系统确定不存在与其 他线程的存储访问的冲突。在检测到多个线程的存储访问之间的沖突时, 事务存储器系统必须能够放弃未决的预测更新。现有的事务存储器系统既 包括完全依靠新软件构造的系统,也包括为了获得合理性能而依靠硬件和 软件配合的系统。在为支持所需的事务存储器行为而执行的指令数量方面, 一些现有的系统具有很大的开销。其他现有的系统具有的限制涉及在高速 緩存中保存对存储器的"未决"更新的复杂数据高速緩存结构。基于高速 緩存的系统使用许多附加的高速緩存一致性状态,从而使得用于这些系统 的"^殳计和仿真工作大量增加。
近来,已经提出如第US2007/0028056号的微软美国专利申请公开所述 的事务存储器系统,其使用与事务所访问的存储器单元关联的软件"加入 记录,,。微软系统在"加入记录"中还使用"版本值,,。第US2007/0028056 号公开的图3包括"对存储器单元的加入记录定位,,的操作。图3的正文 描述给出在引用的存储器地址处作为软件对象一部分的加入记录的实例。 从第US2007/0028056号公开的第24段可以看出,微^_明人Timothy L.Harris指出使用"软件事务存储器接口"来创建加入记录。微软的第 US2007/0028056号公开使用与每一加入记录相关的版本号,并且需要处理 版本号超过加入记录所支持的最大数的情况。事后,在了解了我们发明的 细节之后,会发现在事务存储器系统中近来t艮的这些特征不再是必需的, 并且可以对其进行改进。
初期(对于现在而言4艮早以前),在2005年4月8日,由威斯康星
(Wisconsin )大学事务存储器工作室的David A.Wood概括的快节奏计算 系统开发的M中指出,(如在801存储架构和编程中描述的)是IBM 的Chang和Mergen提出了使用与虛拟存储器的每一个段关联的锁定位。 他们的系统提供了检测多个线程对存储单元的并发访问的能力,但是也限 制了在事务锁定机制激活时可以运行在任意一个虛拟存储器段上的并发线程的总数。Chang和Mergen需要用于执行并发线程的较大虛拟存储器页 表不仅使得那些执行事务的执行线程,而且还使得使用虚拟存储器的所有 执行线程都出现性能损失,所以Chang和Mergen的提议也变成了现有技 术中的趣事,正如Wood所说"似乎没有人注意他们学到了什么"。本发 明使用一种与系统的虚拟存储器页表截然不同的"事务表"。
Wood所不知道的是,在Chang和Mergen的IBM约克镇研究室中, 已经正在进行与事务存储器系统相关的实验室开发,最终的作品是如题为
"Architecture Support of Best-Effort Atomic Transactions for Multiprocessor Systems"的于2005年6月20日提交的Xiaowei Shen的序 列号为11/156913的美国专利申请所述的最新事务存储器系统。
Shen描述了一种事务存储器系统,其重点是使用"作为由原子事务访 问的数据的緩冲区的高速緩存"。在系统检测到"緩冲区溢出"时,Xiaofd Shen强行设置为事务失败,但是没有提出如何解决从高速緩存驱逐预测数 据的情况。如果太多的事务加载或存储将同一高速緩存作为目标,则会导 致緩冲区溢出。溢出高速緩存和失败的事务的百分比与事务中包含的加载 和存储数成比例。较长事务更容易失败。
还提出了使用高速緩存来实施冲突检测方案以及捕获溢出高速緩存的 预测数据的其他系统。我们发现,其实并不期望主^靠数据的高速緩存 状态来进行冲突检测所需的专用高速緩存状态导致所不希望的复杂度增 加,也使得向现有多处理器高速緩存一致性设计增加所需的检测和隔离机 制变得困难。尽管如此,除了 Xiaowei Shen的开发之外,同样存在对充分 利用已试过的高速緩存的许多尝试,包括Moore等,在他们的论文"LogTM: Log-based Transactional Memory ,, 中描述了 <吏用"前像日志,,
(before-image log) 。 Moore使用高速緩存一致性状态来实现冲突检测方 案。另一种此类系统,Aimnian等描述了使用一个"未分类线性数组数据 结构"来捕获溢出数据高速緩存的预测数据的事务存储器系统。他们使用 用于每一高速緩存组的附加位,"O"位来指示该组是否"溢出,,,使用 用于每一高速緩存表项的另一位,"T"位来指示该表项保存了预测数据。线性数组数据结构确实提供了支持较长事务的能力,但是没有提供本发明
的快速检测能力。需要在Ananian的线性数组中搜索以"溢出"的组为目 标的任意高速緩存访问。对于产生许多溢出的事务而言,这是较长的过程。 Rajwar、Herlihy和Lai在他们的论文"Virtualizing Transactional Memory" 中采用了与Ananian类似的方式。Rajwar也4吏用数据高速緩存作为用于 跟踪与事务相关的预测状态的主要机制。将强行排出高速緩存的预测数据 转移到虚拟存储器中的XADT溢出区。检测与是XADT —部分的地址的 可能冲突需要对XADT进行较慢的线性搜索。Rajwar描述了使用过滤器 来消除这些搜索中的某些搜索,但还是存在仍旧进行多个这样搜索的情况。 除了上文中概括的本领域中的发展之外,还提出了用于支持事务存储 器的许多软件接口和指令集修改。论文"Architectural Semantics for Practical Transactional Memory" (2006年,斯坦福大学计算机系统实验 室的McDonald等,在我们的IDS中记载的此论文在此一并提交,并在此 引入作为参考)比较了某些提议和提供了许多其他参考,并在此引入作为 参考。

发明内容
通过一种计算系统来克服现有技术的缺点,以及提供一些附加优点,
所述计算系统使用附加到真实系统存储器的每一增量的"事务专用" (PTRAN )标签以及用于提供事务存储器系统的改进实现的预测加栽和存 储日志的组合。本发明使用的日志具有实现为"事务专用"(PTRAN)标 签的附加标记位,并且与真实系统存储器的每一个增量关联。提供硬件, 以快速检测在多个执行线程上运行的事务的存储访问之间的冲突。存储器
统相比时具有更少开销的更快事务存储器系统。在使用冲突检测的附加高 速緩存一致性状态方面,特别是对于具有大量处理器和关联的互连的系统 来说,本发明的复杂度低于现有尝试。
本发明使用计算系统的主存储器阵列来保持预测数据,并且可支持更长的事务。本发明可以在使用数据高速緩存的情况下获益,但是本发明并 不需要使用数据高速緩存。本发明提供了无需通常情况下的漫长搜索过程 即可检查新存储器访问的地址的能力。同样,由于冲突检测和存储器中标 签的使用消除了与跟踪事务预测状态关联的某些软件开销,所以较之仅使 用软件的事务存储器系统是一种改进。本发明还提供了以非常细致的级别 (降到一个字节)检测存储冲突的能力,与^目比,现有软件系统跟踪整 个软件对象(可能为几百或几千个字节)的更新。现有软件系统在尝试跟 踪对软件对象的单个组件的更新时,或者频繁地给出过多的潜在数据冲突 指示,或者带来较大的软件路径长度损失。
为了支持事务存储器,提出了许多软件接口和指令集修改。本发明可 以与其中的任何一种结合使用,以便在不大量增加硬件或软件复杂度的情
况下提供高性能的事务存储器操作。描述了用于PowerPC构架的优选实施 例,但是本领域普通技术人员可以将同样方法应用于任何其他构架,例如 具有P3、 P4、 P5处理器的IBM zSeries、 IBM pSeries,并且即使是具有 65位存储操作的IBM System 38和它的AS/400也可以得到本发明的支持, 此外还包括其他计算才几系统,例如Sun Mcrosystem的SPARC、 Intel的 IA32等。本领域普通技术人员可以扩展本发明,从而可以与为其他专用版 本的事务存储器实现而创建的其他应用编程接口 (API) —起使用。
本发明使用与所有存储器单元(而不只是那些当前作为激活事务的一 部分的存储器单元)关联的一个或多个硬件位。本发明使用一个或多个添 加的硬件位来提供比使用第US2007/0028056号的微软公开所获得的事务 执行更快的事务执行。本发明使用改进的事务表作为日志来优化存储器的 使用,并提供了比其他系统(如微软方案)使用更少存储器的系统,但是 本发明仍可执行为微软方案所开发的应用。本发明为每一个存储增量提供 一个或多个PTRAN位。在本发明中不需要"定位"PTRAN位的间接方 法。由于PTRAN位是可直接寻址的要标记的存储器单元的一部分,所以 本发明可提供更快的潜在冲突表示。本发明不需要微软型接口,并且可通 过使用软件和固件更新和重设PTRAN位来实现其优点。本发明不需要应用软件知晓一个或多个PTRAN位的状态,尽管需要的情况下可提供直接 接口。本发明还被优化,以用于较短的提交处理时间。本发明不需要使用 用于每一个存储单元的版本号。
在上文中我们提到在现有技术中变成趣事的Chang和Mergen的提 议,正如Wood所说"似乎没有人注意他们学到了什么"。本发明的优点 在于,使用了一种与系统的虛拟存储器页表截然不同的"事务表"。从而 使得本发明能够处理大量事务,并提供降到一个字节的冲突检测。本发明 没有限制可同时访问同一虛拟存储器段中的存储器单元的并发线程数。本 发明对物理存储器地址(或真实地址)执行沖突检测,并且仅以此沖突检 测粒度限制同时访问。此粒度对于本发明的各种实现可以不同,但是通常 在字节的量级。如果Chang和Mergen的系统尝试^_用大量并发线程,则 该系统将不能提供类似的效果,除非使用极大的虛拟页表格式,因此出现 了性能损失。本发明并没有出现这种性能损失。
这里还描述和主张了使用上文概括的方法实现事务的系统和计算枳^呈 序产品。通常,计算机程序产品作为计算枳4呈序介质来发布,所述计算机 程序介质是经由CD-Rom、计算机盘驱动器、到另一系统的连接来传送指 令的程序的有形实现,或向对这种系统提供支持的计算系统传送程序信号 的信号的有形实现,所有这些都称为计算机程序介质。计算机程序介质可 作为在运行期间在计算系统存储器中安装的单独软件介质来提供,或作为 在计算系统存储器自身中实现的固件来安装。
通过本发明的技术实现了其他特征和优点。这里详细描述了本发明的 各个其他实施例和方面,它们被视为要求保护的发明的一部分。为了更好 的理解具有优点和特征的本发明,请参照说明书和附图。
技术效果
作为所概括的本发明的结果,我们在技术上实现了与现有系统相比提 供了更快事务存储器系统以及更低开销的解决方案。本发明也改进了依赖 对高速緩存一致性协议的改变的现有基于硬件的事务存储器系统。本发明使得硬件系统能够处理足够长以使得平均大小的高速緩存溢出的事务,并 且不涉及现有方案的虚拟存储器管理开销。本发明具有更低级别的硬件复 杂度,并且更容易实现以及通过模拟验证。本发明还具有以比紧密连接于 数据高速緩存的现有技术系统的高速緩存线粒度更精细的粒度检测冲突的 能力。本发明还允许嵌套事务的快速执行。


在说明书的结论部分,特别指出作为本发明的主题,并且在权利要求 书部分明确主张。根据结合附图的以下详细描述,本发明的上述和其他目
标、特征和优点变得清楚,其中
图1示出使用物理存储器的具有优化事务存储器的我们的计算系统;
图2示出我们的真实系统存储器事务表;
图3示出我们的加载处理的流程图4示出我们的存储处理的流程图5示出我们的提交处理的流程图6示出我们的返转(rollback)处理的流程图7示出在嵌套原子指令组(AIG)中使用的新专用指令和原子指令 组(AIG)指令;以及
图8是示出在使用本发明的计算系统中解码和执行指令的流程的概括 流程图。
具体实施例方式
根据参照附图的实例,详细的说明书描述了本发明的优选实施例及其 优点和特点。
现在,转到更详细的附图,可以看出,图1中有一个示出我们发明的 实施例的计算系统,其具有经由互连元件(110)连接至物理存储器阵列 (120)的一个或多个微处理器(100、 101、 102)。该物理存储器阵列存 储事务数据(121 )以及与真实系统存储器的每一个增量关联的"事务专用"(PTRAN )标签(122 )。互连元件(110 )可作为共享总线或交叉开关来 实现。本发明也应用于使用将物理存储器与可在一个或多个芯片中实现的 多处理器系统互连的任何其他方案的系统。存储器可分成更小的部分,并 通过专用连接分配到每一个CPU芯片,如使用Power4微处理器的IBM 系统或基于AMD Opteron的服务器那样。微处理器和存储控制器可共同 位于一个硅芯片上,或者它们可M在多个芯片上。
计算系统的物理存储器被分为n个增量。为n个增量中的每一个提供 与真实系统存储器的每一个增量关联的一个或多个"事务专用"位
(PTRAN)。本发明允许选择任意存储器增量大小,并且最佳选择将取决 于目标系统中的工作负荷特性、硬件成本和数据緩存结构。在所示实施例 中使用了 16字节的增量。 一个或多个PTRAN位用于指示存储器中的数据 表项是否为系统中当前激活的未提交事务的预测存储状态的一部分。
由图7的嵌套AIG编码序列所示的专用新指令(BEGIN_AIG、 ENG—AIG)用于标记一组指令的开始和结束。在专用新指令之间执行的多 个指令称为"原子指令组"(AIG),如图7中的AIG指令所示(指令 A0、指令A1、指令A2)。在处理器执行作为原子指令組一部分的指令时, 使用附加的存储访问规则。在存储器中以原子方式更新由AIG组的指令修 改的所有存储单元。对存储单元的更新将保持"未决",直到处理器和/ 或软件应用指示它们应被"提交"时为止。或者立即将所有更新提交至"正 常"存储器,或者将它们丟弃。在硬件和/或软件检测到在多处理器系统中 并发执行的多个AIG的存储访问之间有冲突时,丢弃这些结果。本发明提 供了由硬件快速检测在多个AIG的存储访问之间的潜在沖突的方式。尽管 本发明使用专用新指令来标记事务的边界,但是任何其他方式也可以用来 标识将要以原子方式更新的一组存储器单元。本发明与可用于实现事务存 储器系统的任意多个软件接口兼容。本发明为尝试提供多个存储单元的原 子更新的任意系统提供同样快速的沖突检测。本发明还应用于以任何其他 方式(包括产生附加到其他指令的提示的编译器、由内部微码或毫码
(millicode)产生的内部微处理器命令)标记指令组边界的系统。PTRAN标签是为了由原子指令组的一部分的指令所产生的所有存储 器访问而设置的与存储器中的增量关联的一个或多个位。处理器在尝试设 置位之前对其进行检查;从而能够快速检测与在其他线程上并发执行的其 他AIG之间的潜在冲突。对位的设置可通过(如IBM z/构架操作原理所 述的)IBMz/构架的TS "测试和设置"操作或能在多线程或多处理器系统 中进行原子更新的任何其他等效操作来实现。
现在转到图2,可以看出,创建事务表(230, 231)作为在这里示出 为物理存储器的真实系统存储器(220)的一部分。也可以在逻辑或虛拟存 储器中创建事务表。可使用能将逻辑系统存储器映射到物理系统存储器的 任意系统,并且存在现有技术中已知可用的多个实例,例如在IBM zSeries、 IBM pSeries、 Sun微系统的SPARC、 Intel的IA32等中的那些实例。在 作为原子指令组的一部分的指令导致对存储器单元进行检查或更新时,将 形成事务表的表项。线程ID(203、 213)与每一个事务表关联。下一表项 寄存器(202、 212)用作事务表的索引,并指示接下来应写入哪一个表项。 表起始地址(201、 211)指示用于它的线程(203、 213)的事务表的第一 表项的地址。事务表用于保存除了关于与已经被检查或更新的存储器单元 关联的一个或多个PTRAN标签位的简单信息之外的附加信息。这种附加 信息涉及与原子指令组关联的预测状态。在我们这里描述的所示IBM zSeries或pSeries CPU (100、 101、 102)的实施例中,我们更喜欢使用一 个PTRAN位。在这种情况下,事务表包含关于预测状态的所有附加信息, 因此PTRAN位仅指示在AIG中包含物理地址。由此,对于事务表A( 230 ) 示出为地址(240)、事^ft息标识符(241)和旧或新数据(242)。本发 明的其他实施例可使用附加PTRAN位,所述位能够由硬件或软件用于加 速处理在处理原子指令组中涉及的某些事件或任何其他事务存储器系统的 预测状态。在存储器中仅使用 一个位并且将该位与事务表中事务状态的更 完整描述关联的组合提供了一种需要很小硬件开销的事务存储器系统,而 不会出现如现有技术的软件事务存储器系统中的性能损失。
再回到图2,可以看出,例如在事务表A(230)中的表项包括在AIG中已检查或更新的地址(240)、事务信息字段(241)和数据字段(242 )。 作为AIG的一部分的存储指令使得系统将"旧"数据值从原始存储单元复 制到该地址的事务表表项,并将新预测数据放在主存储单元中。
如果需要,本发明也可在事务表中保存新值。优选实施例将"旧"数 据值放在事务表中。这允许针对大部分事务成功的情况优化系统。在通过 改变指向事务表的指针或通过清除事务表的内容而将事务永久提交至存储 器时,也就是说,在不再需要旧数据时可将其快速丢弃。事务表表项的事 ^f言息字段(241)包括作出关于需要产生事务失败的详细判断所需的任何 事务信息。它还提供附加信息,以能够有效支持嵌套事务、虛拟化事务或 事务存储器架构的其他扩展。在优选实施例中,事务信息字段包括关联地 址(240)的存储访问是加载类型访问还是存储类型访问的指示。事务信息 字段(240)还指示在系统中该地址是否在多个AIG之间共享。
图3示出使用PTRAN位和事务表跟踪预测状态的操作的加载处理流 程图。在处理器尝试加载类型访问时,做出初始判断(310),以确定加载 访问地址是否为AIG的一部分,以及是否适用AIG访问的专用存储访问 规则。如果为否,则适用正常处理,并按照正常加载处理(320)操作。在 判断处理步骤(310)中,可以以许多不同方式确定加载类型访问是否为 AIG的一部分。可以在处理器管线中或在加载/存储单元中设置一模式位, 以指示操作的专用AIG模式被激活。该模式可以是处理器的物理状态或虛 拟处理器的逻辑状态的一部分。如果操作的专用模式没有激活,则将加载 看作是正常加载(320 )。
可提供这种"AIG激活模式"的"覆写"(override)。覆写可以与 含有目标地址的逻辑存储器段或逻辑存储器页关联。覆写强行使得系统将 存储请求看作正常请求,尽管实际上该请求是AIG的一部分。如果覆写激 活,则判断(310)的结果将导致发生正常处理(320)。假i殳AIG激活而 覆写未激活,则在检查步骤(330)检查关联PTRAN位。在检查时,在 AIG中的加载指令检测PTRAN位的状态。在已经设置PTRAN位时,原 因可能是同一处理器上或在另一处理器上执行的另一线程的操作。如果在检查步骤330发现PTRAN位没有被设置(340 ),则在设置PTRAN步骤 (340),处理器设置PTRAN位,并通过向事务表添加的方式来在激活 AIG的事务表(230)中形成访问记录,然后整个的加载过程继续(360)。 如果PTRAN位已经设置,则将会产生这种潜在冲突的地址与在处理器事 务表中已经输入的地址相比较。如果在检查步骤(330)由同一AIG中更 早的另 一加载测试时设置了 PTRAN位,则它已经是如所测试和确定(350 ) 的AIG的一部分,然后整个的加载可继续(360 )。每一事务表(230、 231) 包含用于特定AIG的地址。因此,如果地址已经不是如所测试和确定(350 ) 的AIG的一部分,则在处理器的事务表中不会找到用于加载的地址,然后 处理器在用于AIG共享的确定步骤(370 )中检查该地址是否能在AIG中 共享。如果该地址当前不能在多个AIG之间共享,则在确定在AIG中是 否能共享的步骤(370)中,处理器向系统中的其他处理器发信号,以请求 对该地址的"共享AIG访问"。如果在系统中没有其他AIG预测性地写 入存储单元,则可许可共享访问。如果没有许可共享访问,则AIG失败 (380),否则(390),将加载地址添加到事务表(230),并更新事^Ht 息字段(241)以指示该地址是在系统中多个AIG之间共享的加载访问。
图4的存储处理流程图示出用于处理作为AIG—部分的存储的操作。 当处理器尝试存储类型访问时,做出初始存储判断(400),以确定该访问 是否为AIG的一部分,以及AIG访问的专用存储访问规则是否适用。以 类似于对加载访问的先前描述的方式检查处理器的模式。如果AIG访问的 专用访问规则适用的专用操作模式没有激活,则将该存储看作正常存储 (440 )。假设AIG激活,则在存储处理检查步骤(410 )检查关联的PTRAN 位。如果PTRAN位没有设置,则在存储事务步骤(450 )设置PTRAN位, 并将新表项添加到事务表(230 )。将"旧数据"移至该事务表表项(242 ), 将地址写入新表项(240),并更新事务信息字段(241)。标记事务信息 字段(241),以指示与该表项关联的访问是存储类型访问。在完成PTRAN 位的设置之后,将新存储数据写入存储器。如果PTRAN位的检查(410 ) 指示该位已经设置,则基于当前存储地址是否为处理器中激活的AIG的一部分来做出判断(420)。检查处理器的事务表(230),如果确定地址存 在于事务表中,则检查该表项的事^H言息(241),并做出关于共享访问表 项(460)的判断。如果事务信息指示该表项是在多个AIG之间共享的加 载类型访问表项,则事务失败(430),否则更新关g项的事^ft息字段, 以指示存储类型访问并处理存储(470)。现在转到图5的提交处理流程图,可以看出,本发明包括,在根据测 试步骤(500)的初始判断已经处理了 AIG中的最终指令并且准备将整个 组永久"提交"至存储器时所完成的一组操作。如果测试步骤(500)的判 断为否,则处理以AIG模式继续(550)。在根据图3和图4的流程图处 理AIG的加栽和存储没有导致事务失败时,将AIG提交至存储器。在AIG 成功,然后测试(500)确定在AIG中的最终指令已经,皮处理的情况下, 准备将整个组永久"提交"至存储器。然后,检查(510、 520)事务表, 并且在事务表提交步骤(530)确定过程中读取要提交AIG的每一表项以 及在存储器中重设其关联的PTRAN位。专用硬件引擎可用于完成这种提交操作的执行。处理器高速緩存、多 处理器一致性操作以及本发明的组合可用于提供一种软件,其具有这样的 假象针对单个AIG的所有存储器更新同时发生,尽管主存储器的存储阵 列没有同时更新。在提交处理期间,PTRAN位的重i殳继续,直到已经确 定到达事务表中的最终有效表项时为止(530)。此刻,认为AIG被提交, 因此完成了引擎的执行(540)。某些条件妨碍AIG的完成。在执行AIG时的加载处理期间(380 )或 在执行AIG时的存储处理期间(430)检测这些条件。还存在可能需要放 弃AIG处理的许多其他可能的处理器^。这些条件包括在系统中检测的 错误条件,以及可能需要大量附加硬件支持以使得处理器能够对其正确处 理的其他条件。许多现有技术的事务存储器构架提供了事务放弃和随后重 试。现有技术的软件结构可以与本发明一起4吏用,以消除提供硬件来解决 所有可能的特殊情况的需求。筒单的实例是在处理AIG过程中定时器中断 的情况。这种中断可使得处理器花费大量时间运行不是已部分完成的AIG的一部分的代码。此时可能不期望处理器保持AIG激活。系统可对于在发 生定时器中断时当前执行的任何AIG强制事务失败。对于在处理器中发生 的任何其他特殊情况事件可使用类似的方式。根据在图6中所示的用于"返转,,处理的返转处理流程图的过程来解 决事务失败或强行重试。现在转到图6,可以看出,没有事务失败^H 600 ) 则允许处理器以AIG激活模式继续(650)。本发明的优选实施例对于检 测事务失败和产生事务返转使用"积极"(eager)策略。此外,本发明也 可以用于当等待事务结束时再进行返转所需操作的系统中。作为原子指令 组的一部分执行的存储器更新或者在同时提交给正常的主存储(图5), 或者随"返转"操作丢弃(620-640)。在发现事务失败条件(600 )失败时,需要几个附加步骤(610、 620 )。 返转事务表的处理表项步骤提供了检查用于AIG的事务表(230),以及 将任何"旧"数据(242)写回在该表项中指示的主存储器地址(240)。 重设用于关联地址的PTRAN位。返转处理(620)继续,直到处理了表中 的最终有效表项为止(630)。在处理了表中的最终有效表项之后,返转完 成(640)。此时由处理器采用的操作根据用于事务存储器的各种软件构架 而有所不同。可以使用在背景技术中描述的任意事务存储器构架。在某些 情况下,从开始就重试AIG。在其他情况下,将调用专用软件句柄来处理 事务失败。本发明可与任意的这些不同构架一起4吏用。本发明支持"嵌套"事务的执行。第二 AIG可包括在第一AIG的范 围中,如图7所示。每一 BEGIN_AIG专用指令(图7)语句使得系统创 建事务表(230),以及将该表与AIG关联。关于存储地址是否属于AIG 的判断(350 )可包括内部AIG (A)或内部和外部AIG (A和B)的组合。 END—AIG专用指4^吾句(图7)是事务序列的结束,但是如图所示,专用 事务(事务B)的序列可以嵌套在另 一事务(事务A)中。多个事务表(230) 的使用可以支持用于事务存储器的嵌套构架。"旧数据"的多个版本可以 以任意嵌套深度存储在任意多个事务表(230 )中。依赖数据高速緩存来保 存预测状态的现有技术事务存储器系统,在不向高速緩存目录添加附加状态信息和不对高速緩存一致性协议增加额外复杂度的情况下,则不能够提 供用于嵌套事务的类似支持。在现有技术系统上的嵌套支持将对那些设计 带来较大的硬件复杂度负担。本发明也可以被扩展为包括一种含有内部AIG (指令B0、指令B1)和外部AIG (指令A0、指令A1、指令A2)的 表项的组合事务表。这种组合事务表可用于代替单独的事务表,或除了单 独的事务表以外,还可以使用这种组合事务表。存在有可添加到本发明以加速事务表控制的处理和PTRAN位(多个) 的设置与重设的许多附加硬件特征。由于PTRAN位是主存储数据的一部 分,所以它可以緩存在系统的正常数据高速緩存中。事务表也是主存储的 一部分并且也可以被緩存。可向数据高速緩存添加附加控制信息,以指示 专用地址是否能够用于"共享AIG访问",并因此消除在某些情况下搜索 事务表的需求。上述的本发明的功能可以用软件、固件、硬件以及软件和固件的某种 组合来实现。作为 一个实例,本发明的一个或多个方面可包括在具有例如计算机可 用介质的制品(例如, 一个或多个计算积4呈序产品)中。在介质中可实现 例如用于提供和方便本发明功能的计算机可读程序代码装置。这里描述的 计算系统能检测信号,以及恢复在其中实现的计算机程序。计算机程序是 在例如硬盘驱动器或计算机存储器的物理介质上实现,还是在CD上实现, 又或者是在数据信号中实现,并没有区别。基础程序可以由计算系统用于 执行为计算机可读存储器所描述的步骤,从而执行编码功能,而与编码程 序的原始格式以及该格式是盘还是信号无关。所述制品可属于计算机系统的一部分或单独购买。此外,可提供由机器可读的、用于有形地实施由机器可执行的至少一 个指令程序的至少一个程序存^i殳备,来执行本发明的功能。图8示出在使用本发明的计算系统中对指令解码和执行的流程。本发 明优选实施例使用BEGIN_AIG指令表示AIG的开始,使用END—AIG指 令表示AIG的结束。也可以使用用于标记一组指令的开始和结束的任何其他适合的方法。可由程序员用高级语言显式地将指令或标记插入到代码中, 或由编译器或转换器作为高级锁定功能的实现来添加指令或标记。可通过 库函数调用来添加指令和标记,或通过在运行时环境下的专用事件来包括 指令和标记。可通过固件、硬件或两者组合响应于对指令的特定序列的解 码或接收用于^新执行模式的专用命令,来产生指令和标记。优选实施例在指令的解码(800)之后识别AIG的开始。如果确定 BEGIN—AIG指令已被解码(805 ),则处理器ii^新执行模式,AIG MODE(815),否则照常执行指令(810),并且继续处理下一指令(800)。在进入AIG MODE之前,与在IBM ZSeries构架中处理传统程序调 用相同,保存处理器的构架状态。任何类似的状态保存机制可用于任何其 他处理器构架上。如果AIG失败,则处理器可直接返回此保存的状态,或 可以在调用了一系列其他错误处理例程之后返回此状态。在AIG MODE 时,指令的解码继续(820)。如果加载或存储被解码(825),则需要这 些加载和存储的专用处理(840)。处理AIG中的加载所需的步骤在图3 中描述,处理AIG中的存储所需的步骤在图4中描述。在处理了 AIG中 的加载和存储之后,确定(850)是否存在如图3和图4的描述中所述的 AIG失败。如果存在失败,则调用专用句柄(860)。用于事务失败的专 用句柄的操作可根据使用本发明的系统构架而有所不同。在现有技术中已 经描述了用于处理事务失败的许多方法,其中的任一个都可以用于此目的。 可用的方法包括从i殳置的一组尝试的开始重试事务、等待j吏得失败改变 的条件、调用专用软件例程来解决线程之间的沖突等。这些可用的失败句 柄可需要产生失败的AIG返转(860)。如果没有检测到失败,则确定加 载或存储是否为AIG的最终指令(855 )。如果该指令是AIG中的最终指 令,则使用图5中所述的过程提交AIG (865)。然后,处理器退出AIG MODE,继续处理在该AIG之后的下一后续指令(800)。除了在AIG中的加载和存储之外的指令解码不一定需要专用处理(830)。如果该指令不是加载或存储类型指令,则确定该指令是否是另一 BEGIN_AIG (830)。嵌套的AIG指令需要专用处理(835)。现有技术包含用于处理嵌套事务的许多不同方式。本发明可用于支持其中的任一方式。用于优选实施例的嵌套AIG句柄将"内部"AIG指令添加到"外部" AIG,以创建一个更大的AIG。本发明的其他实施例可提供用于处理作为 内部嵌套事务一部分的加载和存储的不同规则,以及用于处理内部嵌套事 务的提交和失败的专用规则。如果确定该指令不是BEGIN—AIG,则执行 该指令(845 ),并接下来确定(855 )该指令是否为AIG的最终指令。优 选实施例使用END—AIG指令的解码来指示已经到达AIG的最终指令。如 果已经到达了 AIG的最终指令,则将AIG提交至存储器,并且处理器退 出AIG MODE的运行(865 )。这里描述的流程图仅是实例。在不脱离本发明的精神的情况下,可以 对其中描述的这些示图或步骤(或操作)进行多种修改。例如,可以以不 同顺序执行这些步骤,或者可以添加、删除或修改这些步骤。所有的这些 修改都看作是由本发明权利要求所限定的一部分。尽管已经描述了本发明的优选实施例,但是可以理解的是,本领域普 通技术人员,包括现在的和将来的,都可以进行各种改进和加强,这些均 落入随后的权利要求的范围内。这些权利要求应理解为,主张对首先描述 的本发明的适当保护。
权利要求
1.一种由计算系统上的事务程序使用的方法,该方法针对第一线程的事务数据管理对共享存储器单元的存储器访问,所述共享存储器单元能够由所述第一线程和第二线程访问,该方法包括以下步骤从用于完成所述第一线程的事务的一串指令中的一个指令开始,执行所述一串指令;和确定所述一个指令是否为与所述第一线程的所述事务关联的激活原子指令组AIG指令的一部分,如果所述一个指令是激活AIG的一部分,则在所述AIG的激活模式下定位提供多个表项的事务表,其中由所述激活AIG的多个指令检查或修改的所有存储单元保持未决,直到所述计算系统指示所述存储单元应被提交时为止,和如果所述一个指令不是激活AIG的一部分,则在正常执行模式下执行下一个指令。
2. 根据权利要求l的方法,其中在所述AIG的所述激活模式下执行时,作为原子指令组之一的下一个 指令确定所述下一个指令是用于加载的指令、用于存储的指令,还是用于 原子指令组的开始或结束的专用指令。
3. 根据权利要求2的方法,其中位是主数据存储的一部分,并且所 述位能够被緩存在所述系统的正常数据高速緩存中。
4. 根据权利要求1的方法,其中在处理指令时,所述计算系统检查 与用于加载或存储的共享存储器单元的指定地址关联的位,以确定所述地 址是否具有激活事务表,以及确定此类地址是否与在所述计算系统的另一 线程上并发执行的另一 AIG具有潜在冲突。
5. 根据权利要求1的方法,其中所述第一和第二线程的事务处理所 使用的共享存储器的n个增量中的每一个具有与共享存储器增量关联的"事务专用PTRAN"标签,并且在检查或更新所述共享存储器增量时将检查所述标签以确定是否存在与所述共享存储器增量关联的激活事务。
6. 根据权利要求5的方法,其中在确定所述共享存储器增量的指定 地址不具有激活事务表时,将更新所述PTRAN标签,以表明存储器存储 增量是与所述第一线程的所述事务关联的激活原子指令组指令的一部分, 并且其中如果确定所述指定地址具有激活事务表,则确定所述共享存储器 单元的所述地址是否已经为由所述AIG检查或修改的指令所使用的地址 的一部分。
7. 根据权利要求1的方法,其中在处理指令时,所述计算系统检查 与用于加载或存储的共享存储器单元的指定地址关联的位,以确定所述地 址是否具有激活的"事务专用PTRAN"标签,所述PTRAN标签与正被 检查或更新的共享存储器单元的地址关联,并用于指示存储器中的数据表 项是否为所述系统中当前激活的未提交事务的预测存储器状态的一部分。
8. 根据权利要求1的方法,其中在处理指令时,所述计算系统检查 "事务专用PTRAN"标签,该PTRAN标签是针对由原子指令组的一部分的指令所产生的所有存储器访问而设置的与存储器中的增量关联的一个 或多个位。
9. 根据权利要求1的方法,其中在处理指令时,所述计算系统在尝 试设置"事务专用PTRAN"标签之前对其进行检查。
10. 根据权利要求l的方法,其中将所述计算系统的物理存储器分为 n个增量,并且为所述n个增量中的每一个提供与真实系统存储器的每一 个增量关联的一个或多个"事务专用PTRAN"位。
11. 根据权利要求l的方法,还包括以下步骤标识将要由与特定激 活事务关联的原子指令组AIG指令以原子方式更新的一组存储器单元,并 且其中将要由所述激活原子指令组的指令修改的所有存储单元保持未决, 直到所述计算系统指示与所述事务的所述第 一线程相关的所述存储单元应 3皮提交时为止。
12. 根据权利要求l的方法,还包括以下步骤标识将要由与所述特 定激活事务关联的原子指令组AIG指令以原子方式更新的一组存储器单元,以及标记具有专用指令的所述特定激活事务的边界,以向所述计算系 统标识在所述边界中的指令是用于所述事务的所述激活原子指令组指令的 一部分,并且其中将要由所述激活原子指令组指令修改的所有存储单元保 持未决,直到所述计算系统指示与所述事务的所述第 一线程相关的所述存 储单元应被提交时为止。
13. 根据权利要求1的方法,其中将用于被处理的事务的数据存储到 事务表中,在作为原子指令组的一部分的指令导致对存储器单元进行检查 或更新时,将在所述事务表中形成表项。
14. 根据权利要求l的方法,其中将用于被处理的事务的数据存储到 事务表中,所述事务表不同于所述系统的虚拟存储器页表,并且在作为原 子指令组的一部分的指令导致对存储器单元进4于检查或更新时,将在所述事务表中形成表项。
15. 根据权利要求14的方法,其中专用指令标记事务的边界,以标 识被以原子方式更新的 一组存储器单元。
16. 根据权利要求13的方法,其中线程标识值与所述事务表关联; 下一表项寄存器用作对所述事务表的索引并指示接下来应写入哪一个表 项;并且a始值指示用于与所述事务表关联的线程的所述事务表的第一 表项的地址。
17. 根据权利要求l的方法,其中在检查与表项关联的位之后,将用 于被处理的事务的数据存储到事务表中,其中在作为原子指令组的一部分 的指令导致对存储器单元进行更新时将形成所述表项,其中所述位是主存 储数据的一部分并且所述位能够緩存在所述系统的正常数据高速緩存中, 所述事务表也是主存储的一部分并且也能够被緩存。
18. 根据权利要求17的方法,其中添加至所述数据高速緩存的控制 信息指示特定地址是否已经能够在AIG之间共享。
19. 根据权利要求1的方法,其中所述事务表保存涉及与原子指令组 关联的预测状态的附加信息。
20. 根据权利要求19的方法,其中所述事务表包含所有关于所述预测状态的附加信息,并且PTRAN标签指示在原子指令组中包含物理地址。
21. 根据权利要求l的方法,其中在存储器中以原子方式更新所有由 所述原子指令组修改的存储单元。
22. —种计算机可读的计算机程序介质,其有形地实施用于执行以下 计算机处理的计算机可执行指令,所述计算机处理包括从用于完成多个 线程中的第 一线程的事务的一 串指令中的一个指令开始,执行所述一 串指令;和确定所述一个指令是否为与所述第 一线程的所述事务关联的激活原子 指令组AIG指令的一部分,如果所述一个指令是激活AIG的一部分,则在所述AIG的激活模式 下定位提供多个表项的事务表,其中由所述激活AIG的激活原子指令检查 或修改的所有存储单元保持未决,直到所述计算系统指示所述存储单元应 i皮提交时为止,和如果所述一个指令不是激活AIG的一部分,则在正常执行模式下执行 下一个指令。
23. —种计算系统,包括多个处理器和共享存储器,在所述计算系统针对被处理的事务管理对 共享存储器单元的存储器访问时, 一个或多个所述处理器可以访问所述共 享存储器,所述共享存储器单元能够由第一线程和第二线程访问,所述计算系统的共享存储器具有标识的"事务专用"标签,其用于 标识系统存储器的每一个增量;和事务表,其用于所述被处理的事务的第 一线程的加载和存储。
24. 根据权利要求23的计算系统,其中处理事务的应用软件不需要 测试用于标识系统存储器的每一个增量的"事务专用"标签的状态。
25. —种用于事务处理中的加栽处理的方法,所述事务处理采用计算 系统中的事务存储器,所述方法包括以下步骤针对在多个线程中被处理的事务确定加载指令是否为激活指令组的一 部分,所述激活指令组包含原子指令组,所述多个线程由使用所述事务存储器的所述计算系统执行;和在确定所述加载指令是激活指令组的一部分时,设置专用事务位并在 与所述专用事务位关联的事务表中形成表项。
26. —种用于事务处理中的存储处理的方法,所述事务处理采用计算 系统中的事务存储器,所述方法包括以下步骤针对在多个线程中被处理的事务确定存储指令是否为激活指令组的一 部分,所述激活指令组包含原子指令组,所述多个线程由使用所述事务存 储器的所述计算系统执行;和在确定所述存储指令是激活指令组的一部分时,设置专用事务位并在 与所述专用事务位关联的事务表中形成表项。
27. 根据权利要求l的方法,其中在已处理了 AIG中的所有组指令, 并且已确定在处理所述AIG中的所有加载和存储期间没有事务失败时,将 提交事务。
28. 根据权利要求1的方法,其中在出现冲突的AIG,并且一个AIG 的指令尝试修改另一个AIG的共享存储器单元时,将发生返转。
全文摘要
本发明涉及一种管理对共享存储器单元的存储器访问的方法和计算系统。计算系统处理用于并行处理多个执行线程的存储器事务,通过支持所述并行处理多个执行线程而无需应用了解此情况。该计算系统的事务存储器支持在存储器中提供了事务表,以及提供了快速检测在多个事务之间的潜在冲突的方法。专用指令可标记事务的边界,以及标识适用于事务的存储器单元。可作为主数据存储的存储器单元的一部分直接寻址的“事务专用”(PTRAN)标签能够快速检测与所述计算系统的另一线程上并发执行的其他事务的潜在冲突。所述标签指示存储器中的数据表项是否为系统中当前激活的未提交事务的预测存储器状态的一部分。
文档编号G06F9/46GK101308462SQ20081009237
公开日2008年11月19日 申请日期2008年4月24日 优先权日2007年5月14日
发明者R·I·鲍姆, T·J·小赫勒 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1