高速缓存相干协议的推测分布式冲突解决的制作方法

文档序号:6375071阅读:244来源:国知局
专利名称:高速缓存相干协议的推测分布式冲突解决的制作方法
相关申请本美国专利申请涉及以下同时提交的美国专利申请(1)申请号10/XXXXXX(备案号P13983),2002年提交,标题为“用于多节点系统中的高速缓存相干的转发状态”;(2)申请号10/XXXXXX(备案号P13984),2002年提交,标题为“用于多处理器系统中高速缓存相干的分级目录”;(3)申请号10/XXXXXX(备案号P13985),2002年提交,标题为“多处理器系统中高速缓存分级结构的分级虚拟模型”;(4)申请号10/XXXXXX(备案号P13986),2002年提交,标题为“用于高速缓存相干协议的非推测分布式冲突解决”。
领域本发明涉及高速缓冲存储器。更具体来说,本发明涉及多高速缓存多处理器系统中的分布式冲突解决。
背景当电子系统包括多个高速缓冲存储器时,必须保持可供使用的数据的有效性。这通常通过根据高速缓存相干协议处理数据来实现。随着高速缓存和/或处理器数量的增加,保持高速缓存相干性的复杂度也增加。
当多个组件(例如高速缓冲存储器、处理器)请求相同数据块时,多个组件之间的冲突必须以保持数据有效性的方式来解决。当前的高速缓存相干协议通常具有负责冲突解决的单个组件。但是,随着系统的复杂度增加,对用于冲突解决的单一组件的依赖性会降低整体系统性能。


图1a到1e提供多节点系统中的冲突状况的概念说明。节点110、120和130是对等节点,它们可在高速缓冲存储器中存储所请求数据(例如高速缓存行)的副本。归属节点140为所请求数据的归属(H)节点。在图1a到1e的实例中,对等节点110和120存储所请求数据的无效副本或者没有存储副本,对等节点130存储没有回写到存储器的所请求数据的已修改副本。归属节点在存储器中存储数据的原始副本或者在修改回写到存储器时存储数据的已修改版本。
如图1a所示,对等节点120发送“数据请求”消息以请求数据块、例如高速缓存行的副本。“数据请求”消息被发送到对等节点110和对等节点130。但是,送往对等节点130的“数据请求”消息被延迟。延迟可能例如由于缺乏可用带宽、缓冲考虑等而引起。
对等节点110以“无有效副本”消息来响应来自对等节点120的“数据请求”消息,它向对等节点120表明,对等节点110没有所请求数据的有效副本。在对等节点120发送“数据请求”消息之后的某个时间,对等节点110向对等节点120和130发送“数据请求”消息,如图1c所示,请求与对等节点120所请求的数据相同的数据。
对等节点120响应“数据请求”消息而向对等节点110提供“无有效副本”消息。对等节点130向对等节点110提供所请求数据。由对等节点130保持的数据副本(如果有的话)被标记为无效,以及由对等节点110存储的数据副本被标记为“已修改”。
在对等节点130已经响应来自对等节点110的“数据请求”并使数据副本无效之后的某个时间,对等节点130接收来自对等节点120的延迟“数据请求”消息,如图1c所示。响应“数据请求”消息,对等节点130向对等节点120提供“无有效副本”消息。注意,由对等节点130存储的数据的状态从原始“数据请求”消息的时间改变为对等节点130响应“数据请求”消息的时间。
由于对等节点110和130以“无有效副本”消息响应来自对等节点120的“数据请求”消息,因此对等节点120在发现没有所请求数据的有效高速缓存副本时向归属节点140请求数据副本。这样,如图1d所示,对等节点向归属节点140发送“读取”消息。归属节点140从存储器检索所请求数据,并向对等节点120提供该数据。对等节点120则以“独占”状态存储所请求数据。
如图1e所示,图1a到1e所示的消息序列得到数据行的两个不兼容副本。在所提供的实例中,对等节点110以“已修改”状态存储数据副本,对等节点120以“独占”状态存储数据副本。但是,由对等节点120存储的副本不是对等节点120专有的。这样,多节点系统在某些情况下可能产生数据的不兼容副本,除非提供一种机制来解决高速缓存冲突。
附图概述在附图中通过举例而不是限制的方式对本发明进行说明,附图中,同样的参考标号表示类似的元件。
图1a到1e提供多节点系统中的冲突状况的概念说明。
图2a到2d提供共享行冲突的概念说明。
图3a到3d提供由接近同时发出的请求所引起的共享行冲突的概念说明。
图4a到4d提供由多个请求中一个的延迟所引起的共享行冲突的概念说明。
图5a到5d提供无效行冲突的概念说明。
图6a到6d提供由多个请求中一个的延迟所引起的无效行冲突的概念说明。
图7是节点的一个实施例的框图。
图8是多处理器系统的一个实施例。
详细说明描述多节点系统中分布式高速缓存相干性冲突解决的技术。为了便于说明,以下说明中提出了大量具体细节,以便透彻地理解本发明。然而,本领域的技术人员十分清楚,即使没有这些具体细节,也可以实施本发明。另一方面,结构和装置以框图形式来表示,以免使本发明含糊不清。
请求消息以下消息是来自请求节点的对数据/动作的请求。这些消息对系统的所有节点广播。
“端口读取行”(PRL)这是对数据段、例如高速缓存行的副本的请求。
“端口读取无效行”(PRIL)这是在提供方节点的数据副本无效的情况下对数据段的副本的请求。这个消息也可称作“对所有权的请求”。
“端口写入行”(PWL)这个消息使数据(例如已修改高速缓存行)被写入存储器。这个消息也可称作“脏驱逐”。
“端口无效行”(PIL)这个消息使指定数据的状态从“共享”改变为“独占”。
“端口写入无效行”(PWIL)这个消息使数据被写入存储器,以及使数据的目标副本无效。
响应消息以下消息是响应上述请求而从对等(即非归属)节点发送到请求节点的消息。
“无效状态确认”(IACK)这个消息是当发送响应的节点具有所请求数据的无效副本或者没有所请求数据的副本时对请求(PRL、PRIL、PWL、PIL、PWIL)的响应。
“共享状态确认”(SACK)这个消息是当发送响应的节点具有处于“共享”状态的所请求数据的副本时对请求的响应。
“所接收数据的确认”(DACK)这个消息由请求节点发送到请求节点从其接收了数据的节点。它是在请求节点已经向归属节点发送READ或CNCL消息并接收到来自归属节点的XFR/XFRI消息或ACK消息之后发送的。
“冲突”这个消息表明对于所请求的高速缓存行存在共同未决的请求。
到归属节点的消息这些消息由对等节点发送到归属节点。
“读取(冲突)”这个消息向归属节点请求数据并列出冲突(如果有的话)。在所有响应由对等节点接收到之后,如果没有所接收消息是DATA(数据)消息,则发送这个消息。
“CNCL(冲突)”这个消息响应对等节点中的命中而发送到归属节点并列出冲突(如果有的话)。这个消息取消归属节点的预取操作。在所有响应由对等节点接收到并且其中之一为DATA消息之后,发送这个消息。
“数据”这个消息用来回写PWL和PWIL请求的数据。
来自归属节点的消息这些消息从归属节点发送到对等和/或请求节点。
“数据”这个消息包括所请求数据,并且可表明要由请求节点使用的数据的状态(M/E/F/S)。
“传输”(XFR)这个消息使接收节点向消息中指明的节点传输数据。当通知归属节点关于要求数据的当前拥有者将该数据传输给目标节点的冲突状况时,归属节点把这个消息发送给所请求数据的当前拥有者。如果归属节点确定未解决冲突请求是PRIL消息,则发送XFRI消息以取代XFR消息,这意味着当前拥有者必须在发起数据传输时使该行无效。在一个实施例中,在某个时期发送CNCL消息的第一节点是当前拥有者。时期是数据的第一请求与该数据的所有请求的解决之间的时段。如果归属节点从存储器向节点发送数据,则那个节点是当前拥有者。发送XFR/XFRI消息使目标节点变为当前拥有者。在一个实施例中,目标节点从在READ或CNCL消息中提供给归属节点的冲突列表中选取。
“确认”(ACK)这个消息表明所请求数据已经发送到请求节点。当归属节点发送ACK消息时,当前时期终止。
“等待”这个消息使接收节点在发送其它消息之前暂停。
MESIF协议概述有两种基本方案用于提供高速缓存相干性,即窥探(现在常常称作对称多处理SMP)和目录(常常称作分布式共享存储器DSM)。基本差异必须处理对元信息、即关于存储高速缓存行副本的位置的信息的安置和存取。
为了窥探高速缓存,该信息与高速缓存副本本身一起分布,即,高速缓存行的每个有效副本由每当任何节点以新方式请求存取高速缓存行的许可时必须认识到其责任的单元来保存。在某处--通常在固定位置--是信息库,数据在没有被高速缓存时被存储在其中。即使当行被高速缓存时,这个位置也可包含有效副本。但是,这个节点的位置一般是请求节点未知的--请求节点只广播被请求高速缓存行的地址以及所需的许可,可能具有副本的所有节点必须响应以确保一致性被保持,其中在没有其它(对等)节点响应时,包含未高速缓存副本的节点响应。
对于基于目录的方案,除了存储未高速缓存数据的固定位置之外,还有固定位置、目录,表明高速缓存副本所在的位置。为了以新的方式存取高速缓存行,节点必须与包含目录的、通常是包含未缓存数据信息库的同一节点的节点进行通信,从而允许响应节点在主存储副本有效时提供数据。这样一种节点称作归属节点。
目录可以两种方式分布。第一,主存储数据(未高速缓存信息库)常常在节点之间分布,而目录以同样方式分布。第二,元信息本身可以是分布式的,在归属节点保存如行是否被高速缓存以及若被高速缓存、则单一副本所在位置等的极少信息。例如,SCI采用这种方案,其中包含高速缓存副本的各节点保持到其它具有高速缓存副本的节点的链接,从而共同保持完整的目录。
窥探方案依靠广播,因为没有保存元信息的单一位置,因此每个查询必须通知所有节点,每个节点负责自己的任务以确保相干性被保持。这包括干预消息,通知归属节点在另一个节点提供数据时不进行响应。
窥探方案的优点在于,响应可以是直接迅速的,但没有很好地缩放,因为要求所有节点观察所有查询。目录方案固有地是更为可缩放的,但要求更复杂的响应,常常涉及三个节点的点到点通信。
本文所述的基本MESIF协议提供一种没有单一串行化总线的限制的窥探协议。与窥探高速缓存协议相似,MESIF依靠具有数据的高速缓存副本的节点来保持相干性。点到点链路而不是同步集中广播的使用引入时间异常的问题--事件从不同节点的角度看来好像以不同顺序出现的事实。MESIF协议正确地处理时间异常,识别可能的错误何时可能产生,并保证它们被正确处理。归属节点的概念主要是确定未高速缓存副本所在位置,但归属节点参与每个事务处理--而没有在关键路径上-以便解决冲突和时间异常问题。由于该方案的同时广播性质,MESIF实现与窥探协议关联的低等待时间,在大部分情况下,以最小可能的等待时间单个往返请求-响应,获取数据的可高速缓存副本。
基本MESIF协议包含向所有对等节点以及归属节点广播初始请求。如果副本以状态E、F或M被高速缓存,则它包含在响应中。然后,第二消息被发送给归属节点,通知它满足该请求。如果所请求行未高速缓存,或者如果只存在S状态副本,则发送到归属节点的第二请求用来确认这时归属节点可能已经从其存储器中取出的前一个请求。在任一情况下,为了同步和冲突解决,归属节点必须响应第二请求(以及响应第一请求,但它们有时可以结合)。注意,归属节点可具有一个或多个高速缓存,因此它可响应初始请求,就象其它任何节点那样。
冲突以分布方式来处理。时间异常问题使得难以检测冲突,因为各个请求可能被延迟任意长的时间。但是,如果每个节点在进行请求之后监测冲突,则会检测到冲突。两个节点可以或可以不检测冲突,但至少一个会检测。由于所有节点必须通过提供数据或表明它们没有副本(或者在某些情况下不提供它们所具有的副本)来响应广播请求,因此响应可包含冲突的指示,所以冲突节点将检测该冲突。
复杂化起因于允许节点在数据到达时立即使用该数据而不是等待所有响应。因此,接收数据副本的节点被允许在接收时立即内部使用该数据,但在节点接收到来自归属的确认之前,不得让使用该数据的效果为系统的其余部分可见。确认也可包含节点必须将其副本转发给另一个节点的指令,也许将该节点驱逐出其自身的高速缓存。
最后,当节点通过提供高速缓存数据响应来自另一个节点的请求时,节点必须推迟它接收的对于相同高速缓存行的其它所有请求,直到节点接收到来自归属节点的响应,确认节点转发了该数据的事实,从而确保所有节点观察到(可能可写的)高速缓存行的传输的相同顺序。
归属节点是未高速缓存数据的信息库,但归属节点也可具有产生请求的处理器,并包括一个或多个高速缓存。与其它任何节点相似,当归属节点处理器失效时,归属节点必须向所有其它(对等)节点广播请求,以及归属节点必须内部处理该请求,好像对到达归属节点的其它任何请求那样。注意,这是一种特例,因为归属节点没有明确地向其本身(归属节点)发送消息。另外,当对于本地高速缓存的数据的外部请求到达时,归属节点必须以某种方式进行响应,以便确保来自归属节点的随后响应不会产生歧义。也就是说,归属节点可通过提供数据来响应初始请求,但归属节点还必须作为归属节点响应第二请求。
对于如本文所述的适合使用的MESIF协议的各种实施例的更详细的基于伪代码的描述作为附录A加入本文。
推测分布式冲突解决的概述一般来说,高速缓存相干协议要求冲突解决,以便按顺序提供各种高速缓存行或其它数据块的状态改变。本文所述的冲突解决技术提供连续一致性,这意味着在任何时候只有高速缓存行的单个可修改副本可以存在,以及没有高速缓存行的副本可在其它副本为可读时被修改。因此,修改高速缓存行的副本的冲突请求必须被解决,以便保持连续一致性。
在一个实施例中,冲突采用时间属性来解决。也就是说,不考虑延迟,两个节点都无法在另一个之前请求高速缓存行。因此,如果每个节点在那个节点已经进行其自身的请求之后监测所有请求,则冲突可被冲突请求方中至少一个检测到。
在一个实施例中,如果行处于“独占”(E)、“已修改”(M)或“转发”(F)状态,则冲突在保存唯一副本的节点上解决。冲突解决的胜方以及可能还有败方向归属节点报告冲突,归属节点使冲突报告成对,并发出转发指令,以便确保所有请求节点最终接收到所请求数据。在一个实施例中,如果被请求高速缓存行是未高速缓存的或者仅存在于“共享”(S)状态中,则所请求高速缓存行的归属节点提供所请求数据的副本并解决冲突。
在一个实施例中,本文所述的分布式冲突解决是称作MESIF协议的高速缓存协议的组成部分,其中,五种状态之一与高速缓存行的高速缓存副本关联(已修改、独占、共享、无效、转发)。在一个实施例中,在已经从归属节点接收到确认消息之前的请求的所有响应之后的封锁期间允许所有冲突节点认识到这些节点所涉及的冲突。封锁期间不限制高速缓存中的数据的使用,但却防止数据被传播到其它高速缓存。
以下论述依照多节点系统中的节点来提供。在一个实施例中,节点包括具有内部高速缓冲存储器的处理器、外部高速缓冲存储器和/或外部存储器。在一个备选实施例中,节点是与其它电子系统互连的电子系统(例如计算机系统、移动装置)。也可使用其它类型的节点配置。在以下实例中,虚线表示先前发送的消息,以及实线表示正被描述的消息。为了使附图更为清楚,当一组消息(例如PRIL和相应IACK)被解决时,表示消息的线条不再包含在附图中。
图2a到2d提供共享行冲突的概念说明。在图2a到2d的实例中,对等节点210和220都请求某个数据块(例如高速缓存行)的副本。对等节点230以M状态存储所请求数据块的可用副本。如果对等节点230以S状态或F状态存储所请求数据,则所述处理也适用。
为了提供冲突的一个实例,与图2a到2d的各种消息关联的编号(例如1.PRIL、7.IACK)提供近似排序。不需要图2a到2d中所示的准确定时关系以及所提供的其它实例(即图3a-3d、4a-4d、5a-5d、6a-6d)。
如图2a所示,对等节点210通过向对等节点220和230以及向归属节点240发送PRIL消息来请求数据块。对等节点210还可利用PRL消息来请求同样的数据块,在这种情况下,对等节点230不会响应请求消息而使其副本无效。对等节点220以IACK消息响应PRIL消息,表明对等节点220没有存储所请求数据块的有效副本。
归属节点240用作要被请求的数据的归属节点,这意味着,节点240与非高速缓冲存储器(例如主存储器)关联,其中,要被请求的数据在没有被高速缓存时被存储。例如,归属节点240可以是处理器、高速缓冲存储器和随机存取存储器(RAM),其中,RAM提供数据的非高速缓冲存储位置。
图2b说明向对等节点210和230以及向归属节点240发送PRIL消息来请求先前由对等节点210所请求的数据块的对等节点220。如上所述,也可采用PRL消息来请求数据。虽然图2a到2d的冲突采用PRIL消息来说明,但不一致结果可能在其中出现的请求消息的任何组合导致冲突。
与对等节点220发送PRIL消息大致同时,对等节点230通过向对等节点210发送“DataM”消息来响应来自对等节点210的PRIL消息。DataM消息向对等节点210提供所请求数据的副本,并使对等节点210以“已修改”(M)状态来存储该数据。其它状态可以被指定,例如转发(F)状态。由对等节点230存储的所请求数据的副本的状态从M状态改变为“无效”(I)状态。
如图2c所示,响应从对等节点230接收到DataM消息,对等节点210向归属节点240发送CNCL()消息。如果检索已经开始,则CNCL()消息取消从存储器中的所请求数据块的检索。归属节点240以ACK消息响应对等节点210,确认接收到CNCL()消息,它表明来自对等节点210的PRIL消息的处理的完成。
响应接收到来自归属节点240的ACK消息,对等节点210向对等节点230发送DACK消息,确认接收到来自对等节点230的所请求数据。从对等节点230的数据接收与向对等节点230的DACK消息发送之间的周期为封锁周期,在此期间数据块没有被发送到另一个节点。在封锁周期中,对等节点210不响应来自对等节点220的PRIL消息。同样,对等节点230在封锁周期中不响应来自对等节点220的PRIL消息。
如图2d所示,对等节点210向对等节点220发送DataM消息,以便向对等节点220提供所请求数据的副本,以及使对等节点220以M状态存储数据副本。其它类型的消息(例如DataF、DataS)可用于向对等节点220提供所请求数据。对等节点210还把所保留的数据副本(如果有的话)标记为处于I状态,因为DataM消息响应PRIL消息。所保留的请求数据的副本不会由于例如PRL消息而无效。对等节点220还向归属节点240发送CNCL()消息,以便取消从非高速缓冲存储器中对所请求数据的任何检索。归属节点240以WAIT消息进行响应,它使对等节点220在发送其它消息之前暂停。
在所述过程中的某个时间,对等节点230和代理290响应请求这时没有由对等节点230存储或者没有以I状态存储的数据块的PRIL消息而向对等节点220发送IACK消息。对等节点220通过向对等节点210发送DACK消息响应来自对等节点210的DataM消息。DACK消息断定来自对等节点210和220的冲突PRIL消息的解决。
图3a到3d提供由接近同时发出的请求(平局状况)所引起的共享行冲突的概念说明。如图3a所示,对等节点210向对等节点220和230以及向归属节点240发送PRIL消息,请求数据块。某个短时段之后,或者甚至同时,对等节点220向对等节点210和230以及向归属节点240发送PRIL消息,请求相同的数据块。
响应在接收所请求数据之前接收到来自另一个对等节点的PRIL消息,对等节点210向作为冲突PRIL消息的源的对等节点220发送CONFLICT消息。CONFLICT消息把请求冲突的存在从标识冲突的对等节点传递到冲突中涉及的一个或多个其它对等节点。同样,对等节点220响应在接收所请求数据之前接收PRIL消息而向对等节点210发送CONFLICT消息。图3b说明对等节点210与220之间的CONFLICT消息的传送。
如图3c所示,对等节点230以DataM消息向对等节点210提供所请求数据,并把所保留的数据副本(如果有的话)标记为I状态。对等节点210接收所请求数据,并将它以M状态存储。对等节点210则向归属节点240发送CNCL(220)消息。CNCL(220)消息使归属节点240取消从存储器对所请求数据的检索,并向归属节点240表明,在发送节点(即对等节点210)与对等节点220之间存在冲突。
响应CNCL(220)消息,归属节点240向对等节点210发送XFER(220)消息。XFER(220)消息使对等节点210向对等节点220转发该数据的副本。在一个实施例中,对等节点210在向对等节点220发送数据副本之前使用和/或修改所请求数据块。在一个备选实施例中,对等节点210立即向对等节点220发送数据副本。响应接收到来自归属节点240的XFER(220)消息,对等节点210向对等节点230发送DACK消息,确认对所请求数据的接收。
如图3d所示,响应接收到来自对等节点210的DACK消息,对等节点230向对等节点220发送IACK消息,表明对等节点230没有存储所请求数据的有效副本。对等节点230不响应第二PRIL消息(即来自对等节点220的PRIL消息),直到第一PRIL消息(即来自对等节点210的PRIL消息)被解决。响应来自归属节点240的XFER(220)消息,对等节点210以DataM消息向对等节点220发送所请求数据的副本。对等节点210把保留数据的任何副本标记为I状态,以及对等节点220以M状态存储所接收数据的副本。
对等节点220向归属节点240发送READ(210)消息,以便停止从存储器对所请求数据的检索,以及表明对等节点220已经检测到与对等节点210的冲突。归属节点240以发送给对等节点220的WAIT消息响应READ(210)消息。WAIT消息使对等节点220在传送任何后续消息之前暂停预定时段。对等节点220向对等节点210发送DACK消息,以表明对所请求数据的接收。
图4a到4d提供由多个请求中一个的延迟所引起的共享行冲突的概念说明。如图4a所示,对等节点220向对等节点210和230以及向归属节点240发送PRIL消息,请求数据块。送往对等节点230的PRIL消息被延迟。延迟可能是因为例如系统等待时间、信息包损坏或其它任何原因。对等节点210以IACK消息响应PRIL消息,表明对等节点210没有存储所请求数据的有效副本。
如图4b所示,对等节点210向对等节点220和230以及向归属节点240发送PRIL消息,请求相同的数据块。来自对等节点220的延迟PRIL消息由对等节点230在来自对等节点210的PRIL消息的同时或之后接收。对等节点230以DataM消息响应来自对等节点210的PRIL消息,它向对等节点210提供所请求数据的副本,并使对等节点210以M状态来存储该数据。对等节点230把所请求数据的保留副本(如果有的话)标记为I状态。对等节点220以CONFLICT消息响应来自对等节点210的PRIL消息,向对等节点210表明,对等节点220已经检测到两个节点的请求之间的冲突。
如图4c所示,对等节点210向归属节点240发送CNCL(220)消息,以便取消从存储器对所请求数据的检索。CNCL(220)消息还向归属节点240表明,在对等节点210与对等节点220之间存在冲突。归属节点240以XFER(220)消息来响应CNCL(220)消息,它使对等节点210向对等节点220发送所请求数据的副本。在一个实施例中,对等节点210在向对等节点220发送数据副本之前使用和/或修改所请求数据块。在一个备选实施例中,对等节点210立即向对等节点220发送数据副本。
对等节点210向对等节点230发送DACK消息,以确认对所请求数据的接收。对等节点210还向对等节点220发送DataM消息,以便提供所请求数据的副本。对等节点220以M状态存储所请求数据,而对等节点210则把所请求数据的任何剩余副本标记为I状态。
如图4d所示,对等节点230响应接收到来自对等节点210的DACK消息,向对等节点220发送IACK消息。IACK消息表明对等节点230没有存储所请求数据的有效副本。对等节点220向归属节点240发送READ(210)消息。READ(210)消息取消从存储器对所请求数据的检索,并向归属节点240表明,对等节点220与对等节点210有冲突。
归属节点240以WAIT消息来响应READ(210)消息,它使对等节点220在发送任何后续消息之前暂停预定时段。对等节点220以DACK消息响应来自对等节点210的DataM消息,它确认对于来自对等节点210的所请求数据的接收。
图5a到5d提供无效行冲突的概念说明。如图5a所示,对等节点210向对等节点220和230以及向归属节点240发送PRIL消息,请求数据块。如图5b所示,在来自对等节点210的PRIL消息的同时或稍后,对等节点220向对等节点210和230以及向归属节点240发送PRIL消息,请求相同的数据。
如图5c所示,对等节点230以IACK消息响应来自对等节点210的PRIL消息,表明对等节点230没有存储所请求数据的有效副本。同样,对等节点230以IACK消息响应来自对等节点220的PRIL消息。对等节点220以CONFLICT消息响应来自对等节点210的PRIL消息,以便传递对等节点210与220之间的冲突的标识。同样,对等节点210以CONFLICT消息响应来自对等节点220的PRIL消息。
如图5d所示,对等节点210向归属节点240发送READ(220)消息。READ(220)消息读取来自已经从存储器检索了所请求数据的归属节点240的先前所请求数据。归属节点240以Data,XFER(220)消息向对等节点210提供所请求数据。在一个实施例中,归属节点240把来自两种消息(即Data和XFER)的信息包含到单个消息包中。这种“搭载”技术可降低解决冲突所需的带宽。
“Data,XFER(220)”消息向对等节点210提供所请求数据,并且还使对等节点210把所请求数据传送给对等节点220。当对等节点210接收到所请求数据时,所请求数据以M状态被存储。
在接收所请求数据之后,对等节点210以DataM消息向对等节点220发送所请求数据的副本。对等节点210所保留的所请求数据的任何副本被标记为I状态。对等节点220以M状态存储所请求数据,并以DACK消息向对等节点210确认对所请求数据的接收。
图6a到6d提供由多个请求中一个的延迟所引起的无效行冲突的概念说明。如图6a所示,对等节点220向对等节点210和230以及向归属节点240发送PRIL消息,请求数据块。送往对等节点230的PRIL消息被延迟。延迟可能是因为例如系统等待时间、信息包损坏或其它任何原因。对等节点210以IACK消息响应PRIL消息,表明对等节点210没有存储所请求数据的有效副本。
如图6b所示,对等节点210向对等节点220和230以及向归属节点240发送PRIL消息,请求相同的数据块。来自对等节点220的延迟PRIL消息由对等节点230在来自对等节点210的PRIL消息的同时或之后接收。对等节点220以CONFLICT消息响应来自对等节点210的PRIL消息,向对等节点210表明,对等节点220已经检测到两个节点的请求之间的冲突。
如图6c所示,对等节点230以IACK消息响应来自对等节点210的PRIL消息,表明对等节点230没有存储对等节点210所请求的数据的有效副本。同样,对等节点230以IACK消息响应来自对等节点220的PRIL消息,表明对等节点230没有存储对等节点220所请求的数据的有效副本。
如图6d所示,对等节点210向归属节点240发送READ(220)消息。READ(220)消息读取来自已经从存储器检索所请求数据的归属节点240的先前所请求数据。归属节点240以Data,XFER(220)消息向对等节点210提供所请求数据。
在接收所请求数据之后,对等节点210以DataM消息向对等节点220发送所请求数据的副本。对等节点210所保留的所请求数据的任何副本被标记为I状态。对等节点220以M状态存储所请求数据,并以DACK消息向对等节点210确认所请求数据的接收。
支持推测分布式冲突解决的示例系统图7是节点的一个实施例的框图。节点700表示为具有单处理器、高速缓冲存储器、存储控制器以及存储器;但是,这些组件的任一个的任何数量均可包含在一个节点中。此外,附加和/或不同组件(例如总线桥)也可包含在节点中。
处理器710可以是本领域已知的任何类型的处理器。在一个实施例中,处理器710包括高速缓冲存储器720。在备选实施例中,高速缓冲存储器720是处理器710外部的,或者可包括处理器710内部或外部的附加高速缓冲存储器。
存储控制器730与高速缓冲存储器720和存储器740耦合。存储控制器730用作高速缓冲存储器720与存储器740之间的接口。在一个实施例中,存储控制器730根据本文所述的高速缓存相干协议来保持高速缓存相关性。存储控制器730经由节点链路750与其它节点交互。在一个备选实施例中,处理器710与存储控制器730交互,以便保持高速缓存相干性,如本文所述,以及处理器710经由备选节点链路755与其它节点交互。
在一个实施例中,节点链路750包括节点700与其交互的各节点的专用接口。在一个备选实施例中,节点链路750包括多个接口,其数量不同于节点700与其交互的节点的数量。在一个实施例中,节点700与表示多个节点的一个或多个代理交互。
图8是多处理器系统的一个实施例。多处理器系统800用于表示具有多个处理器的一系列系统,例如计算机系统、实时监测系统等。其它多处理器系统可包括更多、更少和/或不同的组件。在某些情况下,本文所述的高速缓存管理技术可应用于单处理器和多处理器系统。多处理器系统800可配置成作为多节点系统来工作。
多处理器系统800包括总线系统810或传递信息的其它通信装置。总线系统810可包括任何数量的总线及相关互连电路、例如总线桥。处理器820与总线系统810耦合以处理信息。处理器820可包括例如零级(L0)高速缓冲存储器等高速缓冲存储器822和高速缓存控制器824。在一个实施例中,处理器820还与可以是任何类型的高速缓冲存储器的高速缓存825耦合。在一个备选实施例中,高速缓存825可与总线系统810耦合。也可使用其它类型的处理器-高速缓存配置。
在一个实施例中,高速缓存控制器824经由可以是例如处理器820内部的总线的高速缓冲存储器接口828与高速缓冲存储器822耦合。高速缓存控制器经由提供处理器820与外部高速缓冲存储器之间接口的高速缓存接口826与高速缓冲存储器825耦合。
多处理器系统800还包括具有高速缓冲存储器832和高速缓存控制器834的处理器830。高速缓存控制器834经由高速缓存接口838与高速缓冲存储器832耦合。同样,高速缓存控制器834经由高速缓存接口836与高速缓冲存储器835耦合。在一个实施例中,高速缓冲存储器835与处理器830耦合。
虽然多处理器系统800表示为具有两个处理器,但多处理器系统800可包括任何数量的处理器和/或协处理器。多处理器系统800还包括与总线系统810耦合的存储系统840。存储系统840可包括动态(例如随机存取存储器)和静态(例如只读存储器、CD-ROM、盘存储装置、闪存)存储装置的任何组合及适当的相关驱动器。存储系统840的存储装置用来存储由多处理器系统800的处理器执行的信息和指令。存储系统840还可用于在处理器执行指令的过程中存储临时变量或其它中间信息。
指令可从诸如磁盘、只读存储器(ROM)集成电路、CD-ROM、DVD等静态或远程存储装置经由有线或无线远程连接等提供给存储系统840。在备选实施例中,硬布线电路可用来代替软件指令或与其结合。因此,指令序列的执行不限于硬件电路和软件指令的任何特定组合。
多处理器系统800还包括网络接口850,以便提供对网络、如局域网和/或因特网的接入。网络接口850可提供无线和/或有线网络接口,它可包括与远程电可存取媒体之间的指令传递。电可存取媒体包括以电子装置(例如计算机、个人数字助理、蜂窝电话)可读形式提供(即存储和/或传送)内容(例如计算机可执行指令)的任何机构。
例如,机器可存取媒体包括只读存储器(ROM);随机存取存储器(RAM);磁盘存储媒体;光存储媒体;闪存装置;电、光、声或其它形式的传播信号(例如载波、红外信号、数字信号)。
多处理器系统800还可包括显示装置860、如阴极射线管(CRT)或液晶显示器(LCD),以便显示信息。包括例如具有字母数字键及其它键的键盘在内的输入装置870通常耦合到总线810,以便向处理器820和/或830传递信息和命令选择。另一种用户输入装置是光标控制装置,如鼠标、轨迹球或光标方向键,以便向处理器820和830传递方向信息和命令选择,以及控制显示装置860上的光标运动。
说明中提到“一个实施例”或“实施例”表示结合这些实施例所述的特定特征、结构或特性包含在本发明的至少一个实施例中。词组“在一个实施例中”在本说明的各个位置中的出现不一定都表示同一个实施例。
在以上说明中,参照特定实施例对本发明进行了说明。但是,显然可对其进行各种修改及变更,而没有背离本发明的广义精神和范围。因此,说明书和附图应看作是说明性的而不是限制性的。
附录A以下是以伪代码格式对MESIF算法的示例描述。描述是基于信息包的;即,每个例程响应入局或出局信息包而执行。或者,算法可描述为对于因信息包被接收或产生而引起的状态改变的反应。
为了简化描述,进行下列假设1.每个对等/请求节点具有单个高速缓存代理;2.归属节点没有高速缓存代理;以及3.归属节点中存储器请求所用的算法可能比所表示的更为复杂,并处理MESIF引起的所有角落情况(不止一次读取、多个时期、写入转发等)。
具有高速缓存代理的归属节点的情况(在部分实施例中可能出现)由给定算法得出,即通过以下方式进行通过使涉及由本地高速缓存代理(或代理人)进行的与归属节点之间的传输的例程内在化,来结合所接收信息包的例程。
在一个实施例中,高速缓存服从以下约束1.高速缓存只在行处于I状态时才产生PRL。
2.高速缓存只在行处于I或S状态时才产生PRIL。
3.高速缓存只在行处于M状态时才产生PWL。
4.高速缓存可随意从S、F和E状态转变到I状态。
5.高速缓存可随意从E状态转变到M状态(假定发生写入)。
6.高速缓存也可仅在它所发出的请求完成时或者在接收到来自对等体的请求时才转变。
以下描述的基本协议仅包含PRL、PRIL和PWL请求,并使用涉及与传输数据共同传递的冲突列表的冲突解决方法。在以下部分包含对这个基本协议的扩充和选项。
基本MESIF协议请求生成调用
高速缓存产生对(不活动)地址的新请求算法把地址标记为活动的If请求为PRL或PRIL向所有其它对等节点以及向归属节点发送请求If请求为PWL向归属节点发送请求由归属节点进行的请求接收调用在归属节点接收的请求算法If请求为PWL发起对存储器的写入(处理转发、取消未完成的读取等)向请求方发回ACKIf请求为PRL或PRIL发起从存储器的读取(如果读取在接收到READ之前完成,则缓冲数据,等等)由对等节点进行的请求接收调用在对等节点接收的请求(PRL或PRIL)算法If地址正被转发缓冲入局请求Else if地址不是活动的窥探高速缓存Else if地址是活动的If活动请求为PWL
缓冲入局请求--End IfIf入局请求处于活动请求的冲突列表中If活动请求为PRL以CNFL响应Else(活动请求为PRIL)以CNFLI响应Else if活动请求处于“数据阶段”(参见下面的“收集响应”)缓冲入局请求Else把请求方添加到(活动请求的)冲突列表If入局请求为PRIL把冲突列表中的请求方标记为PRIL冲突方If活动请求为PRL以CNFL响应Else(活动请求为PRIL)以CNFLI响应窥探响应调用(作为窥探)提交给高速缓存用于适当响应产生的请求算法根据当前高速缓存状态和入局请求类型查找下表中的响应和下一个状态(S/I的下一个状态表示高速缓存可把行移动到任一状态;注意即使让本地副本无效,仍然对PRL发送DATA_F--参见以下的PRL DATA E/M响应选项)
IfPRL窥探命中处于M状态的高速缓存行发起PWL请求缓冲窥探(推迟发送DATA_F,直到回写完成)ElseIf窥探命中高速缓存行(处于M、E或F状态)把地址标记为正转发把高速缓存行改变为下一个状态向请求方发送响应收集响应调用PRL/PRIL请求接收到来自对等节点的响应算法If响应为SACK(仅PRL)记录系统中共享副本的存在Else if响应为DATA记录对来自响应节点的转发数据的接收向高速缓存发送高速缓存行和新状态(注意行仍然不是全局可观察的!)Else if响应为CNFL把响应节点添加到冲突列表Else if响应为CNFLI把响应节点添加到冲突列表把响应节点标记为PRIL冲突方--End If
If所有对等节点已经响应把请求标为处于“数据阶段”If接收到数据响应向转发节点发送CNCL以及向归属节点发送冲突列表Else向归属节点发送READ和冲突列表在归属节点取消调用归属节点接收到CNCL(包含转发节点和冲突列表)算法取消未完成的读取(如果有的话)把请求节点标记为这个地址的“当前拥有者”向转发节点发送DACKIf没有冲突向请求节点发送ACK--无冲突高速缓存时期完成Else结合冲突列表作为这个地址的“未完成请求”--等待对XFR数据的READ在归属节点的读取请求调用归属节点接收到READ(包含冲突列表)算法If没有当前拥有者If数据不可用等待完成读取向请求节点发送DATA_EIf冲突列表为空向请求节点发送ACK--无冲突未高速缓存时期完成Else结合冲突列表作为这个地址的“未完成节点”Else把未完成冲突添加到这个地址的“未完成节点”从“未完成节点”删除请求节点If没有(剩余)未完成节点向“当前拥有者”发送XFR(目标请求节点)向请求节点发送ACK--时期完成ElseIf一个或多个未完成节点(包括请求方)为PRIL向“当前拥有者”发送XFRI(目标请求节点)Else向“当前拥有者”发送XFR(目标请求节点)把请求节点标记为“当前拥有者”传输接收调用请求方接收到XFR或XFRI(包含目标节点)算法在仍未接收到时等待数据If接收到XFRI向高速缓存发送PRIL窥探Else向高速缓存发送PRL窥探把冲突列表(无接收节点)添加到DATA包把DATA包发送到目标节点传输数据接收调用请求方作为XFR的结果接收到DATA(包含冲突列表)算法向处理器发送数据把冲突列表结合到当前冲突列表If缓冲请求匹配冲突列表中的条目以CNFL响应每个匹配请求转发DACK调用转发节点接收到DACK算法取消地址标为正转发的标记服务缓冲用于接收对等请求的每个算法的请求请求ACK调用请求方接收到来自归属节点的ACK算法If活动请求为PWL把高速缓存行转换到预期的下一个状态(E或I)If缓冲窥探(PRL命中M状态的行)向请求方发送DATA_F把高速缓存行改变为下一个状态(S)或I状态Else(请求为PRL或PRIL)释放缓冲请求(即把它们当作好像刚到达该节点来处理)在仍未接收到时等待数据向处理器发送ACK<<<===基本协议结束===>>>
PIL请求在以上协议算法中,节点把高速缓存行从F状态移动到E状态的唯一方式是使该行无效(把行改变为I状态),然后再请求PRIL。这涉及DATA传输。
为了支持直接F->E转变,可使用PIL请求。这个请求发送到所有对等节点和归属节点,并使其它高速缓存使它们的行共享副本无效。为了防止正在传送中的PRIL和/或PRL干扰这种转变,PIL可被给予更高优先级。
对基本协议的改变请求生成调用高速缓存产生对(不活动)地址的新请求算法把地址标记为活动If请求为PRL或PRIL向所有其它对等节点以及向归属节点发送请求>>If请求为PIL>>向所有其它对等节点发送请求If请求为PWL向归属节点发送请求由对等节点进行的请求接收调用在对等节点接收的请求(PRL或PRIL)如果存在活动PIL请求,则对算法的唯一改变是缓冲请求,如对于活动PWL进行的那样。
由对等节点进行的PIL请求接收调用在对等节点接收的PIL请求算法向高速缓存发送PIL窥探窥探响应对于新的响应/下一个状态表使用的相同算法(没有具有PIL的F、E和M的条目,因为F和F、E和M中的请求方是相互排他的)
收集响应调用PIL请求接收到来自对等节点的响应算法If所有对等节点已经响应通知高速缓存把行移动到E状态释放任何缓冲的请求--PIL请求完成M->SPWL和立即响应PRL命中M状态的行存在的性能问题是需要在转发数据之前进行回写(发出PWL)。通过某些细微变化,数据可能同时被转发和回写。归属节点不发送DACK,直到它已经接收到来自请求方/胜方的PWL请求和CNCL。
对基本协议的改变由归属节点进行的请求接收调用
在归属节点接收的请求算法If请求为PWL发起对存储器的写入(处理转发、取消未完成的读取等)>>IfPWL是用于PRL命中M>>If接收到CNCL>>向CNCL中表明的转发节点发送DACK>>Else>>把地址标记为被回写>>Else>>向请求方发回ACKIf请求为PRL或PRIL发起从存储器的读取(如果读取在接收到READ之前完成,则缓冲数据,等等)窥探响应调用(作为窥探)提交给高速缓存用于适当响应产生的请求算法进行如基本协议中的响应/下一个状态查找If窥探命中高速缓存行(处于M、E或F状态)把地址标记为正被转发把高速缓存行改变为下一个状态IfPRL窥探命中M状态的高速缓存行发起标记为PRL命中M回写的PWL向请求方发送DATA_F,标记为PRL命中MElse向请求方发送响应收集响应算法差别是在记录PRL命中M数据以及当发送CNCL时通知归属节点特殊转发Else if响应为DATA记录对来自响应节点的转发数据的接收IfPRL请求并命中M(经由DATA表明)把转发节点标记为PRL命中M向高速缓存发送高速缓存行和新状态(注意行仍然不是全局可观察的!)If所有对等节点已经响应If接收到数据响应向转发节点发送CNCL(如果它是,则标记为PRL命中M),以及向归属节点发送冲突列表在归属节点取消调用归属节点接收到CNCL(包含转发节点和冲突列表)算法唯一的差别是在确定是否发送DACK方面If转发节点进行了PRL命中M回写If已经接收到PWL向转发节点发送DACKElse把地址标记为需要回写Else向转发节点发送DACK转发DACK没有差别。所发出的PWL作为一次性信息包(或者由DACK完成的请求)处理FM状态PRL命中M状态的行的另一个备选方案是把FM状态引入MESIF。这个状态表明已修改行的共享副本。如同M状态一样,数据在被驱逐出高速缓存时必须回写(PWL)。如同F状态一样,数据无法被改变,以及节点对于对行的读取请求以命中来响应。
当具有M状态的行的节点接收PRL时,它以DATA_FM进行响应,而不是发出PWL并以DATA_F进行响应。
除经由PIL之外,不允许从FM到M的转变。不允许从FM直接改变到E。
对基本协议的改变窥探响应调用(作为窥探)提交给高速缓存用于适当响应产生的请求算法根据当前高速缓存状态和入局请求类型查找下表中的响应和下一个状态(S/I的下一个状态表示高速缓存可把行移动到任一状态;注意即使让本地副本无效,仍然对PRL发送DATA_F(M)--参见以下的PRL DATA E/M响应选项)
If窥探命中高速缓存行(处于M、E或F状态)
把地址标记为正被转发把高速缓存行改变为下一个状态向请求方发送响应无冲突数据与传输数据一起发送冲突列表对于硬件是有问题的。如果在传输链中间的请求知道它们处于中间并被允许在接收传输数据之后(以IACK/SACK)响应所缓冲的请求,则有可能避免这个冲突列表。这允许其它所有冲突节点取得进一步进展,从而让其余READ到达归属节点。
通过这个选项,请求(PRL和PRIL,即读取请求)经过四个阶段1)发送阶段-发送请求2)收集阶段-收集响应(随后再发送READ或CNCL)3)数据阶段-等待数据4)保持阶段-在冲突链中间,保持数据,直到XFR,对缓冲和入局请求发送IACK/SACK在这个实施例中,如果在所传输DATA上没有搭载ACK,则请求将知道它处于链的中间。只有这个保持阶段不同于基本协议。实际上,基本协议的数据阶段或者保持相同(对于无冲突请求或者在时期/冲突链结束时的请求),或者分为两个阶段,第一个仍然是数据阶段,第二个这时是当接收到XFR时保持阶段结束。
对基本协议的改变由对等节点进行的请求接收对算法的唯一改变是检查在其保持阶段是否存在活动请求If地址被转发[同上]Else if地址不是活动的[同上]Else if地址是活动的
If活动请求为PWL[同上]If入局请求处于活动请求的冲突列表中[同上]Else if活动请求处于“保持阶段”If入局请求为PRL以SACK(或者在前一个PRIL得到IACK时以IACK)进行响应Else--入局请求为PRIL把活动请求标记为需要被无效以IACK响应Else if活动请求处于“数据阶段”[同上]Else[同上]收集响应对此算法的唯一改变在于,请求在它发送CNCL以及其冲突列表为空时完成。换言之,系统进行了高速缓存到高速缓存传输,并且没有冲突;唯一要做的是通知归属节点,这不需要被ACK。
注意正进行CNCL请求(具有冲突)保持在数据阶段,等待XFR,即,它不进入保持阶段。
在归属节点取消调用归属节点接收到CNCL(包含转发节点和冲突列表)算法取消未完成的读取(如果有的话)把请求节点标记为这个地址的“当前拥有者”向转发节点发送DACKIf没有冲突
--无冲突高速缓存时期完成Else结合冲突列表作为这个地址的“未完成请求”--等待对XFR数据的READ在归属节点的读取请求调用归属节点接收到READ(包含冲突列表)算法If没有当前拥有者If数据不可用必要时发起读取等待完成读取向请求节点发送DATA_EIf冲突列表为空--无冲突未高速缓存时期完成Else结合冲突列表作为这个地址的“未完成节点”--等待对XFR数据的读取Else把未完成冲突添加到这个地址的“未完成节点”从“未完成结点”删除请求节点If没有(剩余)未完成节点向“当前拥有者”发送XFR+ACK(目标请求节点)--时期完成ElseIf一个或多个未完成节点(包括请求方)为PRIL向“当前拥有者”发送XFRI(目标请求节点)Else
向“当前拥有者”发送XFR(目标请求节点)把请求节点标记为“当前拥有者”传输接收这里的改变(除了处理XFR+ACK之外)是确定在保持阶段中对于PRIL是否欺骗IACK响应。如果是,则采用窥探使行无效。
调用请求方接收到XFR、XFR+ACK或XFRI(包含目标节点)算法在仍未接收到时等待数据If所接收XFRI或请求被标记为需要被无效向高速缓存发送PRIL窥探Else向高速缓存发送PRL窥探--End IfIf接收到XFR+ACK把DATA+ACK包发送到目标节点Else把DATA包发送到目标节点传输数据接收调用请求方作为XFR的结果接收到DATA或DATA+ACK(请求方处于数据阶段,因此它知道这是经由XFR的)算法向处理器发送数据If接收到DATA包把请求移动到保持阶段For各个所缓冲的请求If所缓冲的请求为PRL
以SACK(或者在前一个PRIL得到IACK时以IACK)进行响应Else--所缓冲的请求为PRIL把本地请求标记为需要被无效以IACK响应Else--接收到DATA+ACK--请求完成,以及时期完成PRL DATA E/M响应当PRL窥探命中高速缓存行时,它必须以DATA_F进行响应,以便保持正确性,而与高速缓存是否把行转变到S或I无关。有可能在转变到I时支持发送DATA_E,但它要求与高速缓存的附加通信,以便让它知道它所接收的E状态需要降级到F。算法基本上在于,如果节点已经接收到DATA_E然后再接收SACK,则它必须把高速缓存状态从E改变到F。
权利要求
1.一种方法,包括从第一对等节点向多节点系统中的多个节点发送对数据块副本的请求;通过所述第一对等节点从第二对等节点接收对数据块副本的请求;确定所接收的请求是否与所发送的请求有冲突;以及如果所接收的请求与所发送的请求有冲突,则向归属节点发送关于所述数据块的消息,指明存在冲突。
2.如权利要求1所述的方法,其特征在于,确定所接收的请求是否与所发送的请求有冲突包括确定所接收的请求和所发送的请求是否请求相同的数据。
3.如权利要求1所述的方法,其特征在于还包括如果所接收的请求与所发送的请求有冲突,则向第三对等节点发送关于所述数据块的消息,指明存在冲突。
4.如权利要求1所述的方法,其特征在于,送到所述归属节点的所述消息使所述归属节点向第三对等节点发送消息,使所述第三对等节点向所述第一对等节点发送所请求的数据。
5.如权利要求1所述的方法,其特征在于,所述第一对等节点经由代表多个对等节点的对等代理与所述第二对等节点通信。
6.如权利要求1所述的方法,其特征在于,所述第一对等节点经由代表多个节点的归属代理与所述归属节点通信。
7.一种装置,包括要与具有多个对等实体和归属实体的系统中的多个系统实体耦合的接口;以及控制电路,与所述接口耦合,以便向一个或多个所述对等实体发送对数据块副本的请求,所述控制电路检测从其它对等实体接收的冲突请求消息,其中响应冲突请求消息,所述控制电路向对应于所述数据块的归属节点发送指明冲突的消息。
8.如权利要求7所述的装置,其特征在于,所述对等实体包括一个或多个对等节点以及代表多个对等节点的一个或多个对等代理。
9.如权利要求7所述的装置,其特征在于,所述归属实体包括归属节点。
10.如权利要求7所述的装置,其特征在于,所述归属实体包括代表多个节点的归属代理。
11.如权利要求7所述的装置,其特征在于还包括与所述接口耦合的处理器。
12.如权利要求11所述的装置,其特征在于,所述控制电路包含在所述处理器中。
13.如权利要求7所述的装置,其特征在于,如果所述请求与所述控制电路进行的请求没有冲突,则所述控制电路向请求对等节点提供所请求数据的副本。
14.一种方法,包括通过第一对等节点向至少一个对等节点以及对应于所请求数据块的归属节点发送第一请求消息以请求数据块的副本;通过第二对等节点向至少所述第一对等节点和所述归属节点以及向第三对等节点发送第二请求消息以请求所述数据块的副本;从所述第三对等节点向所述第一对等节点发送所述数据块的副本;从所述第一对等节点向所述归属节点发送指明接收到来自所述第三对等节点的所述数据块的消息;从所述第一对等节点向所述第二对等节点发送所述数据块的副本;以及从所述第二对等节点向所述归属节点发送指明接收到来自所述第二对等节点的所述数据块的消息。
15.如权利要求14所述的方法,其特征在于,所述数据块包括高速缓存行。
16.如权利要求14所述的方法,其特征在于,所述第一请求消息被发送给代表多个节点的代理。
17.如权利要求14所述的方法,其特征在于,所述第二请求消息发送给代表多个节点的代理。
18.如权利要求14所述的方法,其特征在于,从所述第三对等节点向所述第一对等节点发送所述数据块的副本包括改变所述第三对等节点所保留的任何所述数据块的状态。
19.如权利要求14所述的方法,其特征在于,从所述第一对等节点向所述第二对等节点发送所述数据块的副本包括改变所述第一对等节点所保留的任何所述数据块的状态。
20.一种方法,包括从第一对等节点向至少第二对等节点、第三对等节点以及对应于数据块的归属节点发送第一请求消息以请求所述数据块的副本;从所述第二对等节点向所述第一对等节点、所述第三对等节点以及所述归属节点发送对于所述数据块副本的第二请求,其中所述第二请求消息在所述第二节点接收所述第一请求消息之前被发送;从所述第一对等节点向所述第二对等节点发送指明所述第一请求消息与所述第二请求消息之间冲突的消息;从所述第三对等节点向所述第一对等节点发送所述数据块的副本;从所述第一节点向所述归属节点发送指明所述第一请求消息与所述第二请求消息之间冲突的消息;以及从所述归属节点向所述第一对等节点发送消息,使所述第一对等节点向所述第二节点发送所述数据块的副本。
21.如权利要求20所述的方法,其特征在于还包括从所述第一对等节点向所述第二对等节点发送所述数据块的副本。
22.如权利要求21所述的方法,其特征在于还包括从所述第二对等节点向所述第一对等节点发送指明所述第二请求消息与所述第一请求消息之间冲突的消息。
23.如权利要求21所述的方法,其特征在于,从所述第一对等节点向所述第二对等节点发送所述数据块副本包括改变所述第一对等节点所保留的任何所述数据块的状态。
24.如权利要求20所述的方法,其特征在于,所述数据块包括高速缓存行。
25.如权利要求20所述的方法,其特征在于,所述第一请求消息发送给代表多个节点的代理。
26.如权利要求20所述的方法,其特征在于,所述第二请求消息发送给代表多个节点的代理。
27.一种方法,包括从第一对等节点向第二对等节点、第三对等节点以及对应于数据块的归属节点发送第一请求消息以请求所述数据块的副本,其中发往所述第三对等节点的所述消息被延迟;从所述第二对等节点向所述第一对等节点、第三对等节点以及所述归属节点发送第二请求消息以请求所述数据块的副本,其中,在所述第三对等节点接收到所述延迟的第一消息之前,所述第二对等节点发送所述第二请求消息;从所述第二对等节点向所述第一对等节点发送指明所述第一消息与所述第二消息之间冲突的消息;从所述第三对等节点向所述第二对等节点发送所述数据块的副本;从所述第二对等节点向所述归属节点发送指明所述第一请求消息与所述第二请求消息之间冲突的消息;以及从所述归属节点向所述第二对等节点发送消息,使所述第二对等节点向所述第一对等节点发送所述数据块的副本。
28.如权利要求27所述的方法,其特征在于还包括从所述第二对等节点向所述第一对等节点发送所述数据块的副本。
29.如权利要求27所述的方法,其特征在于,所述数据块包括高速缓存行。
30.如权利要求27所述的方法,其特征在于,所述第一节点把所述第一请求消息发送给代表多个节点的代理。
31.如权利要求27所述的方法,其特征在于,所述第二节点把所述第二请求消息发送给代表多个节点的代理。
32.如权利要求27所述的方法,其特征在于,从所述第三对等节点向所述第二对等节点发送所述数据块副本包括改变所述第一对等节点所保留的任何所述数据块的状态。
33.一种方法,包括从第一对等节点向第二对等节点以及向归属节点发送第一消息以请求数据块副本;从第二对等节点向所述第一对等节点以及向所述归属节点发送对于所述数据块副本的第二请求;从所述第一对等节点向所述第二对等节点发送指明所述第一消息与所述第二消息之间冲突的消息;从所述第二节点向所述第一节点发送指明所述第二节点没有所述数据块的有效副本的消息;从所述归属节点向所述第一对等节点发送所述数据块的副本;以及从所述归属节点向所述第一对等节点发送消息,使所述第一对等节点向所述第二对等节点发送所述数据块的副本。
34.如权利要求33所述的方法,其特征在于还包括从所述第二对等节点向所述第一对等节点发送指明所述第二消息与所述第一消息之间冲突的消息。
35.如权利要求33所述的方法,其特征在于还包括从所述第一对等节点向所述第二对等节点发送指明所述第一对等节点没有所述数据块的有效副本的消息。
36.如权利要求35所述的方法,其特征在于还包括从所述第二对等节点向所述归属节点发送指明所述第一请求与所述第二请求之间冲突的消息。
37.如权利要求33所述的方法,其特征在于,所述数据块包括高速缓存行。
38.如权利要求33所述的方法,其特征在于,所述归属节点以单个消息来发送所述数据块的副本以及所述消息,使所述第一对等节点向所述第二对等节点发送所述数据块的副本。
39.如权利要求33所述的方法,其特征在于,所述第一消息被发送给代表多个节点的代理。
40.如权利要求39所述的方法,其特征在于,所述第二消息被发送给代表多个节点的所述代理。
全文摘要
冲突解决技术提供一致性,使得如果每个节点在该节点已发出其自身请求之后监测所有请求,则所有冲突可被冲突请求方中至少一个检测到。如果行处于“独占”、“已修改”或“转发”状态,则冲突在保存唯一副本的节点上解决。冲突解决的胜方以及可能还有败方向归属节点报告冲突,其中归属节点使冲突报告成对,并发出转发指令以确保所有请求节点最终接收到所请求数据。如果被请求高速缓存行是未高速缓存的或者仅存在于“共享”状态中,则归属节点提供高速缓存节点的副本并解决冲突。在一个实施例中,在接收到确认消息之前的所有响应之后的封锁期间允许所有冲突节点认识到它们涉及的冲突。
文档编号G06F15/16GK1849592SQ200380106550
公开日2006年10月18日 申请日期2003年11月26日 优先权日2002年12月19日
发明者H·胡姆, J·古德曼, R·比尔斯, G·拉尼斯 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1