在非对称异构多处理器环境中提供原子更新原语的方法

文档序号:6403901阅读:111来源:国知局
专利名称:在非对称异构多处理器环境中提供原子更新原语的方法
技术领域
本发明一般涉及存储器的原子更新(ATOMIC UPDATE),特别涉及通过相连的处理器单元使用直接存储器存取命令执行的原子更新。
背景技术
在常规对称多处理器系统中,即由多个主处理器单元(MPU)组成的多处理器系统中,MPU可以使用加载/存储指令对公共共享存储器进行直接存取。为了对在多个MPU执行的程序所共享的存储器进行同步和存取控制,除了这些加载/存储指令外,还经常会提供“原子”读/改/写的能力。“原子”命令通常可以定义为这样的命令对于可能存取该数据区的其它单元而言,允许对存储器中数据的读、改、写序列象是一个单个操作。传统上利用硬件序列实现该命令,该序列或者在整个操作序列完成之前封锁其它单元对该存储区域的存取,或者使用一种更原始的保留加载和条件存储技术。一般地说,这样做是为了保证在存储区域被访问该存储器区域的另一MPU或I/O单元读或写之前,该存储器区域是完全更新和一致的,即对该存储器区域“完成”原子命令或更新序列。
原子命令常常具有特别指令的形式,例如“比较和交换”、“测试和设置”、“获取和空操作”、“获取和存储”等。还有一种技术是在能够在软件中实现原子操作序列的MPU中,提供一对更基础的“加载和保留”及“条件存储”指令。在同构MPU组成的对称多处理器系统中,这些技术可以工作得很好。
在非对称异构多处理器系统中,以常规的共享存储器方式安排MPU。专用处理器,APU,有其自己的专门指令和数据存储器,其通过DMA引擎启动块移动操作来实现对共享存储器的间接存取。对于作为对等方的多个MPU和使用DMA引擎存取共享存储器的APU,需要把原子更新机制扩充到DMA引擎。这通常是因为要提供一种机制来协调对共享存储器中数据的存取。在存在没有这种技术的多个APU的环境中,通过利用MPU的主/从方案(其中通过针对DMA引擎的命令每次一个地为每个APU分配工作),由于APU的空闲时间和MPU用于给各个APU分配工作的时间,导致系统在利用率和效率上都很差。
因此,需要一种DMA引擎,其可被APU用来在APU本地存储器和共享系统存储器之间拷贝数据,同时作为其它MPU和APU/DMA引擎的对等方参与共享存储器的原子更新。

发明内容
本发明为具有带DMA的共享存储器的非同步异构单芯片多处理器计算机系统提供原子更新原语。根据包括带保留取锁行命令(GETLOCK LINE COMMAND WITH RESERVATION)、条件放锁行命令(PUT LOCK LINE CONDITIONAL COMMAND)和无条件放锁行命令(PUT LOCK LINE UNCONDITIONAL COMMAND)的集合产生至少一个锁行命令。


为了对本发明有一个更完整的理解并明了其优点,参照附图以配合后面的详细说明,其中附图1示意性地描述了一个系统结构,具有连接至系统存储器的多条总线、DMA引擎、原子装置和本地存储器;附图2说明了针对高速缓存和本地存储器使用DMA带保留取锁行命令和条件放锁行命令的方法;附图3说明了使用DMA无条件放锁行命令的方法。
具体实施例方式
在下面的讨论中,给出了许多具体细节以提供对本发明的透彻理解。然而,本领域的技术人员会认识到,在没有这些具体细节的情况下也可以实施本发明。在其它情况下,一些公知的部分以示意图或方框图的形式加以说明,为的是不因不必要的细节而模糊本发明。此外,尽可能地忽略了诸如涉及网络通信、电磁信号技术之类的细节,因为这样的细节不是完整理解本发明所必须的,而且认为这些内容是在本领域普通技术人员知识范围之内。
在本说明的其余部分,处理单元(PU)可以是一个设备中仅有的计算处理器。此时,该PU通常被称为MPU(主处理单元)。处理单元也可以是许多处理单元中的一个,它们按照为特定计算设备开发的方法或算法分担计算负载。在本说明的其余部分,凡指处理器时都使用术语MPU,不管MPU是否设备中仅有的计算件件,也不管MPU是否正与其它MPU共享计算元件。
还要注意到,除非特别指明,这里所说明的所有功能既可用硬件也可用软件执行,还可通过二者的结合来执行。然而在优选实施例中,除非另有说明,例如计算机或电子数据处理器这样的处理器按照代码,例如计算机程序代码、软件和/或为执行这些功能而编码的集成电路来执行这些功能。
转向附图1,其中示出了系统100,系统100允许APU 110更自治地作为对等方加入多处理器环境。这一点是利用APU 110实现的,它利用DMA引擎115的块模式对系统存储器170进行间接存取。一般来说,在系统100中,APU 110通过使用“加载和保留”(GETLLAR)锁行命令和“条件存储”(PUTLLC)或“无条件存储”(PUTLLU)锁行命令存取和锁定共享存储器170的保留区组(GRANULE),来使用原子读/改/写序列。
系统100包括连接到总线接口控制器(BIC)150的一个或多个MPU复合体193,以及连接到BIC 150的一个或多个APU复合体192。BIC 150连接到存储器控制器160,后者又连接到系统/共享存储器170。至少一个APU/DMA复合体192和具有一个或多个MPU 180的至少有一个MPU单元复合体193包括系统的计算能力。
APU复合体192包括连接到本地存储器105的APU 110。APU110通过一条控制总线连接到DMA队列120。DMA队列120连接到DMA引擎。DMA引擎115连接到原子装置130。
原子装置130包括一个保留站(RS)135和一个原子高速缓存137。原子高速缓存137可以是一个二级(L2)高速缓存。原子装置130通过控制总线和窥探总线连接到BIC 150。
MPU复合体193包括一个或多个与L2高速缓存187相连的MPU 180,而高速缓存187又与BIC 150相连。BIC 150连接到存储器控制器160,后者又连接到系统/共享存储器170。在进一步的实施例中,在系统100中使用多个APU复合体192,但是没有使用MPU复合体193,以利用DMA命令支持APU 110之间的原子更新序列。可选地,利用DMA命令支持原子更新序列的其它单元也在本发明的范围之内。
一般说来,出于同步这样的原因,APU 110通过GETLLAR、PUTLLC和PUTLLU锁行DMA命令来使用原子操作。DMA命令是应APU 110的请求在经过DMA队列120的适当排序之后由DMA引擎115发出的。典型地,锁行DMA命令被推向DMA队列120的前端以立即执行,因为获得和释放锁一般都是与在APU 110中的程序执行相同步的。
典型地,通过发出DMA命令GETLLAR来设置RS 135。在DMA引擎115执行命令时,系统存储器170中被选存储器地址的数据被传递到本地存储器105以供处理。典型地,该数据传送可以是一个高速缓存行(CACHE LINE),128字节。有时候可以在原子高速缓存137中发现该数据(如果原来发出的GETLLAR被用于存取该数据)。但是,如果在原子高速缓存137没有发现该数据,就向BIC 150发出对该数据的请求,并且从系统存储器170或者与另一个所连接单元(分别为MPU或APU)相关的高速缓存取得的数据被拷贝到本地存储器,也拷贝到原子高速缓存137。
此外,在GETLLAR命令期间形成对RS 135保留区组的“保留”。保留区组的大小与实现相关,然而若保留区组与高速缓存行大小匹配的话,实现起来会更容易。APU 110程序通过经由控制总线103从DMA队列120中读取命令完成状态,以等待GETLLAR命令的完成。控制总线103一般包括多个通道,每个通道传输预定的信息。一旦在RS 135中设置了保留并将数据拷贝到本地存储器105,就报告GETLLAR命令“完成”。APU 110程序通常把经由本地存储总线107的本地存储器130中的数据与期待的结果,例如表示锁被得到或锁被释放的值相比较,如果不是期待的结果(比如表示锁被得到的值),都要经过控制总线101重发GETLLAR命令至DMA队列120。在进一步的实施例中,如果该值是期待的结果(比如锁被释放),APU 110程序就经过本地存储总线107修改本地存储器中的数据(以表示锁被得到),并经过控制总线103发出PUTLLC命令至DMA队列120,以便“原子地”更新原子高速缓存137中的数据,或保证其在本地存储器105中具有的数据是来自系统存储器170或另外一个单元的系统存储器高速缓存的最新拷贝。
如果原子装置130在“PUTLLC”命令执行之前从BIC 150接收到针对落入保留站135中存储的保留区组地址内的地址的原子高速缓存137的“杀死”型窥探,则在保留站135中重新设置原来通过执行GETLLAR命令所设置的保留。当连接于BIC 150的其它单元尝试修改(写)能够包含在原子高速缓存137中的数据时,通常接收到杀死型窥探命令。
如果作为PUTLLC的结果在DMA引擎有机会从本地存储器105拷贝数据到原子高速缓存137或系统存储器170之前保留被无效,则DMA引擎115在DMA队列120中将PUTLLC命令标记为“保留丢失”状态,且不从本地存储器105拷贝数据到原子高速缓存137或系统存储器170。如果对于PUTLLC命令所寻址的保留区组在保留站135中的仍然存在保留,那么原子装置130就通过BIC 150发出一个杀死型窥探命令给其它单元,从而重新设置其它单元(APU或MPU)可能已经在其原子装置中针对相同保留区组设置的任何保留。这是因为在连接于BIC 150的其它处理器(MPU、APU)结束它们的处理之前,原子装置130已经结束了这个数据更新的处理,并且这个更新后的数据变成了其它处理器应当在以后使用的数据。
接着,DMA引擎115从本地存储器105拷贝数据到原子高速缓存137,并重新设置保留站135中的保留。DMA引擎115然后在DMA队列120中设置PUTLLC命令的“成功”状态。APU 110程序利用控制总线103等待和读取来自DMA队列120的PUTLLC命令完成状态,以确定该状态为“成功”或“保留丢失”。如果是“成功”,该原子操作完成,如果是“保留丢失”,APU 110程序必须从发出GETLLAR命令开始重新执行整个序列。
接着,在PUTLLC命令成功完成并且在拥有“锁”的情况下执行了后续操作后,APU 110发出一个PU TTLU命令以释放“锁”。一般用PUTTLU命令无条件地从APU 110本地存储器向原子高速缓存137传输数据。如果在原子高速缓存137中高速缓存行被标记为存在并且互斥,DMA引擎115就从APU 110的本地存储器传输数据到原子高速缓存137。
如果高速缓存行被标记为存在但非互斥,则原子装置发出一个“放弃(DECLAIM)”窥探命令,该命令将具有该数据拷贝的其它单元的高速缓存中的高速缓存行置为无效。在这个高速缓存137中该行被标记为“互斥”,DMA引擎115从APU 110本地存储器传输数据到原子高速缓存137。最后,如果在原子高速缓存137中不存在该高速缓存行,则原子装置130通过经由BIC 150发出窥探请求来确定在某些其它单元的高速缓存中是否存在该行。如果在另一个单元的高速缓存中存在,从其它单元的高速缓存传输数据到连接于系统100的原子高速缓存,而在已经从其传输数据的高速缓存中,将包含该数据的高速缓存行置为无效。如果在另一个单元的高速缓存中不存在该数据,则存储器控制器160将从共享存储器170提供数据。无论哪种情况,包含该数据的原子高速缓存中的高速缓存行都被认为是“互斥”的。所以,DMA引擎115从本地存储器105传输数据到原子高速缓存137。
换另一种方式说,在“比较和交换”原子更新中,APU 110会在一个循环中发出GETLLAR命令,直到APU 110所进行的比较发生匹配,这可以是表示锁释放的值。当值的比较成功时,尝试进行“交换”。也就是说,在某些情况下修改该值为表示“锁被得到”的值。然后发出PUTLLC以便“原子地交换该值”,在某些情况中用“锁被得到”的新值交换“锁释放”的旧值。一旦这些完成,APU 110就“拥有”了资源,也就是说,具有了读或读/写的特权,并对“锁定”的对象执行进一步的操作。随后,当APU 110结束时,它“释放锁”,换言之就是把该值从“锁被得到”改变为“锁释放”。它使用PUTTLU命令以完成这一工作。
原子高速缓存137的存在在原子更新性能方面发挥有作用。由于数据本身的性质,可能经常发生多个连接于BIC 150的APU复合体(APU/DMA单元)192和MPU复合体193同时试图进行同样数据的原子更新的情况。因为原子高速缓存137能具有与锁行相关的最新数据,所以当其它高速缓存将被更新时,它可利用来自另一个原子高速缓存137而不必来自系统存储器170的信息实现更新。在这个实施例中,多单元之间高速缓存到高速缓存的传输可发生在同一个集成电路芯片上,并且与系统存储器到高速缓存的传输相比,可以快得多,因为后者一般发生在两个不同的集成电路芯片之间。
一般说来,系统100节省时间靠的是在原子高速缓存137中对用于同步的DMA数据传输结果进行缓冲,而不是对来自系统存储器170的全部数据,例如不具有同步属性的存储器传输进行缓冲。这就节省了相当程度的芯片器件,因为与用来缓冲系统存储器和本地存储器之间的全部DMA数据传输的高速缓存相比,原子高速缓存137可以更小。进一步说,因为可以预先定义取得的区组以匹配于高速缓存行的大小和排列,从原子高速缓存137取得规定数据所需要的时间也减少了。非锁行DMA命令可以有各种不同的传输尺寸和排列。
例如,在一个实施例中,在原子高速缓存137中,4个高速缓存行(128字节乘4)保留给使用锁行命令时访问的数据,并且这是高速缓存到高速缓存、高速缓存到本地存储器、系统存储器到高速缓存等等存储器传输的基本单位。然而,本领域技术人员知道,其它保留区组的大小也是可以使用的。再有,通过使用“锁行”命令,APU本身也能够直接提供必须的同步和互斥。
现在转向附图2,说明的是在系统100中使用DMA原子传输的方法200。方法200可以利用特定的命令和参数确定已经发出什么原子命令,以及是否在命令的不当调用和执行中发生了错误条件。
在步骤205中,由APU 110发出GETLLAR命令。在步骤205中,APU 110发出原子DMA命令“GETLLAR”到其连接的控制总线以传送到DMA队列120。在此实施例中,GETLLAR命令有3个参数。第一个参数是本地存储器地址(LSA),所取出的数据最终要被送到本地存储器105中的该地址。第二个参数是高端有效地址(EAH),它是从其拷贝数据的系统存储器中数据的高端地址。第三个参数是低端有效地址(EAL),是从其拷贝数据的系统存储器中数据的低端地址。参数EAH和EAL定义原子更新序列中所涉及的共享存储器中的位置。
在步骤205中,GETLLAR命令被放到队列的前面。该命令放在DMA队列120中。通过一系列“写至通道”命令写入该命令及其参数。
在步骤210中,DMA引擎命令从系统存储器170或L2高速缓存187或原子高速缓存137向本地存储器105传输数据。在步骤215中,如果在原子高速缓存137中没有发现该数据,就由BIC 150实现该数据请求。BIC 150首先通过窥探请求向MPU复合体193的L2高速缓存187和/或APU复合体192的原子高速缓存137中的任意一个请求所选数据。如果在这些高速缓存中的任意一个内均未能发现所请求的数据,BIC 150就向系统存储器170请求该数据。在步骤220中,当数据传自L2高速缓存187或系统存储器170时,相应地,所传输数据的拷贝存储于原子高速缓存137中,而DMA引擎将数据从原子高速缓存137传输到本地存储器105。
在步骤225中,DMA引擎115对RS 135设置保留,所用的地址是该GETLLAR命令所涉及的保留区组位置。在步骤227中,APU110等待表 GETLLAR命令完成的完成通知。在步骤230中,APU110处理放在其本地存储器105中的数据。在步骤235中,APU 110在处理和修改本地存储器中的锁行数据之后,发出PUTLLC命令。
在步骤240中,原子装置130确定在保留站130中是否仍然有前面由GETLLAR命令设置的对该锁行保留区组的保留。如果无保留,则在步骤242中设置PUTLLC命令状态为“失败”,然后前进至步骤290。
然而,如果保留仍然存在,则DMA引擎115在步骤265中从本地存储器105传输数据到原子高速缓存137。在步骤270中,在保留站135内重新设置该高速缓存行的保留站。在步骤280中,将PUTLLC命令的状态在DMA队列120中存储为“成功”。在步骤290中,APU程序读取锁行状态以明确PUTLLC命令是完成还是未完成。在步骤295中,如果PUTLLC命令失败,则从步骤205开始重新执行整个序列,并发出另一个GETLLAR命令。然而,如果PUTLLC命令成功,则在步骤297结束附图2的原子更新序列。
现在转向附图3,说明的是发出PUTLLU命令的方法300。一般说来,PUTLLU命令用于释放前面由附图2的原子更新序列取得的软件锁。
在步骤305中,APU 110向DMA队列发出一个PUTTLU命令。在步骤310中,DMA引擎115处理PUTTLU命令,并且请求向原子高速缓存137写入128字节。在步骤315中,原子高速缓存137读取其目录以确定在原子高速缓存137中是否存在该行并且是否处于互斥状态。在步骤320中,原子高速缓存137确定在与其相连的原子高速缓存137中是否存在该高速缓存行,并且是否处于互斥状态。
如果在相关的原子高速缓存137中该高速缓存行存在但不处于互斥状态,则原子高速缓存137在步骤330中向BIC 150请求得到互斥访问的数据。虽然可以使用“修改、互斥、共享和无效”(MESI)高速缓存控制协议,但其它形式的高速缓存控制协议也在本发明的范围内。一旦在相关的原子高速缓存137中存在该高速缓存行且互斥,则在步骤338中原子装置130命令DMA引擎115开始从本地存储器105传输数据到原子高速缓存137。一般说来,在原子高速缓存137中进行原子数据传输使得从原子高速缓存137经数据总线到本地存储器105的数据处理要比在本地存储器105与系统/共享存储器170之间进行的数据处理快得多。
可以理解,本发明可以具有多种形式和实施例。因此,对上述说明可以做出一些不违反本发明精神或范围的变化。这里描述出来的能力适宜于各式各样的程序设计模型。不能把此处所给出的内容理解为偏重任何特定的程序设计模型,相反应当理解为是能够在其上建立多种程序设计模型的基础机制。
在引用一些优选实施例说明本发明之后,应该注意到所用到的优选实施例是例证性的而不是本质上局限于此,而且可以期待对前面的描述做出范围宽广的变化、修改、改造和替换,在某些情况下,本发明的某些特性不需用到其它特性就能使用。对本领域技术人员来说,在评议了前面对本发明优选实施例所做的说明之后,许多变化和修改都是明显的和希望的。因此,应当广义地、与本发明的范围一致地理解所附权利要求。
权利要求
1.一种用于提供原子更新原语的方法,其在具有配备DMA的共享存储器的非对称单芯片异构多处理器计算机系统中使用,包括通过该系统产生至少一个锁行命令,该命令选自包括带保留取锁行命令、条件放锁行命令和无条件放锁行命令的集合。
2.一种非对称单芯片异构多处理器计算机系统,包括所连接的处理器单元,被构造成产生带保留取锁行命令、条件放锁行命令和无条件放锁行命令中的一个;以及连接到APU的直接存储器存取(DMA)控制器,DMA引擎能够用来接收带保留取锁行命令、条件放锁行命令和无条件放锁行命令中的一个。
3.根据权利要求2的系统,进一步包括连接到APU的本地存储器。
4.根据权利要求2的系统,进一步包括能够被带保留取锁行命令使用的保留表。
5.根据权利要求3的系统,进一步包括连接到DMA引擎的高速缓存窥探总线。
6.根据权利要求2的系统,进一步包括连接到APU的DMA队列。
7.根据权利要求6的系统,进一步包括连接在APU与DMA队列之间的通道。
8.根据权利要求2的系统,进一步包括连接到DMA引擎的保留站。
9.根据权利要求8的系统,进一步包括连接到保留站的原子高速缓存。
10.一种用于异步处理环境中的同步的方法,包括产生带保留取锁行命令;转送该命令给DMA引擎;以及如DMA引擎所命令的由保留站产生保留。
11.根据权利要求10的方法,进一步包括产生条件放锁行命令的步骤。
12.根据权利要求10的方法,进一步包括产生无条件放锁行命令的步骤。
13.根据权利要求11的方法,其中条件放锁行命令写数据到原子高速缓存。
14.根据权利要求13的方法,其中无条件放锁行命令进一步用来释放软件锁。
15.根据权利要求10的方法,进一步包括用来自条件放锁行命令的信息更新DMA队列。
16.根据权利要求14的方法,进一步包括执行高速缓存窥探。
17.根据权利要求11的方法,进一步包括作为保留的功能,由DMA引擎从共享存储器传送信息到本地存储器。
18.根据权利要求10的方法,进一步包括检测保留丢失信号。
19.根据权利要求10的方法,进一步包括检测保留状态,其中保留状态为丢失。
20.根据权利要求10的方法,进一步包括检测保留状态,其中保留状态为完整。
21.根据权利要求10的方法,进一步包括释放保留状态。
22.一种用于经过通道从所连接的处理器单元向DMA队列传送命令的方法,包括从包括带保留取锁行命令、条件放锁行命令和无条件放锁行命令的组中选择一命令;以及写该命令到DMA队列。
23.根据权利要求22的方法,进一步包括用无条件放锁行命令写数据到原子高速缓存。
24.根据权利要求22的方法,进一步包括把带保留取锁行命令放入DMA队列。
25.一种用于异步处理环境中的同步的计算机程序产品,该计算机程序包括用于生成带保留取锁行命令的计算机代码;用于传送该命令给DMA引擎的计算机代码;以及用于如DMA引擎所命令的由保留站产生保留的计算机代码。
26.一种用于异步处理环境中的同步的处理器,该处理器包括用于生成带保留取锁行命令的装置;用于传送该命令给DMA引擎的装置;以及用于如DMA引擎所命令的由保留站产生保留的装置。
全文摘要
本发明为具有带DMA的共享存储器的非同步异构单芯片多处理器计算机系统提供原子更新原语。根据包括带保留取锁行命令、条件放锁行命令和无条件放锁行命令的集合产生至少一个锁行命令。
文档编号G06F12/08GK1573715SQ20041004478
公开日2005年2月2日 申请日期2004年5月18日 优先权日2003年5月22日
发明者迈克尔·N·戴, 查尔斯·R·约翰斯, 詹姆斯·A·卡勒, 刘培军, 张光赏 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1