高速缓存一致性协议的非随机分布式冲突解决的制作方法

文档序号:6420941阅读:205来源:国知局
专利名称:高速缓存一致性协议的非随机分布式冲突解决的制作方法
技术领域
本发明涉及高速缓存存储器。更具体地,本发明涉及多高速缓存多处理器系统中的分布式冲突的解决。
背景技术
当电子系统包括多高速缓存存储器时,必须维持可用数据的有效性。这一般是通过根据高速缓存一致性协议操作数据来完成。随着高速缓存和/或处理器的数目增加,维持高速缓存一致性的复杂度也增加了。
当多元件(例如高速缓存存储器、处理器)请求相同的数据块时,多元件之间的冲突必须以维持了数据有效性的方式解决。目前的高速缓存一致性协议一般具有负责冲突解决的单独元件。但是,随着系统复杂性的增加,依赖单独元件解决冲突会降低整个系统的性能。
图1a到1e提供了多节点系统中的冲突环境的概念性描述。节点110、120和130是对等节点,可以在高速缓存存储器中存储所请求的数据(例如高速缓存行(cache line))的拷贝。源节点(Home node)140是所请求数据的源(H)节点。在图1a到1e的例子中,对等节点110和120存储所请求数据的无效拷贝或没有存储所请求数据的拷贝,对等节点130存储还未被写回存储器的所请求数据的已修改拷贝。源节点存储着存储器中的数据的原始拷贝或者当修改已经写回存储器时的数据的已修改版本。
如图1a所示,对等节点120传输数据请求消息以请求诸如高速缓存行的数据块的拷贝。数据请求消息被传输到对等节点110和对等节点130。但是,到对等节点130的数据请求消息被延迟了。延迟可能由诸如缺少可用带宽、缓冲考虑等引起。
对等节点110以无有效拷贝消息响应来自对等节点120的数据请求消息,该无有效拷贝消息向对等节点120表明对等节点110没有所请求数据的有效拷贝。在对等节点120传输数据请求消息后的某个时间,对等节点110传输数据请求消息到对等节点120和130,如图1b所示,请求与对等节点120所请求的相同的数据。
响应于数据请求消息,对等节点120提供无有效拷贝消息到对等节点110。对等节点130提供所请求数据到对等节点110。由对等节点130维持的数据的拷贝,如果有的话,被标记为无效,并且由对等节点110存储的数据的拷贝被标记为已修改。
在对等节点130已经响应了来自对等节点110的数据请求并且无效了数据拷贝之后的某个时间,对等节点130从对等节点120接收被延迟的数据请求消息,如图1c所示。响应于数据请求消息,对等节点130提供无有效拷贝消息到对等节点120。注意,从原始数据请求消息的时刻到对等节点130响应数据请求消息的时刻,由对等节点130存储的数据的状态改变了。
因为对等节点110和130以无有效拷贝消息响应来自对等节点120的数据请求消息,对等节点120发现没有请求数据的有效的被高速缓存的拷贝,所以对等节点120从源节点140请求数据拷贝。从而,如图1d所示,对等节点传输读取(Read)消息到源节点140。源节点140从存储器取出所请求的数据并且将数据提供给对等节点120。然后对等节点120将所请求的数据存储为独有状态(Exclusive state)。
如图1e所示,示于图1a到1e中的消息序列导致两个不兼容的数据行拷贝。在提供的例子中,对等节点110将数据拷贝存储为已修改状态,对等节点120将数据拷贝存储为独有状态。但是,对等节点120存储的拷贝并不是对等节点120独有的。从而,除非提供了解决高速缓存冲突的机制,在某种情形下多节点系统可能导致不兼容的数据拷贝。

发明内容
根据本发明的一个方面,提供了一种方法,包括由具有相冲突的消息所请求的数据的有效拷贝的对等节点解决来自多对等节点的对数据块的所述相冲突的请求;以及如果没有唯一的被高速缓存的拷贝由一个所述对等节点存储,则由对应于所述所请求数据的源节点解决对所述数据块的相冲突的请求。
根据本发明的另一个方面,提供了一种系统,包括多个具有高速缓存存储器以产生对于数据的请求的对等节点,所述对等节点具有所述所请求数据的有效的被高速缓存的拷贝以解决相冲突的请求,并向所述多个请求对等节点的一个提供所述所请求的数据;和对应于所述所请求数据的与所述对等节点相耦合的源节点,如果没有对等节点存储所述所请求数据的有效的被高速缓存的拷贝,则所述源节点解决所述相冲突的请求。
根据本发明的另一个方面,提供了一种设备,包括用于由具有相冲突的消息所请求的数据的有效拷贝的对等节点解决来自多对等节点的对数据块的所述相冲突的请求的装置;和在没有唯一的被高速缓存的拷贝由一个所述对等节点存储的情况下,用于由对应于所述所请求的数据的源节点解决对所述数据块的相冲突的请求的装置。
根据本发明的另一个方面,提供了一种节点,包括用于对应于预定的地址范围存储原始的和被写回的数据的拷贝的存储器;用于存储所请求数据块的拷贝的高速缓存存储器;和与所述存储器和所述高速缓存存储器相耦合的接收来自对等节点的消息的控制电路,所述消息具有对存储于所述存储器中的数据块的拷贝的请求,以及,如果有的话,已经发布了相冲突的请求消息的节点的列表,所述控制电路向所述请求对等节点提供所述所请求数据的拷贝,所述控制电路还从来自所述列表的节点接收后来的相冲突的请求,并且向先前的所述请求节点发送消息以向后来的所述请求节点发送所述所请求数据的拷贝。
根据本发明的另一个方面,提供了一种方法,包括从对等节点接收消息,所述消息具有对存储于存储器中的数据块的拷贝的请求,以及,如果有的话,已经发布相冲突的请求消息的节点的列表;向所述请求对等节点提供所述所请求数据的拷贝;从来自所述列表的节点接收后来的相冲突的请求;以及向先前的所述请求节点发送消息以向后来的所述请求节点发送所述所请求数据的拷贝。
根据本发明的另一个方面,提供了一种设备,包括用于从对等节点接收消息的装置,所述消息具有对存储于存储器中的数据块的拷贝的请求,以及,如果有的话,已经发布相冲突的请求消息的节点的列表;用于向所述请求对等节点提供所述所请求数据的拷贝的装置;用于从来自所述列表的节点接收后来的相冲突的请求的装置;以及用于向先前的所述请求节点发送消息以向后来的所述请求节点发送所述所请求数据的拷贝的装置。
根据本发明的另一个方面,提供了一种方法,包括从多节点系统中的节点接收消息,所述消息表明一个或多个已经发布了对数据块拷贝的相冲突的请求的节点;从已经发布了所述相冲突的请求的各节点接收表明与另一个请求的冲突的消息;向发送表明冲突的消息的第一个节点发送所述所请求数据的拷贝;以及响应于后来的表示冲突的消息,向当前所有者节点发送消息,以引起所述当前所有者节点向另一个节点发送所述所请求数据的拷贝。


本发明以举例而不是限定的方式来图示,在附图中,类似的标号指示类似的元件。
图1a到1e提供了多节点系统中的冲突环境的概念性示图。
图2a到2b是对共享的被高速缓存的行的请求的概念性示图。
图3a到3b是对共享的未被高速缓存的行的请求的概念性示图。
图4a到4f是对共享行的三方相冲突的请求的概念性示图。
图5a到5g是对未被高速缓存的行的三方相冲突的请求的概念性示图。
图6是节点的一个实施例的方框图。
图7是多处理器系统的一个实施例。
具体实施例方式
将多个高速缓存协议消息附带进单个消息包的技术被描述。在下面的描述中,为了说明的目的,许多具体细节是为了提供对本发明的透彻的理解而阐述的。但是,本领域的技术人员应该清楚本发明可以不用这些具体细节而实施。在其他例子中,为了避免使本发明变得模糊,结构和设备以方框图形式示出。
请求消息下面的消息是来自请求节点的对数据/动作的请求。这些消息被广播到系统的所有节点。
端口读行(Port Read Line,PRL)这是对诸如高速缓存行的数据段的拷贝的请求。
端口读无效行(Port Read Invalidate Line,PRIL)这是当提供者节点的数据拷贝无效的情况下对数据段的拷贝的请求。这个消息也可以被称为“请求所有权”。
端口写行(Port Write Line,PWL)这个消息引起数据(例如已修改的高速缓存行)被写入存储器。这个消息也可以被称为“脏去除(dirtyeviction)”。
端口无效行(Port Invalidate Line,PIL)这个消息引起指定数据的状态从共享变为独有。
端口写无效行(Port Write Invalidate Line,PWIL)这个消息引起数据被写入存储器并且数据的目标拷贝被无效。
响应消息下面的消息是响应上述请求,从对等(即,非源)节点发给请求节点的消息。
无效状态确认(Invalid State Acknowledgement,IACK)这个消息是当发送响应的节点有所请求数据的无效拷贝或者没有所请求数据的拷贝时,对请求(PRL、PRIL、PIL、PWIL)的响应。
共享状态确认(Shared State Acknowledgement,SACK)这个消息是当发送响应的节点有处于共享状态的所请求数据的拷贝时,对PRL请求的响应。
收到数据确认(Acknowledgement of Data Received,DACK)这个消息是确认所请求数据已收到。当源节点收到CNCL消息时,由源节点发送这个消息。DACK消息的目标节点是被包括在CNCL消息中的转发节点。接收所传送的数据或来自源节点的存储器数据的节点不响应发送节点。
冲突(Conflict)这个消息表明存在对所请求的高速缓存行的共同未决的请求。
数据(冲突)(Data(Conflicts))这个消息用于转发数据和列出冲突,如果有的话。当数据被转发或者当源节点发送存储器数据到第一所有者时冲突列表为空。当数据被传送时,发送节点添加冲突列表。接收节点使用列表来发送CNFL以响应存储在缓冲器中的相匹配的请求。
到源节点的消息下面的消息由对等节点传输到源节点。
读取(冲突)(Read(Conflicts))这个消息从源节点请求数据并且列出冲突,如果有的话。在所有的响应被对等节点收到后,如果所接收的消息没有DATA消息,则这个消息被发送。
CNCL(冲突)这个消息被发送到源节点以响应对等节点的命中并列出所有冲突,如果有的话。这个消息取消源节点的预取操作。来自源节点的消息这些消息由源节点发送到对等和/或请求节点。
数据(Data)这个消息包括所请求的数据并且可以表明要被请求节点使用的数据的状态(M/E/F,已修改/独有/转发)。
确认(Acknowledge,ACK)这个消息、表明所请求数据已被发送到请求节点。当源节点发送ACK消息时,当前历程(epoch)结束。
传送(Transfer,XFR)这个消息引起接收节点传送数据到消息中所表明的节点。当源节点被告知冲突情况要求数据的当前所有者传送数据到目标节点时,源节点发送这个消息到所请求数据的当前所有者。如果源节点确定未解决的相冲突的请求是意味着当初始化数据传送时,当前所有者必须使行无效的PRIL或PWIL消息,则发送XFRI消息而不是XFR消息。在一个实施例中,在历程中要发送CNCL消息的第一节点是当前所有者。历程是第一个数据请求和所有数据请求冲突被解决之间的时段。如果源节点从存储器发送数据到节点,则那个节点是当前所有者。发送XFR/XFRI消息引起目标节点变为当前所有者。在一个实施例中,从在READ或CNCL消息中提供给源节点的冲突列表中选择目标节点。目标节点在源节点从其接收到READ消息的节点中选择。从而,如果源节点因为A发送给源节点CNCL(B、C)而使A作为高速缓存行的当前所有者,则源节点一直等到来自B或C的READ消息发送XFR/XFRI消息到A以引起A转发数据到发送READ消息的节点(B或C)。然后源节点在发送引起数据被发送到第三节点的XFT/XFRI消息之前,等待第三节点发送READ消息。
MESIF协议综述有两种提供高速缓存一致性的基本方案监听(snooping)(现在经常称为对称多处理SMP)和目录(经常称为分布式共享存储器DSM)。根本区别与放置和访问元信息有关,所述元信息即关于高速缓存行的拷贝被存储于何处的信息。
对于监听高速缓存,信息与被高速缓存的拷贝自身一起分布,即,每个有效的高速缓存行拷贝由一个单元占有,无论何时任何节点以新的途径请求许可访问高速缓存行,该单元都必须识别其责任。某处——通常在固定的位置——是当数据未被高速缓存时其所存储的地方。即使当行被高速缓存时,这个位置也可以包含有效拷贝。但是,这个节点的位置通常不为请求节点所知——请求节点简单地连同所需的许可一起广播所请求的高速缓存行的地址,并且所有可能有拷贝的节点必须响应以确保一致性被维持,如果没有其他(对等)节点响应,则包含未被高速缓存的拷贝的节点响应。
对于基于目录的方案,除了未被高速缓存的数据所存储的固定地点,还有一个固定位置,即目录,表明高速缓存的拷贝驻留于何处。为了以新的途径访问高速缓存行,节点必须与含有目录的节点通信,该节点通常与包含未被高速缓存的数据存储地的节点相同,从而当主存储拷贝有效时允许响应节点提供数据。这样的节点被称为源节点。
目录可以以两种方式分布。第一种,主存储数据(未被高速缓存的存储地)经常分布在节点中,目录也以相同的方式分布。第二种,元信息自身可以分布,在源节点保存为如行是否被高速缓存,以及如果是的话,单独拷贝驻留在何处,这样的小的信息。
监听方案依赖于广播,因为没有单独的保存元信息的地点,所以每个查询必须通告所有节点,各节点负责进行自己的部分以保证维持一致性。这包括介入消息,当另一个节点提供数据时告知源节点不响应。
监听方案具有响应可以直接和快速的优点,但是因为要求所有节点观察所有查询,所以它的可伸缩性不好。目录方案更具有可伸缩性,但是需要更复杂的响应,在点对点通信中经常涉及三个节点。
这里所描述的基本MESIF协议提供了没有单独的串行化总线的限制的类似监听的协议。类似监听高速缓存协议,MESIF协议依赖具有被高速缓存的数据拷贝的节点以维持一致性。使用点对点链路而不是同步、集中广播,带来了时间扭曲的问题——从不同节点看,事件好像以不同的顺序发生。如下面更详细的描述,MESIF协议处理时间扭曲,识别何时潜在错误可能发生并确保它们被正确地处理。源节点的概念用于确定未被高速缓存的数据驻留于何处,但是源节点参加每个事务——而不是担任关键路径——以解决冲突和时间扭曲问题。因为该方案的并发广播特性,MESIF获得与监听协议相关联的低延迟,在大多数情况下以可能的最小的延迟单个来回的请求-响应,获得可被高速缓存的数据拷贝。
基本MESIF协议涉及向所有对等节点和源节点广播初始请求。如果拷贝以E、F或者M的状态被高速缓存,则它被包括在响应中。然后发送第二个消息到源节点,告知它请求已经被满足。如果所请求的行未被高速缓存,或者如果只存在S状态的拷贝,则发送到源节点的第二个请求用于确认前一请求,源节点现在可能已经从它的存储器将其取回。在两者中的任一情况下,为了同步和冲突解决,源节点必须响应第二个请求(以及第一个请求,尽管它们有时可以被结合)。注意源节点可以有一个或更多的高速缓存,所以它可以像响应其他节点一样响应初始请求。
冲突以分布式的方式被处理。因为个别请求可以被延迟不定长的时间,所以时间扭曲问题使检测冲突变得困难。但是,如果在做出请求之后每个节点监视冲突,则冲突将被检测到。节点都可能检测到或者检测不到冲突,但至少一个能检测到。因为所有的节点必须用提供数据或者表明它们不具有拷贝(或者,在某些情况下,不提供它们具有的拷贝)来响应被广播的请求,响应可以包括对冲突的指示,所以冲突节点将检测到冲突。
允许节点当数据一到达就使用数据而不是等待所有的响应,这使得复杂性上升。这样,允许接收数据拷贝的节点一旦接收到拷贝就在内部使用数据,但是知道节点已经从源接收了确认,才可以让使用数据的效果对系统的其余部分可见。确认还可以包括节点必须转发它的拷贝到另一个节点以及有可能的从它自己的高速缓存去除此节点的指令。
最后,当节点通过提供被高速缓存的数据来响应来自另一个节点的请求时,节点必须延缓它所接收的对同一高速缓存行的所有其他请求,直到此节点从源节点接收到确认此节点转发数据的事实的响应,从而保证所有的节点遵守相同的(可能是可写的)高速缓存行的传送顺序。
源节点是未被高速缓存的数据的存储地,但是源节点也可以具有产生请求的处理器并且可以包括一个或多个高速缓存。类似于其他节点,当源节点处理器未命中,源节点必须向所有其他(对等)节点广播请求,并且源节点必须在内部处理请求,就像有其他请求到达源节点一样。注意有一个特殊情况,源节点不明确地发送消息给它自己(源节点)。此外,当对本地被高速缓存的数据的外部请求到达时,源节点必须以保证来自源节点的后来的响应不发生歧义的方式来响应。即,源节点可以通过提供数据来响应初始请求,但是源节点也必须作为源节点响应第二个请求。
本协议的变化允许源节点以未被高速缓存的数据拷贝来响应,而不用知道该数据是否有效,由请求节点和来自源节点的第二个响应挑选出提供数据被不适当提供的情况。
这里所描述的适用的MESIF协议各种实施例的基于伪代码的更具体的描述作为附录A附于此。
非随机分布式冲突解决综述通常,为了提供各种高速缓存行或者其他数据块的有序的状态改变,高速缓存一致性协议要求冲突解决。这里所描述的冲突解决技术提供了串行一致性,意味着在任何时间只有高速缓存行的单独可修改的拷贝可以存在,并且当其他高速缓存行的拷贝可读时,没有拷贝可以被修改。因而,为了维持串行一致性,修改高速缓存行的拷贝的相冲突的请求必须解决。
在一个实施例中,利用时间的性质解决冲突。即,不考虑延迟,两个节点不能都在另一节点之前请求高速缓存行。从而,如果在每个节点做出它自己的请求之后,该节点监视所有的冲突,则至少一个相冲突的请求者可以检测出冲突。
在一个实施例中,如果行处于独有(E)、已修改(M)或转发(F)状态,则在保存唯一拷贝的节点解决冲突。冲突解决的胜利者,可能还有失败者,向源节点报告冲突,源节点将冲突报告配对并且发布转发指令以保证所有的请求节点最终接收到所请求的数据。在一个实施例中,如果所请求的高速缓存行未被高速缓存或者只以共享(S)状态存在,则所请求的高速缓存行的源节点提供所请求数据的拷贝并且解决冲突。
在一个实施例中,这里描述的分布式冲突解决是被称为MESIF协议的高速缓存协议的一部分,在MESIF协议中,五个状态中的一个与高速缓存行的被高速缓存的拷贝相联系(已修改、独有、共享、无效、转发)。在一个实施例中,在对请求的所有响应之后直到从源节点接收确认消息的阻断周期(blackout period)允许所有的冲突节点知道节点所涉及的冲突。阻断周期不限制高速缓存中的数据的使用,但是却阻止数据传播到其他高速缓存。
根据多节点系统中的节点,提供下面的讨论。在一个实施例中,节点包括具有内部高速缓存存储器、外部高速缓存存储器和/或外部存储器的处理器。在另一个实施例中,节点是与其他电子系统互连的电子系统(例如计算机系统、移动设备)。其他类型的节点配置也可以被使用。在下面的例子中,虚线表示先前被发送的消息,实线表示正在被描述的消息。为了使示图变得更清楚,当一组消息(例如PRIL和相应的IACK)被解决时,图中不再包括表示这些消息的线。
图2a和2b是请求共享高速缓存行的概念性示图。为了解释冲突的例子,与图2a和2b中的各种消息相联系的编号(例如1.PRIL、7.IACK)提供了近似的排序。示于图2a和2b以及所提供的其他例子(即图3a到3f)中精确时序关系是不需要的。
如图2a所示,对等节点210传输PRIL消息到对等节点220和230以及源节点240。对等节点210也可以使用PRL消息请求相同的数据块,在这种情况下,对等节点230不会无效掉它的拷贝以响应请求消息。对等节点220以表明对等节点220不能提供所请求数据的有效拷贝的IACK消息来响应PRIL消息。对等节点220被图示为最初具有处于S状态中的所请求数据的拷贝,此拷贝是数据的有效拷贝,但不是可以提供以响应数据拷贝请求的拷贝。
因为PRIL消息请求数据拷贝,并且引起所有其他的拷贝使剩下的数据拷贝无效,所以对等节点220将处于S状态的数据拷贝转化为I状态。因为对等节点230具有处于F状态中的所请求数据的拷贝(将被提供给请求者的唯一有效拷贝),对等节点230向对等节点210提供所请求数据的拷贝。对等节点230也将它的所请求数据的拷贝转换为I状态。对等节点210将所请求数据存储为E状态。或者,对等节点210将所请求数据存储为F状态。
如图2b所示,响应于接收来自对等节点230的所请求数据,对等节点210向源节点240发送CNCL(230)()消息,这引起源节点240取消从存储器中取出所请求的数据(或者如果已经被取出,则不传输数据)。CNCL(230)()消息也向源节点240表明从对等节点230接收了所请求数据的拷贝以及对等节点210还未识别任何与请求数据的PRIL消息的冲突。
响应于来自对等节点210的CNCL(230)()消息,源节点240传输ACK消息到对等节点210以及传输DACK消息到对等节点230。ACK消息向对等节点210表明源节点240确认接收了CNCL(230)()消息。从对等节点240到对等节点230的DACK消息确认由对等节点210接收了数据,并且结束对等节点210请求数据的过程。
图3a和3b是请求共享的未被高速缓存行的概念性示图。如图3a所示,对等节点210传输PRIL消息以请求数据块拷贝。因为对等节点220和230未存储所请求数据的有效拷贝,所以节点220和230以IACK消息响应。
如图3b所示,因为对等节点210已经从所有对等节点接收了IACK消息,所以对等节点210向源节点240发送READ()消息,请求先前所请求的数据的拷贝,该数据已经由源节点240从存储器中取出。READ()消息还向源节点240表明对等节点210还未识别任何与PRIL消息的冲突。源节点240还包括和DataE消息一起的ACK消息(即,在同一消息包中)。在另一个实施例中,分别传输DataE和ACK消息。
图4a到4f是对共享的被高速缓存的行的三方相冲突的请求的概念性示图。如图4a所示,对等节点210向对等节点220和230以及源节点240发送PRL消息。发送到源节点240的PRL消息由于诸如系统200中的等待时间延迟等某种原因而被延迟。因为对等节点220和对等节点230都不能提供所请求数据的有效拷贝,所以对等节点220和对等节点230向对等节点210发送IACK消息以响应PRL消息。
来自对等节点210的PRL消息不要求任何接收消息的对等节点无效掉由接收消息的对等节点存储的拷贝,如果有的话。对等节点210也可以使用PRIL消息来请求数据,它将要求所有存储所请求数据的对等节点,不论所述数据是否被提供给请求节点,都无效由该节点所存储的所请求数据的拷贝。任何消息的结合都可以引起冲突,否则将引起不一致的结果。
如图4b所示,在对等节点220从对等节点210接收PRL消息之后和源节点240从对等节点210接收PRL消息之前的某个时间,对等节点220传输请求同一数据块的PRIL消息。对等节点220向对等节点210和230以及源节点240传输PRIL消息;但是,到对等节点210的PRIL消息被延迟了。对等节点230和源节点240以IACK消息响应来自对等节点220的PRIL消息。
如图4c所示,对等节点230随后向对等节点210和220以及源节点240传输PRIL消息。源节点240以IACK消息响应PRIL消息,表明源节点240未存储所请求数据的有效拷贝。对等节点210以CNFL消息响应来自对等节点230的PRIL消息,表明对等节点210有与从对等节点230接收的PRIL消息的冲突。
对等节点220以CNFLI消息响应来自对等节点230的PRIL消息,表明对等节点220有与从对等节点230接收的PRIL消息的冲突。CNFLI消息表明来自对等节点220的相冲突的消息是PRIL消息,它要求无效。来自对等节点210的CNFL消息表明来自对等节点210的相冲突的消息是PRL消息,它不要求无效。
如图4d所示,当源节点240从对等节点210接收被延迟的PRL消息时,源节点240以IACK消息响应,表明源节点240没有所请求数据的有效拷贝。
响应于接收来自对等节点210的CNFL消息和来自对等节点220的CNFLI消息,对等节点230向源节点240传输READ(210,220*)消息。READ(210,220*)消息请求来自被源节点240控制的存储器的数据拷贝。READ(210,220*)消息还表明来自对等节点230的数据请求与来自对等节点210和220的数据请求相冲突,并且来自对等节点220的请求要求无效(如星号所表示的)。因为对等节点230是向源节点240发送READ消息的有相冲突的请求的第一个节点,所以对等节点230是收到所请求数据拷贝的第一个对等节点,并且是所请求数据的当前所有者。
响应于READ(210,220*)消息,源节点以DataE消息向对等节点230提供所请求的数据。DataE消息引起对等节点230将数据存储为E状态。或者,可以使用其他数据消息(例如DataF、DataS)。源节点240保留由对等节点230提供的冲突列表以响应来自对等节点210和220的随后的READ/CNCL消息。
如图4e所示,响应于来自源节点240的IACK消息,对等节点210向源节点240传输READ(230*)消息。因为对等节点210还未收到PRIL消息,所以READ消息不表明与来自对等节点220的PRIL消息的冲突。如果对等节点210已经接收了来自对等节点220的PRIL消息,则READ消息将表明与对等节点220的冲突。
响应于READ(230*)消息,源节点240向对等节点230发送XFRI(210)消息,这引起对等节点230向对等节点210发送所请求的数据。XFRI消息还向对等节点230表明来自还未收到它的数据(对等节点220)的对等节点的冲突消息要求在数据被发送到对等节点210后数据被无效。
对等节点230以DataE(220)消息向对等节点210发送所请求的数据,这引起对等节点210将所请求的数据存储为E模式,并且告知对等节点210请求消息可能与来自对等节点220的消息相冲突。对等节点220已经检测到与来自对等节点220的消息的冲突。在对等节点210接收所请求的数据之前,从对等节点220接收了被延迟的PRIL消息。
因为对等节点210已经向源节点240发送了它的冲突列表,并且还未从对等节点230收到所请求的数据,所以对等节点210将来自对等节点220的PRIL消息存储在缓冲器中。响应于接收来自对等节点230的包含与对等节点220的冲突的数据消息,对等节点210以CNFL消息响应,表明对等节点210有与来自对等节点220的PRIL消息的冲突。
如图4f所示,响应于来自对等节点210的CNFL消息,对等节点230向源节点240发送READ(210,230*)消息,表明了与来自对等节点210的PRL消息以及与来自对等节点230的PRIL消息的冲突。源节点240以向对等节点220的ACK消息和向对等节点210的XFRI(220)消息响应READ(210,220*)消息。对等节点210以DataE(230)消息向对等节点220发送所请求的数据。对等节点220先前检测到与对等节点230的冲突。递送到对等节点220的ACK消息表明不存在与来自对等节点220的PRIL消息的另外的冲突。
图5a到5g是对未被高速缓存行的三方相冲突的请求的概念性示图。如图5a所示,对等节点210向对等节点220和230以及源节点240传输PRIL消息以请求数据块。对于源节点240的PRIL消息被延迟。对等节点210传输PRIL消息后不久,对等节点210向对等节点220和230以及源节点240传输PRIL消息以请求相同的数据块。
如图5b所示,对等节点230以IACK消息响应来自对等节点210的PRIL消息。对等节点230表明在处理对来自对等节点220的PRIL消息的响应中的延迟。对等节点210以CNFLI消息响应来自对等节点220的PRIL消息。类似地,对等节点220以CNFLI消息响应来自对等节点210的PRIL消息。
如图5c所示,在节点210和220接收所请求数据的拷贝之前,对等节点230向对等节点210和220以及源节点240传输PRIL消息。对等节点210和220以CNFLI消息响应来自对等节点230的PRIL消息。由于在处理来自对等节点220的PRIL中它的延迟,对等节点230向对等节点220发送CNFLI消息,而不是IACK消息,表明与由对等节点230最近产生的对相同数据块的请求的冲突。
如图5d所示,在从所有对等节点接收响应之后,对等节点230向源节点240发送READ(210*,220*)消息。因为对等节点230是第一个向源节点240发送READ消息的对等节点,所以源节点240以DataE消息响应,以向对等节点230提供所请求的数据。对等节点230是数据的当前所有者。
如图5e所示,在从所有对等节点接收响应之后,对等节点210向源节点240发送READ(210*,230*)消息。源节点240也从对等节点210接收被延迟的PRIL消息。源节点240以IACK消息响应来自对等节点210的PRIL消息,表明源节点240将不会提供所请求的数据拷贝。这是因为对等节点230具有所请求数据的有效的被高速缓存的拷贝。
源节点240向对等节点230发送XFRI(220)消息以引起对等节点230向对等节点210提供所请求数据的拷贝。因为对等节点230是第二个向源节点240发送READ消息请求数据的对等节点,所以对等节点230是第二个接收所请求的数据拷贝的对等节点。
如图5f所示,对等节点230以DataE消息向对等节点220发送所请求的数据的拷贝。对等节点210向源节点240发送READ(220*,230*)消息。源节点240通过向对等节点220发送XFRI(210)消息以响应来自对等节点210的READ消息,这引起对等节点220向对等节点210发送所请求数据的拷贝。
如图5g所示,对等节点220以DataE消息向对等节点210发送所请求数据的拷贝。对等节点220也无效由对等节点220存储的数据的拷贝。源节点240向对等节点210发送ACK消息以表明所有对此数据块的请求都已经被解决和满足。
支持非随机分布式冲突解决的示例系统图6是节点的一个实施例的方框图。节点600是以单个处理器、高速缓存存储器、存储器控制器和存储器图示的;但是,节点中可以包括任何数目的任何这些元件。此外,节点中也可以包括附加的和/或不同的元件(例如总线桥)。
处理器610可以是现有技术中已知的任何类型的处理器。在一个实施例中,处理器610包括高速缓存存储器620。在另外的实施例中,高速缓存620在处理器610外部,或者可以在处理器610内部或者外部包括附加的高速缓存存储器。
存储器控制器630与高速缓存存储器620和存储器640相耦合。存储器控制器630作为高速缓存存储器620和存储器640之间的接口来工作。在一个实施例中,存储器控制器630根据这里所描述的高速缓存一致性协议来维持高速缓存一致性。存储器控制器630通过节点链接650与其他节点交互。在另一个实施例中,处理器610与存储器控制器630交互以维持如这里所描述的高速缓存一致性,并且处理器610通过其他节点链接655与其他节点交互。
在一个实施例中,节点链接650包括对于节点600与其交互的各节点的专用接口。在另一个实施例中,节点链接650包括同节点600与其交互的节点的数目不同的许多接口。在一个实施例中,节点600与一个或多个代表多个节点的代理交互。
图7是多处理器系统的一个实施例。多处理器系统700用于表示一系列诸如计算机系统、实时监视系统等具有多处理器的系统。另一个多处理器系统可以包括更多的、更少的和/或不同的元件。在某种情况下,这里所描述的高速缓存管理技术可以被应用于单处理器也可以被应用于多处理器系统。可以配置多处理器系统700作为多节点系统来工作。
多处理器系统700包括总线系统710或其他交流信息的通信设备。总线系统710可以包括许多总线和相关的互连电路,例如总线桥。处理器720与总线系统710耦合以处理信息。处理器720可以包括高速缓存存储器722,例如零级(L0)高速缓存存储器和高速缓存控制器724。在一个实施例中,处理器720还与高速缓存725耦合,高速缓存725可以是任何类型的高速缓存存储器。在另一个实施例中,高速缓存725可以与总线系统710相耦合。也可以使用其他类型的处理器-高速缓存配置。
在一个实施例中,高速缓存控制器724通过高速缓存存储器接口728与高速缓存存储器722耦合,该接口可以是例如处理器720内部的总线。高速缓存控制器通过高速缓存接口726与高速缓存存储器725耦合,该接口在处理器720和外部高速缓存存储器之间提供接口。
多处理器系统700还包括具有高速缓存存储器732和高速缓存控制器734的处理器730。高速缓存控制器734通过高速缓存接口738与高速缓存732耦合。类似地,高速缓存734通过高速缓存接口736与高速缓存存储器732耦合。在一个实施例中,高速缓存存储器735与处理器730耦合。
虽然多处理器系统700以两个处理器举例说明,但是多处理器系统700可以包括许多处理器和/或协处理器。多处理器系统700还包括与总线系统710相耦合的存储器系统740。在适当的地方,存储器系统740可以包括动态的(例如随机存取存储器)和静态的(例如只读存储器、CD-ROM、磁盘存储、闪存)存储器设备以及相关的驱动器的任何结合。存储器系统740的存储器设备用于存储信息和由多处理器系统700的处理器执行的指令。存储器系统740也可以用于存储处理器执行指令期间的临时变量或其他中间信息。
可以通过有线或无线的远程连接从静态或远程存储设备,例如磁盘、只读存储器(ROM)集成电路、CD-ROM、DVD等向存储器系统740提供指令。在另一个实施例中,硬连线的电路可以用来代替软件指令或者与软件指令相结合。从而,指令序列的执行不限于任何具体的硬件电路和软件指令的结合。
多处理器系统700还包括提供对诸如局域网和/或互联网的网络的访问的网络接口750。网络接口750可以提供无线和/或有线网络接口,可以包括来自和/或朝向远程电可访问介质的指令的通信。电可访问介质包括以电子设备(例如计算机、个人数字助理、蜂窝电话)可读的形式提供(即存储和/或传输)内容(例如计算机可执行指令)的任何机构。
例如,机器可访问介质包括只读存储器(ROM);随机存取存储器(RAM);磁盘存储介质;光学存储介质;闪存设备;电、光、声或其他形式的传播信号(例如,载波、红外信号、数字信号)。
多处理器系统700还可以包括诸如阴极射线管(CRT)或液晶显示器(LCD)的显示设备760以显示信息。包括诸如具有字母数字和其他键的键盘的输入设备770一般被耦合到总线710以向处理器720和/或730传递信息和命令选择。另一种类型的用户输入设备是诸如鼠标、轨迹球或光标定向键的光标控制设备,来向处理器720和730传递方向信息和命令选择以及控制光标在显示设备760上的移动。
说明书中提到的“一个实施例”或“实施例”是指所描述的与实施例有关的具体的特征、结构或特性包括在本发明的至少一个实施例中。说明书中各处的短语“在一个实施例中”的出现未必都是指相同的实施例。
在上述说明中,本发明已经参照其具体实施例被描述。但是,很明显,不脱离本发明的更广的精神和范围,可以对其作出各种修改和变化。因此,本说明书和附图应被认为是举例说明性的而不是限制性的意思。
附录A下面是以伪代码形式对MESIF算法的示例描述。描述是基于包的;即,各例程是响应进入或外出的包而执行的。或者,算法可以描述为对由于包被接收或被产生而引起的状态变化的反应。
为了简化描述,做出下面的假设1.各对等/请求者节点具有单独的高速缓存代理;2.源节点不具有高速缓存代理;以及3.用于源节点中的存储器请求的算法可以比所指出的更复杂并且可以处理MESIF引入的所有的边际情况(corner case) (多于一个读取、多重历程、写转发等)。
源节点具有高速缓存代理的情况(可以出现在某些实施例中)从给定的算法导出,即,通过由涉及通过本地高速缓存代理(或代表)朝向/来自源节点的传输的内在化例程组合用于收到的包的例程。
在一个实施例中,高速缓存遵守以下约束1.高速缓存将产生PRL当且仅当行处于I状态。
2.高速缓存将产生PRIL当且仅当行处于I或S状态。
3.高速缓存将产生PWL当且仅当行处于M状态。
4.高速缓存可以从S、F和E状态自由转换到I状态。
5.高速缓存可以从E状态自由转换到M状态(假设发生了写入)6.其他情况下,高速缓存只有当完成了它发布的请求或从对等节点收到请求时才能转换。
下面描述的基本协议只包括PRL、PRIL和PWL请求并且使用涉及与所传送的数据一起被传递的冲突列表的冲突解决方法。该基本协议的扩展和可选项包括在下面的章节中。
基本MESIF协议请求产生调用高速缓存产生对(非活动)地址的新请求算法将地址标记为活动的如果请求是PRL或PRIL发送请求到所有其他对等节点和源节点如果请求是PWL发送请求到源节点请求由源节点接收调用在源节点接收请求算法如果请求是PWL开始向存储器写入(处理转发、取消未完成的读取等)
将ACK发送回请求者如果请求是PRL或PRIL开始从存储器读取(如果在收到READ前完成读取则缓冲数据等)请求由对等节点接收调用在对等节点接收请求(PRL或PRIL)算法如果地址正被转发缓冲进入的请求否则如果地址不是活动的监听高速缓存否则如果地址是活动的如果活动请求是PWL缓冲进入的请求——结束如果如果进入的请求在活动请求的冲突列表中如果活动请求是PRL以CNFL响应否则(活动请求是PRIL)以CNFLI响应否则如果活动请求在“数据阶段”(见下面的收集响应)缓冲进入的请求否则将请求者加入(活动请求的)冲突列表如果进入的请求是PRIL在冲突列表中将请求者标记为PRIL冲突者如果活动请求是PRL以CNFL响应否则(活动请求是PRIL)以CNFLI响应监听响应调用请求被提交(作为监听)到高速缓存以产生适合的响应算法基于当前的高速缓存状态和进入请求的类型,在下面的表中查找响应和下一个状态(下一个状态是S/I是指高速缓存可以将行移动到两者中的任一状态;注意即使无效掉本地拷贝,对于PRL也发送DATA_F——见下面的PRL DATA_E/M响应选项)响应下一个状态状态 PRL PRIL PRLPRILI IACK IACK I IS SACK IACK S/IIF DATA_FDATA_ES/IIE DATA_FDATA_ES/IIM DATA_FDATA_MS/II如果PRL监听命中处于M状态的高速缓存行开始PWL请求缓冲监听(拖延发送DATA_F直到写回完成)否则如果监听命中高速缓存行(处于M、E或F状态)将地址标记为正在被转发将高速缓存行改变为下一个状态发送响应到请求者收集响应调用PRL/PRIL请求从对等节点接收响应算法如果响应是SACK(只对PRL)记录系统中共享拷贝的存在否则如果响应是DATA记录对来自响应节点的被转发数据的接收发送高速缓存行和新状态到高速缓存(注意行还不是全局可见的)否则如果响应是CNFL将响应节点加入冲突列表否则如果响应是CNFLI将响应节点加入冲突列表将响应节点标记为PRIL冲突者——结束如果如果所有的对等节点都已经响应将请求标记为正处于“数据阶段”如果数据响应被接收发送CNCL、转发节点和冲突列表到源节点否则发送READ和冲突列表到源节点在源节点取消调用源节点接收CNCL(包括转发节点和冲突列表)算法取消未完成的读取(如果有的话)将请求节点标记为这个地址的“当前所有者”发送DACK到转发节点如果无冲突发送ACK到请求节点——无冲突的被高速缓存的历程完成否则将冲突列表合并为这个地址的“未完成的请求”——等待READ,以便XFR数据在源节点读取请求调用源节点接收READ(包括冲突列表)算法如果没有当前所有者如果数据不可用等待读取完成发送DATA_E到请求节点如果冲突列表为空发送ACK到请求节点——无冲突的未被高速缓存的历程完成否则将冲突列表合并为这个地址的“未完成的节点”否则将未完成的冲突加入这个地址的“未完成的节点”将请求节点从“未完成的节点”移除如果没有(剩余的)未完成的节点发送XFR(目标请求节点)到“当前所有者”发送ACK到请求节点——历程结束否则如果一个或多个未完成的节点(包括请求者)是PRIL发送XFRI(目标请求节点)到“当前所有者”
否则发送XFR(目标请求节点)到“当前所有者”将请求节点标记为“当前所有者”传送接收调用请求者接收XFR或XFRI(包括目标节点)算法如果还未收到数据则等待数据如果收到XFRI发送PRIL监听到高速缓存否则发送PRL监听到高速缓存将冲突列表(没有接收节点)添加到DATA包发送DATA包到目标节点被传送的数据接收调用请求者接收作为XFR的结果的DATA(包括冲突列表)算法发送数据到处理器将冲突列表合并进入当前的冲突列表如果缓冲请求与冲突列表中的条目匹配以CNFL响应各相匹配的请求转发DACK调用转发节点收到DACK算法取消地址的正在转发标记按照接收对等请求的算法,服务被缓冲的请求请求ACK
调用请求者接收来自源节点的ACK算法如果活动请求是PWL将高速缓存行切换为期望的下一个状态(E或I)如果被缓冲的监听(PRL命中处于M状态的行)发送DATA F到请求者将高速缓存行改变为下一个状态(S)或I状态否则(请求是PRL或PRIL)释放被缓冲的请求(即,把它们当作刚到达节点那样来处理)如果还没有收到数据则等待数据发送ACK到处理器<<<===基本协议结束===>>>
PIL请求在上面的协议算法中,节点将高速缓存行从F状态移动到E状态的唯一方法是使行无效(将行改变为I状态),然后请求PRIL。这涉及DATA传送。
为了支持直接的F->E转变,可以使用PIL请求。该请求发送到所有的对等节点和源节点,并且引起其他高速缓存无效它们的行的共享拷贝。为了防止正在处理的PRIL和/或PRL干扰转变,可以给PIL更高的优先权。
对基本协议的改变请求产生调用高速缓存产生对(非活动)地址的新请求算法将地址标记为活动的如果请求是PRL或PRIL
发送请求到所有其他对等节点和源节点>>如果请求是PIL>> 发送请求到所有其他的对等节点如果请求是PWL发送请求到源节点请求由对等节点接收调用在对等节点接收请求(PRL或者PRIL)对算法唯一的变化是如果有活动的PIL请求则缓冲请求,对于活动的PWL也是如此。
PIL请求由对等节点接收调用在对等节点接收PIL请求算法发送PIL监听到高速缓存行监听响应与新的响应/下一个状态表一起使用的同样的算法(因为处于F和F、E、M状态的请求者是互相排他的,所以没有PIL的F、E和M的条目)响应 下一个状态状态 PRL PRIL PIL PRLPRILPILI IACK IACK IACKI I IS SACK IACK IACKS/II IF DATA_FDATA_ES/IIE DATA_FDATA_ES/IIM DATA_FDATA_MS/II
收集响应调用PIL请求接收来自对等节点的响应算法如果所有的对等节点都已经响应告知高速缓存将行移动到E状态释放所有被缓冲的请求——PIL请求完成M->S PWL和立即响应PRL命中处于M状态的行的行为结果是在转发数据之前写回(发布PWL)的需要。利用一些细微的变化,可以同时地转发和写回数据。直到源节点已经从请求者/胜利者接收了PWL请求和CNCL两者,它才发送DACK。
对基本协议的改变请求由源节点接收调用在源节点接收请求算法如果请求是PWL开始向存储器写入(处理转发、取消未完成的读取等)>>如果PWL是对于PRL-命中-M>> 如果收到CNCL>>发送DACK到CNCL中表明的转发节点>> 否则>>将地址标记为正在被写回>> 否则>>向请求者发送回ACK
如果请求是PRL或者PRIL开始从存储器读取(如果收到READ之前读取结束,则缓冲数据)监听响应调用请求被提交(作为监听)到高速缓存以产生适合的响应算法如同在基本协议里那样进行响应/下一个状态查询如果监听命中高速缓存行(处于M、E或F状态)将地址标记为正被转发将高速缓存行改变为下一个状态如果PRL监听命中处于M状态的高速缓存行开始标记为PRL-命中-M写回的PWL发送DATA_F到请求者,标记为PRL-命中-M否则发送响应到请求者收集响应算法区别在于当发送CNCL时,记录PRL-命中-M数据和通知源节点特定的转发否则如果响应是DATA记录对来自响应节点的被转发数据的接收如果PIL请求并且命中M(通过DATA表明)将转发节点标记为PRL-命中-M发送高速缓存行和新状态到高速缓存(注意行还不是全局可见的!)如果所有的对等节点都已经响应如果收到了数据响应发送CNCL、转发节点(标记为PRL-命中-M,如果它是的话)和冲突列表到源节点在源节点取消调用源节点收到CNCL(包括转发节点和冲突列表)算法唯一的区别在于确定是否发送DACK如果转发节点做了PRL-命中-M写回如果已经收到PWL发送DACK到转发节点否则将地址标记为需要写回否则发送DACK到转发节点转发DACK没有区别。被发布的PWL被当做单发包(one-shot packet)(或者由DACK完成的请求)。
FM状态用于PRL命中处于M状态的行的另一个可选方案是向MESIF引入FM状态。这个状态表示已修改的行的共享的拷贝。当处于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响应选项)响应 下一个状态状态 PRLPRIL PIL PRLPRILPILI IACK IACK IACKI I IS SACK IACK IACKS/II IF DATA_F DATA_ES/IIE DATA_F DATA_ES/IIM DATA_FMDATA_MS/IIFM DATA_FMDATA_FM S/II如果监听命中高速缓存行(处于M、E或F状态)将地址标记为正被转发将高速缓存行改变为下一个状态发送响应到请求者无冲突数据与被传送的数据一起发送冲突列表对于硬件是有问题的。如果处于传送链中间的请求知道它们处于中部并且被允许在接收被传送的数据之后(以IACK/SACK)响应被缓冲的请求,则有可能避免这个冲突。这允许所有其他的相冲突节点取得进一步改进,从而获得剩下的到源节点的READ。
利用这个选项,请求(PRL和PRIL,即读取请求)经过四个阶段1)发送阶段——发送请求2)收集阶段——收集响应(随后发送READ或CNCL)3)数据阶段——等待数据4)保持阶段——在冲突链的中间,保持数据直到XFR,发送IACK/SACK到被缓冲的和进入的请求。
在这个实施例中,如果在被传送的DATA上没有附带的ACK,则请求将知道它处于链的中间。只有这个保持阶段不同于基本协议。实际上,基本协议的数据阶段或者维持不变(对于无冲突的请求或在历程/冲突链末端的请求)或者被分为两个阶段,第一个仍为数据阶段,第二个现在为保持阶段,当接收XFR结束。
对基本协议的改变请求由对等节点接收对算法的唯一改变是检查是否有活动的请求在它的保持阶段如果地址正被转发{与前面相同}否则如果地址不是活动的{与前面相同}否则如果地址是活动的如果活动请求是PWL{与前面相同}如果进入的请求在活动请求的冲突列表中{与前面相同}否则如果活动的请求处于“保持阶段”如果进入的请求是PRL以SACK(或者如果前一个PRIL得到IACK则以IACK)响应否则——进入的请求是PRIL将活动的请求标记为需要无效以IACK响应否则如果活动请求在“数据阶段”{与前面相同}否则{与前面相同}收集响应对这个算法的唯一的变化是如果请求发送CNCL并且它的冲突列表是空则请求被完成。换句话说,系统进行高速缓存到高速缓存的传送并且无冲突;剩下要作的唯一的事是通知不需要被ACK的源节点。
注意CNCL请求(带有冲突)保持在数据状态等待XFR,即,它不进入保持阶段。
在源节点取消调用源节点收到CNCL(包括转发节点和冲突列表)算法取消未完成的读取(如果有的话)将请求节点标记为这个地址的“当前所有者”发送DACK到转发节点如果无冲突——无冲突的被高速缓存的历程完成否则将冲突列表合并为这个地址的“未完成的请求”——等待READ,以便XFR数据在源节点读取请求调用源节点接收READ(包括冲突列表)算法如果没有当前所有者如果数据不可用有必要的话,开始读取等待读取完成发送DATA_E到请求节点如果冲突列表为空——无冲突的未被高速缓存的历程完成否则将冲突列表合并为这个地址的“未完成的节点”——等待READ,以便XFR数据否则将未完成的冲突加入这个地址“未完成的节点”将请求节点从“未完成的节点”中移除如果没有(剩余)未完成的节点发送XFR+ACK(目标请求节点)到“当前所有者”——历程完成否则如果一个或多个未完成的节点(包括请求者)是PRIL发送XFRI(目标请求节点)到“当前所有者”否则发送XFR(目标请求节点)到“当前所有者”将请求节点标记为“当前所有者”传送接收这里的变化(除了处理XFR+ACK之外)是确定在处理阶段期间,IACK响应是否伪装成是对于PRIL的。如果是的话,使用监听使行无效。
调用请求者接收XFR、XFR+ACK或XFRI(包括目标节点)算法如果还未收到数据,则等待数据如果收到XFRI或者请求被标记为需要无效发送PRIL监听到高速缓存否则发送PRL监听到高速缓存——结束如果如果接收XFR+ACK发送DATA+ACK包到目标节点否则发送DATA包到目标节点被传送的数据接收调用请求者接收DATA或DATA+ACK作为XFR的结果(请求者处于数据阶段,所以它知道这是通过XFR)算法发送数据到处理器如果收到DATA包将请求移动到保持阶段对于每个被缓冲的请求如果被缓冲的请求是PRL以SACK(或者如果前一个PRIL获得IACK则以LACK)响应否则——被缓冲的请求是PRIL将本地请求标记为需要无效以IACK响应否则——收到DATA+ACK——请求完成并且历程完成PRL DATA_E/M响应当PRL监听命中高速缓存行,不论高速缓存是否将行从S转换为I,它都必须以DATA_F响应以维持正确性。当转换为I时,有可能支持发送DATA_E,但是它要求另外的与高速缓存的通信来让它知道它收到的E状态需要被降级为F。基本上,此算法是如果节点已经收到DATA_E接着接收SACK,它必须将高速缓存状态从E改变为F。
权利要求
1.一种方法,包括由具有相冲突的消息所请求的数据的有效拷贝的对等节点解决来自多对等节点的对数据块的所述相冲突的请求;以及如果没有唯一的被高速缓存的拷贝由一个所述对等节点存储,则由对应于所述所请求数据的源节点解决对所述数据块的相冲突的请求。
2.如权利要求1所述的方法,其中,由对等节点解决相冲突的请求包括从不具有所述所请求数据的有效拷贝的对等节点接收已经传输了对所述所请求数据的相冲突的请求的对等节点的列表;以及向来自所述列表的目标对等节点传输所述所请求数据的拷贝。
3.如权利要求2所述的方法,其中,向所述目标对等节点传输所述所请求数据的拷贝还包括向所述目标对等节点传输除去所述传输对等节点的所述列表。
4.如权利要求2所述的方法,还包括接收来自对应于所述所请求数据的源节点的确认消息。
5.如权利要求2所述的方法,还包括改变与由向所述目标节点传输所述请求的所述对等节点存储的所述所请求数据的拷贝相联系的状态。
6.如权利要求1所述的方法,其中,由所述源节点解决相冲突的请求包括从对等节点接收已经传输了对于所述所请求数据的相冲突的请求的对等节点的列表;以及从所述源节点向来自所述列表的目标对等节点传输所述所请求数据的拷贝。
7.如权利要求6所述的方法,其中,向所述目标节点传输所述所请求数据的拷贝还包括向所述目标节点传输除去所述传输节点的所述列表。
8.如权利要求1所述的方法,其中,所述数据块包括高速缓存行。
9.一种系统,包括多个具有高速缓存存储器以产生对于数据的请求的对等节点,所述对等节点具有所述所请求数据的有效的被高速缓存的拷贝以解决相冲突的请求,并向所述多个请求对等节点中的一个提供所述所请求的数据;和对应于所述所请求数据的与所述对等节点相耦合的源节点,如果没有对等节点存储所述所请求数据的有效的被高速缓存的拷贝,则所述源节点解决所述相冲突的请求。
10.如权利要求9所述的系统,其中,所述所请求数据包括高速缓存行。
11.如权利要求9所述的系统,其中,一个或多个所述请求对等节点向所述对等节点传输产生相冲突的请求的对等节点的列表以解决所述冲突。
12.如权利要求11所述的系统,其中,解决所述相冲突的请求的所述对等节点向来自所述列表的目标节点传输所述所请求数据的拷贝。
13.如权利要求12所述的系统,其中,解决所述相冲突的请求的所述对等节点还向所述目标节点传输除去所述传输节点的所述列表的拷贝。
14.如权利要求9所述的系统,其中,一个或多个所述请求对等节点向所述源节点传输产生相冲突的请求的对等节点的列表。
15.如权利要求14所述的系统,其中,所述源节点向来自所述列表的目标节点传输所述所请求的数据的拷贝。
16.如权利要求15所述的系统,其中,解决所述相冲突的请求的所述对等节点还向所述目标节点传输除去所述传输和目标节点的所述列表的拷贝。
17.如权利要求9所述的系统,其中,对等节点包括处理器与所述处理器相耦合的高速缓存存储器;和与所述处理器相耦合的外部存储器;
18.如权利要求9所述的系统,还包括代表与所述对等节点和所述源节点相耦合的多节点的代理。
19.一种设备,包括用于由具有相冲突的消息所请求的数据的有效拷贝的对等节点解决来自多对等节点的对数据块的所述相冲突的请求的装置;和在没有唯一的被高速缓存的拷贝由一个所述对等节点存储的情况下,用于由对应于所述所请求的数据的源节点解决对所述数据块的相冲突的请求的装置。
20.如权利要求19所述的设备,其中,所述用于由对等节点解决相冲突的请求的所述装置包括用于从不具有所述所请求数据的有效拷贝的对等节点接收已经传输了对所述所请求数据的相冲突的请求的对等节点的列表的装置;和用于向来自所述列表的目标对等节点传输所述所请求数据的拷贝的装置。
21.如权利要求19所述的设备,其中,用于由所述源节点解决相冲突的请求的所述装置包括用于从对等节点接收已经传输了对所述所请求数据的相冲突的请求的对等节点的列表的装置;和用于从所述源节点向来自所述列表的目标节点传输所述所请求数据的拷贝的装置。
22.如权利要求19所述的装置,其中,所述数据块包括高速缓存行。
23.一种节点,包括用于对应于预定的地址范围存储原始的和被写回的数据的拷贝的存储器;用于存储所请求数据块的拷贝的高速缓存存储器;和与所述存储器和所述高速缓存存储器相耦合的接收来自对等节点的消息的控制电路,所述消息具有对存储于所述存储器中的数据块的拷贝的请求,以及,如果有的话,已经发布了相冲突的请求消息的节点的列表,所述控制电路向所述请求对等节点提供所述所请求数据的拷贝,所述控制电路还从来自所述列表的节点接收后来的相冲突的请求,并且向先前的所述请求节点发送消息以向后来的所述请求节点发送所述所请求数据的拷贝。
24.如权利要求23所述的节点,其中,所述数据块包括高速缓存行。
25.如权利要求23所述的节点,其中,所述控制电路包括处理器。
26.如权利要求23所述的节点,其中,所述控制电路包括存储器控制器。
27.如权利要求23所述的节点,其中,所述控制电路还向所述请求对等节点提供所述列表的拷贝。
28.一种方法,包括从对等节点接收消息,所述消息具有对存储于存储器中的数据块的拷贝的请求,以及,如果有的话,已经发布相冲突的请求消息的节点的列表;向所述请求对等节点提供所述所请求数据的拷贝;从来自所述列表的节点接收后来的相冲突的请求;以及向先前的所述请求节点发送消息以向后来的所述请求节点发送所述所请求数据的拷贝。
29.如权利要求28所述的方法,其中,所述数据块包括高速缓存行。
30.如权利要求28所述的方法,还包括向转发节点发送确认消息。
31.一种设备,包括用于从对等节点接收消息的装置,所述消息具有对存储于存储器中的数据块的拷贝的请求,以及,如果有的话,已经发布相冲突的请求消息的节点的列表;用于向所述请求对等节点提供所述所请求数据的拷贝的装置;用于从来自所述列表的节点接收后来的相冲突的请求的装置;以及用于向先前的所述请求节点发送消息以向后来的所述请求节点发送所述所请求数据的拷贝的装置。
32.如权利要求31所述的设备,其中,所述数据块包括高速缓存行。
33.如权利要求31所述的设备,还包括用于向转发节点发送确认消息的装置。
34.一种方法,包括从多节点系统中的节点接收消息,所述消息表明一个或多个已经发布了对数据块拷贝的相冲突的请求的节点;从已经发布了所述相冲突的请求的各节点接收表明与另一个请求的冲突的消息;向发送表明冲突的消息的第一个节点发送所述所请求数据的拷贝;以及响应于后来的表示冲突的消息,向当前所有者节点发送消息,以引起所述当前所有者节点向另一个节点发送所述所请求数据的拷贝。
35.如权利要求34所述的方法,其中,所述数据块包括高速缓存行。
36.如权利要求34所述的方法,其中,当前所有者包括具有从相应的源节点接收的所述数据块拷贝的节点或者具有来自先前的当前所有者的最近被转发的所述数据块拷贝的节点。
全文摘要
一种冲突解决技术,提供了一致性,使得如果各节点在做出它自己的请求之后监视所有请求,则所有冲突可以由相冲突的请求者的至少一个检测到。如果行处于独有、已修改或者转发状态,则在保存有唯一拷贝的节点解决冲突。冲突解决的胜利者,可能还有失败者,向源节点报告冲突,源节点将冲突报告配对并且发布转发指令以保证所有请求节点最终接收到所请求的数据。如果所请求的高速缓存行是未被高速缓存的或者只存在于共享状态中,则源节点提供高速缓存节点的拷贝并且解决冲突。在一个实施例中,在所有响应之后直到接收到确认消息的阻断周期允许所有的冲突节点知道它们所涉及的冲突。
文档编号G06F12/08GK1508696SQ20031011823
公开日2004年6月30日 申请日期2003年12月8日 优先权日2002年12月19日
发明者罗伯特·H·比尔斯, 赫伯特·H·J·胡姆, 詹姆斯·R·古德曼, H J 胡姆, R 古德曼, 罗伯特 H 比尔斯 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1