事务型存储器访问的混合硬件软件实现的制作方法

文档序号:6649315阅读:175来源:国知局
专利名称:事务型存储器访问的混合硬件软件实现的制作方法
技术领域
本发明的实施方案涉及事务型存储器(transactional memory)的领域。更具体地说,本发明的实施方案涉及事务型存储器访问的混合硬件软件实现。
背景技术
事务型存储器服务允许应用、程序、模块等,更具体地说是允许应用程序接口(API)以原子式的、一致的并且隔离的方式来访问存储器。例如,事务型存储器可被用作用于管理持久性的指针丰富型数据结构(例如数据库)和目录服务的运行时引擎的一部分。
API可以被认为是由应用、程序、模块等用来与系统程序(例如操作系统或数据库管理系统(DBMS))通信的语言或消息格式。API可以通过在程序中写入函数调用来实现,所述函数调用提供了到特定子例程的链接以供执行。因此,API意味着某个程序模块或例程已经就位,或者被链接,以便执行函数调用所请求的任务。
事务型存储器使得写并行程序变得更容易,并且事务型存储器的使用允许不同的线程同时进行,从而获得极高的处理效率。然而,目前程序员不得不在使用事务型存储器时做出困难的选择。
一种选择是使用事务型存储器应用程序接口(API)的单独硬件实现,其中程序员负责跟踪程序的硬件资源需求,并确保它们不超过可用的硬件资源。在这种方法下,事务型存储器(此后称为TM)的可适用性和可利用性是受限的。一种替换方案是使用TM API的单独软件实现,这是很容易编程的(因为实际上没有资源限制),但是软件方法要忍受很高的执行时间开销。
进一步观察事务型存储器(TM),TM是从数据库事务中产生的。在数据库中,事务是必须满足被称为ACID属性的四种属性的一组操作。第一种ACID属性是原子性(atomicity)。原子性要求数据库事务以要么全有要么全无的方式来执行。事务可能因为程序异常终止(abort)或者由于错误而异常终止。原子性要求事务的所有操作要么全都执行,要么全都不执行。第二种ACID属性是一致性。一致性要求如果数据库在事务执行前处于一致状态中,那么数据库应当被保留在一致状态中。第三种ACID属性是隔离性。隔离性属性是指所有将要执行的事务看上去必须是以某种串行顺序来完成(即,它们应当是可串行化的)。符合ACID要求的最后一种也是第四种属性是持久性。持久性要求事务在机器崩溃时也要存活下来。也就是说,事务在可被提交(commit)之前必须被写入一个稳定的存储设备(例如,盘)。然而,应当注意的是,并非TM的所有实现都要求事务满足上述所有四种属性。例如,在一些实现中,持久性不是一种要求。
除了遵从全部或部分上述ACID属性之外,通常还要求利用事务型存储器的事务和数据库支持并发执行、死锁自由度、以及非阻挡塞性。一般情况下,事务型存储器系统支持非冲突事务的并发执行。一些数据库实现使用锁(例如,二相锁定)来实现这些类型的事务。因此,在这些情形中就可能发生死锁。一旦检测到死锁,就简单地异常终止某些事务而从死锁中恢复,藉此在事务型存储器系统中实现死锁自由度。非阻塞或者说无阻碍属性被用来在事务型存储器系统中防止某一线程妨碍其他线程的前进。
到目前为止,有两种常见的方法来实现使用应用程序接口(API)的事务型存储器访问一种是纯硬件实现;另一种是纯软件实现。硬件实现是基于以下文献中阐述的多处理器体系结构,所述文献名为“事务型存储器对无锁数据结构的体系结构支持”(MauriceHerlihy,J.Eliot B.MossTransactional MemoryArchitectural Support for Lock-Free DataStructure,国际计算机及其应用协会(ISCA)1993289-300)。这种方法此后将被称为“纯硬件方法”。
纯硬件方法提供了一种有效并且易于使用的无锁(lock-free)同步方法。纯硬件方法除了保证免受一般与基于锁的同步方法相关联的优先级倒置、护送(convoying)和死锁等困扰外,还避免了与并行编程相关联的很多精细校正问题。
不幸的是,纯硬件方法需要由程序员来进行小心的资源管理。这样一来,纯硬件方法就很难用众多更先进的处理器结构来实现。一般地,要求软件可在在处理器实现之间进行移植,并且如此小心地在应用层上调节资源限制了纯硬件方法的使用。此外,在实际操作中,纯硬件方法只使用事务型存储器中的事务型缓存(cache),由于该资源有限,所以不能保证处理线程完成,从而导致程序故障。
另一种常见的用API来实现事务型存储器访问的方法是使用纯软件方法,例如在以下文献中所阐述的,该文献名为“用于动态大小的数据结构的软件事务型存储器”(MauriceHerlihy,Victor Luchangco,Mark Moir,William N.Scherer III,Software Transactional Memoryfor Dynamic-Sized Data Structures,Principles of Distributed Computing(PODC)2003。)这种方法此后将被称为纯软件方法。纯软件方法的效用在于程序员可以完全不管用来提供事务型存储器语义的具体技术,并且API特别易于编程。不幸的是,在操作中,纯软件方法技术将导致因软件开销引起的很大减速。

发明内容
本发明的实施方案涉及在计算机系统中事务型存储器访问的混合硬件软件实现。根据本发明的一个方面,提供了一种装置,包括包括事务型缓存和常规缓存在内的处理器;和选择第一模式和第二模式之一来实现事务型存储器访问的策略管理器;其中,在第一模式中,所述事务型缓存被用来执行读写存储器操作,而在第二模式中,所述常规缓存被用来执行读写存储器操作。
根据本发明的另一个方面,提供了一种方法,包括选择第一模式和第二模式之一来实现事务型存储器访问;利用事务型缓存,在第一模式中执行读写存储器操作;以及利用常规缓存,在第二模式中执行读写存储器操作。
根据本发明的又一个方面,提供了一种其上存储有指令的机器可读介质,所述指令在被机器执行时使得所述机器执行以下操作,其中包括选择第一模式和第二模式之一来实现事务型存储器访问;利用事务型缓存,在第一模式中执行读写存储器操作;以及利用常规缓存,在第二模式中执行读写存储器操作。
根据本发明的再一个方面,提供了一种计算机系统,包括包括事务型缓存和常规缓存在内的处理器;和选择第一模式或第二模式之一,以响应于在数据库中访问存储器的应用程序接口请求来实现事务型存储器访问的策略管理器;其中,在第一模式中,所述事务型缓存被用来执行读写存储器操作,而在第二模式中,所述常规缓存被用来执行读写存储器操作。


图1是可以实现本发明实施方案的计算机系统配置的实施例的部分框图。
图2根据本发明的一个实施方案提供了事务型存储器对象的图示。
图3是根据本发明的一个实施方案,图示了实现硬件/软件事务型存储器事务的指令集体系结构的表。
图4A是根据本发明的一个实施方案,图示了用于事务型存储器访问的混合硬件软件实现的过程的流程图。
图4B是根据本发明的一个实施方案,具体图示了监视孤儿事务的过程的流程图。
图5是根据本发明的一个实施方案,图示了利用硬件/软件事务ISA来有效实现锁的过程的流程图。
具体实施例方式
在以下说明书部分中,将详细描述本发明的各种实施方案。然而,将这些细节包括进来是为了帮助理解本发明,并且描述用于实现本发明的示例性实施方案。这些细节不应用来将本发明限制为所描述的具体实施方式
,因为在本发明的范围内,其他变体和实施方式也是可能的。此外,虽然阐述了大量细节以便提供对本发明实施方案的完整理解,但是本领域的技术人员将清楚,这些具体细节不是实现本发明的实施方案所必需的。此外,诸如公知的方法、数据类型、协议、过程、元件、电结构和电路等细节都没有详细描述,也没有以框图形式示出,以免模糊了本发明。此外,本发明的实施方案将在具体实施方式
中描述,但是可以用硬件、软件、固件。中间件或其组合来实现。
本发明的实施方案提供了事务型存储器(TM)访问的混合硬件软件实现,例如和应用程序接口(API)一起用来通过利用处理器的嵌入式硬件支持,然后如果硬件资源耗尽的话,则转向软件方案,从而实现高性能的访问。因而同时实现了硬件TM访问和软件TM访问的益处。
在一个实施方案中,如下面所讨论的,在多数常见情况下通过修改原始事务对象以实现硬件TM辅助,从而大大减小与TM API软件方法相关联的性能损失。因此,利用嵌入式硬件支持(例如,事务型存储器缓存)来处理常见的情形以获得高性能,如果出现问题,那么在硬件资源耗尽的情况下转向软件TM方案。
图1示出了其中可以实现本发明的实施方案的计算机系统配置100的实施例的部分框图。系统配置100包括诸如中央处理单元(CPU)的至少一个处理器101、芯片组103、系统存储器件105、与一个或多个输入/输出(I/O)设备113接口的一个或多个接口111、以及网络接口107。
芯片组103可以包括存储器控制中心(MCH)和/或I/O控制中心。芯片组103可以是对于在处理器101和计算机系统100的其他组件之间的数据传输起到中心或内核作用的一个或多个集成电路芯片。此外,计算机系统100可以包括附加的组件(未示出),例如其他处理器(例如,在多处理器系统中)、协处理器以及其他组件等——这仅仅是计算机系统一个非常简单的实施例。
用在本说明书中,术语“处理器”或“CPU”是指能够执行指令序列,并且应被视为包括但不限于通用微处理器、专用微处理器、专用集成电路(ASIC)、多媒体控制器、信号处理器和微控制器等的任何机器。在一个实施方案中,CPU 101是能够执行Intel体系结构指令集的通用高速微处理器。例如,CPU 101可以是INTELPENTIUM系列处理器,例如INTEL体系结构32位(IA-32)处理器(例如PENTIUM4M)。
CPU 101、芯片组103和其他组件经由芯片组103来访问系统存储器件105。芯片组103例如与存储器控制中心一起使用,可以服务于指向系统存储器件105的存储器事务。
系统存储器件105可以包括适于存储数字信息的任何存储器件,例如静态随机访问存储器(SRAM)、动态随机访问存储器(DRAM)、同步动态随机访问存储器(SDRAM)和/或双数据率(DDR)SDRAM或DRAM等。因此,在一个实施方案中,系统存储器件105包括易失性存储器。此外,系统存储器件还可以包括非易失性存储器,例如只读存储器(ROM)。
此外,系统存储器件105还可以包括其他存储设备以及适当的接口,所述其他存储设备例如是硬盘驱动器、软盘驱动器、光盘驱动器等。
另外,系统存储器件105可以在非易失性存储器中存储硬件/软件事务型存储器(TM)引擎程序,供处理器101运行来实现根据本发明实施方案的技术,以由在处理器101上实现的混合硬件/软件TM引擎在计算机系统100内实现事务型存储器访问和事务(此后,术语“访问”和“事务”可以互换使用)。
系统存储器件还可以包括专用于利用数据库108来实现事务型存储器事务的存储器区域。例如,数据库108可以包括诸如企业数据库、财务数据库、规划管理数据库、目录服务之类的数据库,还可以包括一般与事务型存储器类事务一起使用的其他指针丰富型数据结构。
此外,计算机系统100可以包括与I/O设备113接口的适当接口111,所述I/O设备113例如包括盘驱动器、监视器、键盘、调制解调器、打印机、或任何其他类型的适当I/O设备。
计算机系统100还可以包括使计算机系统100与网络109相接口的网络接口107,所述网络109例如是局域网(LAN)、广域网(WAN)、因特网等。
图1中的基本计算机系统配置100是可用来实现事务型存储器访问的混合硬件软件实施方案的一类计算机系统的实施例。本领域的技术人员将会理解,图1中示例性的计算机系统配置100仅仅是基本计算机系统的一个实施例,很多其他的类型和变体都是可能的。此外,本领域的技术人员将会认识到,在图1中示出的示例性环境并不想限制本发明的实施方案。此外,应当明白,除了单个计算机系统配置100之外,或取而代之,多群或其他组的(与计算机系统配置100类似或不同的)计算机可以用来实现本发明的实施方案。
更具体地说,如图1所示,利用事务型引擎118的处理器101可以实施混合硬件/软件TM访问方法。具体地说,事务型引擎118包括标准TM功能,加上由事务型引擎118实现的增强型TM指令集体系结构(ISA),后面将更详细地讨论,用以实现与混合硬件/软件TM引擎有关的本发明的实施方案。另外,处理器101包括可以相互耦合在一起的事务型缓存132和常规存储器缓存134。
正如后面将详细讨论的那样,用事务型引擎118来实现的TM ISA使得混合硬件/软件TM引擎能够与例如API一同用来在“硬件模式”中使用硬件支持(例如,事务型缓存132)而获得高性能,并且在硬件缓存132耗尽的情况下转向软件方案(或“软件模式”)。按照这种方式,向存储器105和数据库108读写数据的API请求116被优化。应当注意,此后“硬件模式”是指主要利用事务型缓存132获得高性能,而“软件模式”是指主要利用常规缓存134以及其他存储器资源,这些资源的性能较慢,但却是耗之不尽的。
虽然将在具体实施方案中描述本发明的实施方式及其各种功能组件,但是应当明白,这些方面和功能可以用硬件、软件、固件、中间件或其组合来实现。
现在看图2,图2是根据本发明的一个实施方案,提供了事务型存储器对象的图示说明的图。如图2所示,事务型存储器(TM)对象202通过定位符204来标识。每个不是只读的共享数据对象都被放入TM对象202所示的容器。在事务期间,所有TM对象202在被访问前都被打开。这将对象与事务关联起来,使得底层软件系统可以检测到事务之间的冲突。典型地,线程用API打开对象,所述API指定了是否将以只读方式访问所述对象。一旦对象已被打开,就可以对事务型对象内的数据进行操纵。
定位符204起到事务型对象定位符的作用。对于每个事务型对象而言,无论同时访问该对象的线程数量为多少,都只有一个事务型对象定位符是活动的。状态列表206存储当前正在以软件模式访问对象的事务的状态的存储器地址。典型地,事务状态是以下之一ACTIVE、COMMITTED或ABORTED(214)。每个事务只有一个状态。处于硬件模式的事务也具有状态,但是它们从不出现在状态列表206中,下面将会讨论。
TM定位符204还存储对象210的新版本的内容218和对象212的旧版本的内容220的存储器地址。当事务打开TM对象以获取内容的最新版本时,它获得的版本取决于前面打开对象以写入(即,不是只读的)的最后一个事务的状态。如果最后写入者的状态214是ACTIVE或ABORTED,那么正在打开对象的事务将接收到旧版本220。如果最后写入者的状态214是COMMITTED,则正在打开对象的事务将接收到新版本218。
当软件模式的事务打开TM对象202以写入时,它将最新版本(如上面定义的)的地址放入TM定位符对象204的旧对象字段212。事务制作最新内容的拷贝,并将这一拷贝的地址放入TM定位符204的新对象字段210。在由软件模式的事务提交之前,对象的新拷贝不被任何其他线程访问,因此是局部的。一旦由事务提交,TM对象的新版本就变为共享对象,并且不能再被修改。当硬件模式的事务打开TM对象202以写入时,它不制作内容的拷贝。硬件模式的事务直接修改对象的最新版本,它依赖硬件来缓冲推测式的写操作,后面将讨论。
TM对象202还包括模式字段208,其指示了TM对象202是处于读模式还是写模式。当软件模式的事务打开处于读模式或写模式208的TM对象时,它将其状态变量214的地址加入状态列表206。这允许其他(处于软件模式和硬件模式的)线程异常终止所述事务,并且消除一度在个体对象上完成验证操作的需要。可以单纯通过检查保持事务状态(状态214)的一个位置来验证该事务。当事务打开TM对象202并且它的模式字段208被设置为只读时,如果所述对象正在以只读模式打开,则不需要明确地异常终止任何事务;然而,如果所述对象正在以写模式打开,则状态列表206中的所有事务在它们的状态214为ACTIVE时都需要被异常终止。当事务打开TM对象202并且模式字段208已被设置为由状态列表206中的单个事务(当前写入者)设置来写时,如果该单个事务的值是ACTIVE214,则该事务需要被异常终止,无论TM对象202正在以只读模式还是以写模式打开。
在这个实现中,TM对象202在给定的时间上只接纳单个读出者或单个写入者。在一些实施方案中,可以通过在状态列表206中允许多个事务字段存在,从而接纳并发的读出者,藉此来减缓这种限制。这允许在任何给定的时间上有多个(但却是受限的)事务打开对象。可以逐个对象地来设置这一限制。正如将会讨论的,TM对象202使得事务型存储器事务更倾向于通过硬件/软件混合方案来实现。
本发明的实施方案提供了允许以“硬件模式”或“软件模式”来实现事务型存储器事务的硬件/软件事务指令集体系结构(ISA)。当以硬件描述执行事务型存储器访问时,主要利用事务型缓存132(图1)来完成。按照这种方式,可以向事务提供非常高的性能,然而,硬件资源有时会耗尽。此外,在硬件模式中,处理器需要跟踪被访问的所有存储器位置。在硬件模式中,同时执行的事务之间的冲突被检测出来,并且发生冲突的事务之一被异常终止。一旦异常终止,在该事务期间被写入的数据就被无效,并且在提交时,该数据必须原子地是存储器状态的一部分。
更具体地说,本发明的实施方案涉及计算机系统中事务型存储器访问的混合硬件软件实现。包括事务型缓存和常规缓存在内的处理器被用在计算机系统中。策略管理器选择第一模式(此后称为“硬件模式”)或第二模式(此后称为“软件模式”)之一来响应于访问存储器的应用程序接口(API)请求而实现事务型存储器访问。在硬件模式中,事务型缓存被用来执行读写存储器操作,在软件模式中,常规缓存被用来执行大多数读写存储器操作(只有一个位置被存储在事务型缓存中,下面将讨论)。
策略管理器首先选择硬件模式,以在事务型缓存中使用事务型读写指令来执行读写操作。如果有足够的存储器资源存在于事务型缓存中用于执行读写操作,则发出提交指令以完成事务型存储器访问。然而,如果在事务型缓存中检测到冲突的事务型读写操作,或者检测到没有足够的存储器资源,则发出异常终止指令。如果对于第一模式发出了异常终止指令,则策略管理器可以选择软件模式,在该模式中,在常规缓存中使用常规的读写指令来执行常规的读写操作。
当纯粹用硬件来实现事务型存储器事务时,对于单个事务可以访问的存储器位置有数量上的限制。如果事务超过了这个限制,根据本发明的一个实施方案,该事务以“软件模式”重新启动。下面将会讨论,当硬件事务被无效时,该线程所执行的下一存储器操作将引发例外。这可以防止被无效的硬件事务继续进行并破坏存储器。在发生例外并进入软件模式之后,主要由常规缓存及其他存储器资源(见图1)来执行事务型存储器访问。
为了实施事务型存储器访问的这种混合硬件软件实现方案,本发明的实施方案提供了新颖的、非显而易见的事务型存储器指令集体系结构(ISA)。参考图3,图3是根据本发明的一个实施方案,图示了实现硬件/软件事务型存储器事务的指令集的表。
如图3所示,硬件/软件事务ISA 300包括具有两种模式的开始事务302。“开始事务(全部)”(Begin Transaction All)用于指定“硬件模式”事务,而“开始事务(选择)”(Begin Transaction Select)被用于“软件模式”事务。具体地说,开始事务指令302标记事务的启动。用于“硬件模式”的“开始事务(全部)”默认使所有的存储器访问成为事务型的(例如,使用事务型缓存),而“开始事务(选择)”只完成被明确指定为事务型的存储器操作。
应当注意,硬件事务不能被嵌套(与基于软件的事务相反)。因此,在前一事务已被提交或异常终止之前,新的硬件事务不能开始。通过执行异常终止事务指令306或者在遇到数据冲突时,异常终止一个事务,下面将会讨论。
提交指令304被用来标记事务的结束,并允许包括事务型缓存在内的事务型存储器的所有内容成为体系结构性的。具体地说,允许事务型存储来修改系统状态,并且事务型加载被从事务型缓存中清除出去。如果在先指令前面未被启动,则无法让提交指令开始。
异常终止事务指令306异常终止当前事务,并丢弃先前被缓冲的所有事务型写数据。如果先前没有任何事务被启动,那么将发生错误。
此外,硬件/软件事务ISA 300还包括加载/存储事务指令308,用以执行事务型存储器加载/存储操作。
硬件/软件事务ISA 300此外还包括加载/存储常规指令,用以执行非事务型的存储器加载/存储操作。
还提供了检查点和恢复状态指令312。检查点指令对当前寄存器状态进行检查点操作并存入存储器。恢复指令从存储器中恢复当前寄存器状态。
硬件/软件事务ISA 300还包括孤儿事务例外指令314。一个事务如果不能提交的话,就被定义为孤儿事务。例如,如果另一个处理已对它已进行事务型读的位置进行写操作,那么这就可能发生。在这种情况下,孤儿事务可以发现存储器处于不一致状态中,并可以让程序引发例外,例如除以零,或者访问超范围的存储器地址。更坏的是,它可能将错误的值写入有效的存储器位置,并破坏系统状态。
孤儿事务例外指令避免了这些复杂问题。具体地说,在某一线程的事务已变为孤儿后,由该线程执行的第一加载指令将生成孤儿事务例外指令314,后面将会讨论。
现在看图4A,图4A是根据本发明的一个实施方案,图示了用于事务型存储器访问的混合硬件软件实现的过程400的流程图。过程400利用了以下事实,即,当针对大多数正常情形用“硬件模式”来实现(例如,主要利用处理器的事务型缓存)时,事务型存储器访问是以非常快速并且最优的方式来完成的。然而,该过程也考虑到,当在硬件模式下由处理器来实现时,事务也许不能完成,因此,它返回到“软件模式”中,软件模式总能保证完成事务。相反的是,“软件模式”主要使用常规缓存和其他存储器资源。下面将会讨论,当硬件事务被无效时,下一存储器操作引发孤儿事务例外,其防止被无效的硬件事务继续进行并破坏存储器。
具体阅读过程400,在框402,事务(例如,从API)开始。在框404,策略管理器选择硬件模式或软件模式之一来开始所述事务。在一个实施方案中,首先选择硬件模式以(例如,经由事务型缓存)利用快速硬件处理的优势,而软件模式可以用作后备。
在选择了硬件模式之后,发起来自硬件/软件事务ISA 300的Begin Transaction All指令302,使得模式被设置为硬件。进一步地,来自硬件/软件事务ISA的加载事务指令308也被发起,以加载事务型存储器状态。接着,在框408,如前所述,使用事务型读写操作,在适当之处对TM对象执行事务的读写操作。如果硬件事务可以完成(例如,如果有足够的硬件资源可以用事务型缓存来完成事务),那么生成提交事务指令,并且如框410所示,状态被设置为提交,并且事务被提交。对事务的处理就这样被提交了(框415)。
然而,如果事务不能用硬件来提交(例如,在事务型缓存中没有足够的硬件资源),则发起异常终止事务指令,并且状态被设置为异常终止,并且事务被异常终止(框420)。于是,过程被异常终止(框422)。
当事务被异常终止时,生成孤儿事务例外指令424。这可能是由于冲突的事务型读写操作或硬件资源不够引起的。在任一种情形中,事务型存储器被清理,并且事务被重试(框426)。一般,如果在硬件模式中发生故障,那么对于下一次尝试,策略管理器将选择软件模式。
简要地说,将更详细地讨论提交和异常终止指令。具体地说,如前所述,可以使用事务型缓存来实现事务型存储器。例如,如图1所示,处理器101可以包括事务型缓存132和常规缓存134。使用来自硬件/软件事务ISA 300的加载和存储事务308进行读写的所有位置都被存储在事务型缓存中。所有的事务型写都保留在事务型缓存中,直到事务提交为止。如果事务型缓存中曾被所述事务读取的位置被另一个线程写,那么所述事务变成一个孤儿,并且最终将被异常终止。
提交事务指令304标记事务的结束,并且使得事务型缓存的所有内容变为体系结构性的(例如,事务型存储被允许修改系统状态,并且事务型加载被从事务型缓存中清除出去)。
如果某一事务不能提交的话,它就被定义为一个孤儿。举例来说,一个事务可能成为孤儿,如果另一个线程写它读过的位置的话。孤儿事务可以发现存储器处于不一致状态中,并可以让处理器引发例外,例如除以零,或者访问范围以外的存储器位置。更坏的是,它有可能将错误的值写入有效的存储器位置,并破坏系统状态。因此,当这发生时,就发起孤儿事务例外指令314,并使动作异常终止422。
因此,过程400和硬件/软件事务ISA 300允许例外被异步使用,以通知一个线程它正在执行的事务是否已变为孤儿。一旦事务已变为孤儿,则让所述线程异常终止,并且不允许该线程使用从来自存储器的新加载操作所返回的数据。
为了完成这一目标,在每次加载上使用特殊的例外。具体地说,在某一线程成为孤儿后的第一次加载在该加载上强制一个例外,并且该线程被异常终止。然后,例外处理者(handler)负责分支回到事务的开端,这可以如前面的清理和重试框426所述来完成。因此,用异常终止事务指令306实现的用户例外处理者负责异常终止事务,展开堆栈,以及利用清理和重试426来重新启动被异常终止的事务。
简要参考图4B,图4B是具体图示了监视孤儿事务的过程448的流程图。在框450,在发生加载事务后,状态标记被设置为事务有效。接着,过程448监视由另一个处理器或线程引发的冲突(框452)。如果在框454没有检测到冲突,则继续处理(框456)。然而,如果在框454检测到冲突,则状态标记被重置为事务无效,用以标志该事务已被异常终止(框460)。在第一次加载事务后的所有加载都检查状态标记,以在提交(例如,将数据返回处理器)前验证它被设置为事务有效。另一方面,如果状态标记被重置,则不允许所述加载被提交,并且发生如前所述的异常终止过程。
返回图4A,假设硬件事务由于发生冲突的事务读写操作或硬件资源耗尽而已被异常终止,那么策略管理器在框404处可以选择“软件模式”来确保事务的完成。在框430,从硬件/软件事务ISA 300发起Begin Transaction Select指令302,使得模式被设置为软件,并且事务状态被加载。应当注意,当运行在软件模式时,处理器并不将所有的存储器访问都视为事务型的。对于每个事务,只有一个位置是以事务型方式(例如,使用加载事务指令308)来访问的——即,包含所述事务的状态的位置。
接着,在框432,通过拷贝并使用常规读写操作(例如,加载/存储常规指令310),对事务执行读写操作。此外,使用常规缓存和其他存储器资源,而不是事务型缓存。如果对事务的读写操作可以执行的话,则发起提交事务指令304,并状态被设置为提交(框434)。于是,对存储器的读写操作被提交(框415)。
另一方面,如果检测到冲突的事务型写操作,则过程可以被异常终止,并且状态被设置为异常终止(框436)。于是,事务在框422处被异常终止,并且基于发生冲突的写事务的例外438,处于软件模式的过程400可以在软件模式中再次清理并重试(框440)事务型操作。
在本发明的另一个实施方案中,前面所讨论的硬件/软件事务ISA 300可以用来有效地实现锁。简要地说,当调用锁获取函数时,处理器试图使用事务型存储器扩展,以硬件模式来执行临界区(例如,在锁获取和接下来的锁释放之间的代码),并且如果失败的话,过程将转回到软件模式。
有三种可能的原因致使临界区可能无法以硬件模式完成。例如,可能发生资源耗尽,其中用来保存事务型状态的事务型缓存溢出。或者,可能存在数据上的冲突。例如,如果两个线程想要以硬件模式执行它们的临界区,并且试图对同一数据执行冲突的操作,这也可能引发故障。举例来说,一个线程可能要写另一个线程已经读过的缓存行。另外,在向软件模式转移时也可能发生故障。例如,如果某一线程在软件模式中夺取了锁,那么所有需要这个锁并且处于临界区中间的其他线程都将被异常终止。
应当注意,对于任何锁,在硬件模式中,多个线程可以处于临界区中,或者在软件模式中,单个线程可以正在持有该锁。为了在硬件模式中进入锁的临界区,线程进行检查以确信锁是可获得的,并且进入临界区而不将其标记为锁定。为了在软件模式中进入锁的临界区,线程进行检查以确信锁是可获得的,并将其标记为锁定。这将在硬件模式中异常终止任何已处于临界区中的线程,并将在硬件或软件模式中阻止任何新的线程进入临界区。
看图5,图5是根据本发明的一个实施方案,图示了使用硬件/软件事务ISA 300来有效实现锁的过程500的流程图。在框502,锁被获取或发起。在框504,策略管理器选择一种模式。典型地,如前所述,首先选择硬件模式,从而尝试最有效地完成事务型存储器事务。如果硬件模式无法完成事务的话,则转向软件模式。
接着,在框506,锁被开启,并且模式被事务ISA 300的“开始事务(全部)”指令302设置为硬件。在框508,使用事务型读写操作(例如,加载/存储事务308),对所述事务执行读写操作(例如,在事务型缓存中)。如果事务完成,则锁被释放(框510),并且事务被提交。
然而,如果存在因冲突的事务型读写操作520引起的例外,则锁被异常终止。然后发起清理和重试操作(框522),并且以软件模式来尝试锁。因此,在框504,策略管理器选择软件模式。
在这种情形中,锁以软件模式开始,并且锁的状态被设置为锁定(框530)。接着(框532),使用常规读写操作(例如,加载和存储常规指令310)来执行读写操作。在软件模式中,锁一般总是被完成,然后锁被释放,并且锁定状态被设置为解锁(在框534)。这结束了过程500。
为了获得进一步的性能改进,处理器可以执行冲突解决。具体地说,当检测到数据冲突时,处理器可以解决冲突,并允许事务之一完成。剩下的发生冲突的事务可以被推迟或异常终止,这取决于它们曾读取的存储器位置中是否有哪一个位置已被另一个线程写入。此外,当如前所述已发生例外520(例如,孤儿事务例外)时,可以记录事务是否因资源耗尽或因数据冲突而成为孤儿。然后,例外处理器可被修改为只有当资源耗尽时才返回软件模式。当只发生了数据冲突时,可以采用以下修改,即再次以硬件模式来重试事务,而不是自动切换到软件模式。
虽然已在具体实施方案中描述了本发明的实施方案及其各种功能组件,但是应当理解,可以用硬件、软件、固件、中间件或它们的组合来实现本发明的实施方案,并且本发明的实施方案可以用在多种系统、子系统、组件或其子组件中。当用软件或固件来实现时,本发明的单元是用于执行必要任务的指令/代码段。程序或代码段可被存储在机器可读介质(例如,处理器可读介质或计算机程序产品)中,或者在传输介质或通信链路中,通过包含在载波或由载波调制的信号中的计算机数据信号来传输。机器可读介质可以包括可存储或传输机器(例如,处理器、计算机等)可读并可执行形式的信息的任何介质。机器可读介质的例子包括电子线路、半导体存储器件、ROM、闪存、可擦除可编程ROM(EPROM)、软盘、压缩盘(CD-ROM)、光盘、硬盘、光纤介质、射频(RF)链路等。计算机数据信号可以包括可在传输介质上传播的任何信号,所述传输介质例如是电子网络信道、光纤、空气、电磁介质、射频(RF)链路、条形码等。代码段可以经由因特网、企业内部网等网络来下载。
此外,虽然已参考示意性的实施方案描述了本发明的实施方式,但是这些描述不想被理解为限制性的。对本发明实施方案所属技术领域的技术人员来说很清楚的对示意性实施方案的各种修改、以及本发明的其他实施方案都被视为落入本发明的精神和范围内。
权利要求
1.一种装置,包括包括事务型缓存和常规缓存在内的处理器;以及选择第一模式和第二模式之一来实现事务型存储器访问的策略管理器;其中,在第一模式中,所述事务型缓存被用来执行读写存储器操作,而在第二模式中,所述常规缓存被用来执行读写存储器操作。
2.如权利要求1所述的装置,其中,所述策略管理器选择第一模式,以在所述事务型缓存中使用事务型读写指令来执行读写操作。
3.如权利要求2所述的装置,其中,如果在所述事务型缓存中存在足够的存储器资源用于执行读写操作,则发出提交指令,以完成所述事务型存储器访问。
4.如权利要求2所述的装置,其中,如果检测到发生冲突的事务型读写操作,则发出异常终止指令。
5.如权利要求2所述的装置,其中,如果在所述事务型缓存中检测不到足够的存储器资源,则发出异常终止指令。
6.如权利要求5所述的装置,其中,如果对于第一模式发出了异常终止指令,则所述策略管理器选择第二模式,在第二模式中,在所述常规缓存中使用常规读写指令来执行常规读写操作。
7.如权利要求6所述的装置,其中,运行在第二模式中,如果检测到发生冲突的写事务,则发出异常终止指令。
8.如权利要求6所述的装置,其中,如果未检测到发生冲突的写事务,则发出提交指令以完成所述存储器访问。
9.一种方法,包括选择第一模式和第二模式之一来实现事务型存储器访问;利用事务型缓存,在第一模式中执行读写存储器操作;以及利用常规缓存,在第二模式中执行读写存储器操作。
10.如权利要求9所述的方法,还包括选择所述第一模式;以及使用事务型读写指令,在所述事务型缓存中执行读写操作。
11.如权利要求10所述的方法,其中,如果在所述事务型缓存中存在足够的存储器资源用于执行读写操作,则还包括发出提交指令,以完成所述事务型存储器访问。
12.如权利要求10所述的方法,其中,如果检测到发生冲突的事务型读写操作,则还包括发出异常终止指令。
13.如权利要求10所述的方法,其中,如果在所述事务型缓存中检测不到足够的存储器资源,则还包括发出异常终止指令。
14.如权利要求13所述的方法,其中,如果在第一模式中发出了异常终止指令,那么还包括选择第二模式;以及使用常规读写指令,在所述常规缓存中执行常规读写操作。
15.如权利要求14所述的方法,其中,当运行在第二模式中时,如果检测到发生冲突的写事务,则还包括发出异常终止指令。
16.如权利要求14所述的方法,其中,如果未检测到发生冲突的写事务,则还包括发出提交指令以完成所述存储器访问。
17.一种其上存储有指令的机器可读介质,所述指令在被机器执行时使得所述机器执行以下操作,其中包括选择第一模式和第二模式之一来实现事务型存储器访问;利用事务型缓存,在第一模式中执行读写存储器操作;以及利用常规缓存,在第二模式中执行读写存储器操作。
18.如权利要求17所述的机器可读介质,还包括使得所述机器执行以下操作的指令实现所述第一模式;以及使用事务型读写指令,在所述事务型缓存中执行读写操作。
19.如权利要求18所述的机器可读介质,还包括使得所述机器执行以下操作的指令如果在所述事务型缓存中存在足够的存储器资源用于执行读写操作,则发出提交指令,以完成所述事务型存储器访问。
20.如权利要求18所述的机器可读介质,还包括使得所述机器执行以下操作的指令如果检测到发生冲突的事务型读写操作,则发出异常终止指令。
21.如权利要求18所述的机器可读介质,还包括使得所述机器执行以下操作的指令如果在所述事务型缓存中检测不到足够的存储器资源,则发出异常终止指令。
22.如权利要求21所述的机器可读介质,其中,如果在第一模式中发出了异常终止指令,则还包括使得所述机器执行以下操作的指令选择第二模式;以及使用常规读写指令,在所述常规缓存中执行常规读写操作。
23.如权利要求22所述的机器可读介质,当运行在第二模式中,还包括使得所述机器执行以下操作的指令如果检测到发生冲突的写事务,则发出异常终止指令。
24.如权利要求22所述的机器可读介质,还包括使得所述机器执行以下操作的指令如果未检测到发生冲突的写事务,则发出提交指令以完成所述存储器访问。
25.一种计算机系统,包括包括事务型缓存和常规缓存在内的处理器;以及选择第一模式或第二模式之一,以响应于在数据库中访问存储器的应用程序接口请求来实现事务型存储器访问的策略管理器;其中,在第一模式中,所述事务型缓存被用来执行读写存储器操作,而在第二模式中,所述常规缓存被用来执行读写存储器操作。
26.如权利要求25所述的计算机系统,其中,所述策略管理器选择第一模式,以在所述事务型缓存中使用事务型读写指令来执行读写操作。
27.如权利要求26所述的计算机系统,其中,如果在所述事务型缓存中存在足够的存储器资源用于执行读写操作,则发出提交指令,以完成所述事务型存储器访问。
28.如权利要求26所述的计算机系统,其中,如果检测到发生冲突的事务型读写操作,则发出异常终止指令。
29.如权利要求26所述的计算机系统,其中,如果在所述事务型缓存中检测不到足够的存储器资源,则发出异常终止指令。
30.如权利要求29所述的计算机系统,其中,如果对于第一模式发出了异常终止指令,则所述策略管理器选择第二模式,在第二模式中,在所述常规缓存中使用常规读写指令来执行常规读写操作。
31.如权利要求30所述的计算机系统,其中,运行在第二模式中,如果检测到发生冲突的写事务,则发出异常终止指令。
32.如权利要求30所述的计算机系统,其中,如果未检测到发生冲突的写事务,则发出提交指令以完成所述存储器访问。
全文摘要
本发明的实施方案涉及在计算机系统中事务型存储器访问的混合硬件软件实现。包括事务型缓存和常规缓存在内的处理器被用在包括策略管理器的计算机系统中,所述策略管理器选择第一模式(硬件模式)和第二模式(软件模式)之一来实现事务型存储器访问。在硬件模式中,事务型缓存被用来执行读写存储器操作,在软件模式中,常规缓存被用来执行读写存储器操作。
文档编号G06F12/08GK1755635SQ200510107809
公开日2006年4月5日 申请日期2005年9月30日 优先权日2004年9月30日
发明者桑吉夫·库马, 克里斯托弗·休斯, 帕萨·肯杜, 安东尼·纳古炎 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1