满足部分读取和非监听访问之间的访存顺序要求的制作方法

文档序号:6579235阅读:252来源:国知局
专利名称:满足部分读取和非监听访问之间的访存顺序要求的制作方法
技术领域
本发明涉及高速点对点互连链路,并且具体地,涉及用于实现一致互连架构的一致性协议。
背景技术
当电子系统包括多个高速缓冲存储器时,系统中保存的数据的有效性或一致性被维持,以确保数据操作的完整性。经常通过根据高速缓存一致性协议处理数据来实现一致性。随着高速缓存和/或处理器数目的增加,维持一致性的复杂性也增加,而这可能导致系统的多个组件之间发生更多冲关。
例如,当多个组件(例如高速缓冲存储器、处理器)请求相同数据块时,以维持该数据的有效性的方式解决多个组件之间的冲突。之前的高速缓存一致性协议典型地具有负责解决冲突的单个组件。然而,随着系统复杂性的增加,依靠单个组件解决冲突可能会降低整个系统的性能。
一般地,存在两种基本方案来提供高速缓存一致性监听(snooping)(现在通常称为对称多处理(SMP))和目录(directory)(通常称为分布式共享存储器(DSM))。这两种方案之间的根本不同围绕在元信息的放置和访问方面;即,关于在哪里保存高速缓存行(cache line)的拷贝的信息。
对基于目录的方案来说,除了存储着未缓存数据的 固定位置之外,还存在一个固定单元,即目录,来指示缓存拷贝驻留在哪里。为了以新的方式访问高速缓存行,节点必须与包含目录的节点进行通信,包含目录的该节点通常和包含未缓存数据存储库的节点是同一节点,由此允许应答方节点在主存储拷贝有效时提供数据。在目录系统中,这样的节点被称为归属节点(home node)。
目录可以用两种方式进行分布。第一,主存储数据(未缓存存储库)通常分布在节点之间,并且目录以相同的方式进行分布。第二,元信息自身可以被分布,在归属节点处仅保留关于行是否被缓存的信息,并且如果被
缓存的话,则还保留关于单个拷贝驻留在哪里的信息。例如,SCI使用该
方案,其中包含被缓存的拷贝的每个节点维持到具有被缓存的拷贝的其它节点的链路,由此共同维持完整的目录。
对于监听高速缓存,元信息与缓存拷贝自身一同被分布,从而由单元来保存高速缓存行的每个有效拷贝,所述单元识别访问该高速缓存行的请求,并相应地作出应答。典型地,存在着其中保存未缓存状态的数据的存储库,即数据的原始位置。通常,对该原始位置负责的代理或单元被称为归属节点。当请求访问高速缓存行时,请求方节点通常将被请求的高速缓存行的地址与所需许可一同广播,而保存着被请求的高速缓存行的拷贝的节点相应地作出应答。
然而,在当前一些一致性和消息传送协议中,在特定环境下对高速缓存行的部分读取和非监听存储器访问(即一致架构中的非一致访问)可能导致将无效数据转发给请求者。通常,这些环境是由于违反了协议内的访存
顺序(memory ordering)规则而引起。因此,接收到无效数据的代理可能执行非法操作,这可能导致系统内的不稳定性。


本发明通过实例的方式说明,并且并不受附图的限制。图l说明了协议架构的实施例。
图2说明了包括多个处理器的系统的实施例,所述多个处理器耦合到利用点对点互连的芯片组。
图3说明了用于双向互连架构的框图的实施例,所述架构利用分层的
输入/lr出(i/o)栈。
图4a说明了用于多个节点之间可能导致访问无效数据的消息传送协议的协议图的实施例。
图4b说明了用来响应于部分和非监听存储器访问来提供有效数据的协议图的实施例。
图5a说明了用于多个节点之间可能导致访问无效数据的消息传送协议的协议图的另一实施例。图5b说明了用来响应于部分和非监听存储器访问来提供有效数据的协议图的另一实施例。
具体实施例方式
在下面的描述中,阐述了许多特定细节,例如特定互连架构、特定消息、特定伪码、特定互连架构层等的实例,以提供对本发明的透彻理解。然而,将对本领域技术人员显而易见的是,并不是必须采用这些特定细节来实践本发明。在其它实例中,未详细描述熟知的组件或方法,例如特定的互连层架构细节、特定的非相关消息和协议、处理器和高速缓存的特定操作细节等,以免不必要地混淆本发明。
本文描述的方法和装置用于在互连架构中提供部分访问和非监听存储器访问之间适当的访存顺序。特别地,对访存顺序要求的遵守主要参照说明性的、基于高速缓存一致链路的互连架构来进行讨论。然而,用于提供适当的访存顺序要求的方法和装置并不限于此,它们可以用任何互连架构来实现。
说明性的互连架构的实施例
图l说明了高度简化的协议架构的实施例。在一个实施例中,该协议架构在正常事务以及请求冲突期间要维持架构中高速缓存内的数据之间的数据一致性。此外,在一个实施例中,该协议架构还为每个请求提供转发进度(forward progress),使得每个请求得到满足并引退(retire)。
协议架构可以包括任意数目的节点或代理。在一个实施例中,节点包括与内部高速缓冲存储器、外部高速缓冲存储器和/或外部存储器相关联的处理器。然而,节点或代理可以是指互连架构中的任何设备或其集合,例如处理器、存储器控制中心、和I/O中心、通用控制中心、I/O设备、I/O设备的集合、或者能够访问存储器的任何其它设备/组件。在另一实施例中,节点是与其它电子系统互连的电子系统(例如计算机系统、移动设备)。其它类型的节点配置也可以被使用。
如所说明的,架构100包括缓存节点/代理105-106和归属代理110-112。在一个实施例中,归属代理110-112用于保护作为一致存储空间的最后存储库的存储位置。换言之,代理110是对一致存储空间的数据的多个原始物理存储位置负责的归属代理。归属代理110-112可以执行以下任务的任意组合,所述任务包括跟踪来自缓存代理105-106的缓存状态转换、管理缓存代理105-106中的冲突、与存储器接口、提供数据和/或所有权,以及任何其它已知的归属代理相关的任务。
在一个实施例中,缓存代理105-106包括与高速缓冲存储器相关联的代理,例如包括高速缓冲存储器和缓存I/O代理实体的处理器。缓存代理105-106可以执行以下任务以及任何其它任务的任意组合,例如执行对一致存储空间的读取和写入请求、保存来自一致存储空间的数据的缓存拷贝,以及将缓存拷贝提供给其它对等缓存代理。缓存代理或节点也可以被称为相对于另一缓存代理的对等代理/节点。尽管未在图1中特别说明,但是所述协议架构还可以包括非缓存代理,例如代表I/O设备来参与或见证(witness)事务的输入/输出(I/O)中心。
在一个实施例中,缓存代理105-106和归属代理110-112通过在网络结构101上交换消息来维持数据一致性并提供转发信息。在一个实施例中,结构101有助于通过点对点互连网络将消息从一个代理/节点传送到另一个代理/节点。通常说图1描绘了基础网络的高速缓存一致性协议的概要视图。
在一个实施例中,互连架构100可以并入下面共同未决申请中所描述的新颖特征的任意组合。例如,标题为"Forward State for Use in CacheCoherency in a Multi-Node System"的美国申请6,922,756描述了转发高速缓存一致性状态(F-状态)的利用。此外,在下面的申请中讨论了各种情形下的 一致性协议的实例,所述申请包括:所递交的标题为"A Two-Hop CacheCoherency Protocol"的申请No. XX/XXX,XXX(代理人巻号为P15925)、所递交的标题为"AMessaging Protocol"的申请No. XX/XXX,XXX(代理人巻号为P18890)、所递交的标题为"A Cache Coherence Protocol"的申请No.XX/XXX,XXX(代理人巻号为P118891)、所递交的标题为"A Two-HopSource Snoop Based Cache Coherence Protocol " 的申请 No,XX/XXX,XXX(代理人巻号为P22376)、以及所递交的标题为"A Two-HopSource Snoop Based Messaging Protocol"的申请No. XX/XXX,XXX(代理人巻号为P23106)。
10其它实例包括2002年递交的标题为"Speculative Distributed ConflictResolution for a Cache Coherency Protocol"的申请No. 10/XXX,XXX(代理人巻号为P13923); 2002年递交的标题为"Hierarchical Directories for CacheCoherency in a Multiprocessor System"的申请No. 10/XXX,XXX(代理人巻号为P13984); 2002年递交的标题为"Hierarchical Virtual Model of a CacheHierarchy in a Multiprocessor System"的申请No. 10/XXX,XXX(代理人巻号为P13985); 2002年递交的标题为"Non-Speculative Distributed ConflictResolution for a Cache Coherency Protocol"的申请No. 10/XXX,XXX(代理人巻号为P13986)。
注意,前述共同未决申请中描述的特征可以并入本文描述的实施例中;然而,本文描述的实施例并不限于此,它们可以包括额外的特征,并且可能不包括上述特征。
图2说明了包括多个处理器的系统的实施例,所述多个处理器耦合到利用点对点互连架构的芯片组。图2的系统也可以包括数个处理器,为了清楚仅示出其中两个处理器205、 210。如所说明的,处理器205、 210每一个包括两个处理部件206-207、 211-212;但是,处理器205、 210中可以包括任意数目的处理部件。
处理部件是指线程单元、处理单元、上下文(context)、逻辑处理器、硬件线程、核心、和/或能够保持处理器的状态的任何其它部件,所述状态例如执行状态或架构状态。换言之,在一个实施例中,处理部件是指能够与代码独立相关联的任何硬件,所述代码例如软件线程、操作系统、应用程序或其它代码。作为一个实例,物理处理器典型地是指可能包括任意数目的其它处理部件(例如核心或硬件线程)的集成电路。
核心通常是指位于集成电路上能够维持独立架构状态的逻辑,其中,每个独立维持的架构状态与至少一些专用的执行资源相关联。与核心相反,硬件线程(也可以称为物理线程)典型地是指位于集成电路上能够维持独立架构状态的任意逻辑,其中,所独立维持的架构状态共享对执行资源的访问。因此,如所看到的,在一个实施例中,诸如单线程应用程序的多个拷贝这样的多个软件线程能够在多个处理部件上被并行执行,所述多个处理部件可以包括前述处理部件(诸如核心或硬件线程)的任意组合。在处理器205、 210中还说明了资源208、 213,其典型地包括寄存器、单元、逻辑、固件、存储器以及用于执行代码或与其它设备接口的其它资源。如上所述, 一些资源110可以部分或全部专用于处理部件,而其它资源在处理部件之间共享。例如,可以针对物理线程来复制较小的资源,例如指令指针和重命名逻辑。可以通过分区来共享一些资源,例如重排序/引退单元中的重排序缓冲器、指令旁路转换缓冲器(ILTB)、加载/存储缓冲器以及队列。其它资源,诸如通用内部寄存器、页表基址寄存器、低级别数据高速缓存、数据TLB、执行单元以及无序(out-of-order)单元,可能在线程之间被全部共享。相反,核心可以具有专用的执行资源,同时共享至少一部分的较高级别高速缓存,例如二级高速缓存(L2)。
在一个实施例中,资源208、 213包括处理器流水线,所述处理器流水线可以包括任意数目的流水线级。流水线级的普通实例包括指令指针级、取址级、解码级、驱动级、和分配级、重命名级、队列级、重排序级、调度级、分派级、执行级、存储器访问级以及寄存器访问级。注意,这些级的列表包括处理器流水线级的示例性非穷举列表,处理器100中可以包括任何己知的流水线级。
处理器205、 210每一个还可以包括与存储器209、 214相应地有接口的存储器控制器或本地存储器控制器中心(MCH)。存储器209、 214包括任意存储器件,例如随机存取存储器(RAM)、高速缓冲存储器、闪存或其它存储器件。在一个实施例中,存储器214包括高级别高速缓冲存储器,而资源213包括低级别高速缓冲存储器。在另一实施例中,存储器209包括与处理器205相关联的动态随机存取存储器(DRAM),所述处理器包括高速缓冲存储器,以缓存来自DRAM 209的数据。注意,这只是说明性的实施例,因为存储器209、 214可能包括任何类型的存储器件。
在一个实施例中,在存储器209、 214包括高速缓冲存储器(被包含在处理器205、 210内或者如所说明的那样在其外部)的情况下,处理器205、210能够作为归属节点和对等缓存节点。例如,当事务引用了存储器209中的存储位置时,对存储器209负责的代理,即处理器205,被确定为与所述事务和所述存储位置相关的归属代理。类似地,在事务引用了诸如存储器214中的存储位置这样的另一存储位置的情况下,处理器205被确定为对等缓存代理。
如所看到的,点对点链路220-224以点对点方式将组件耦合到一起。 在一个实施例中,物理链路220-224每一个包括双向差分信号互连,例如 与下面参照图3讨论的物理层相关联的物理链路。因此,处理器205、 210 和芯片组230能够相互直接通信。
芯片组230通常是对例如耦合到输人/输出(I/0)中心的存储器控制器 中心这样的多种集成电路的通称。然而,在一个实施例中,在每个代理包 括一个版本的与存储器有接口的存储器控制器中心的情况下,芯片组230 是指I/O中心或其它控制器中心。在一个实施例中,如上所讨论的,芯片 组230是参与或见证事务的非缓存代理。然而,芯片组230并不限于此, 这是因为在其它实施例中,芯片组230是包括高速缓冲存储器的缓存代理, 和/或包括以下这样的存储器的归属代理,所述存储器具有数据的原始存储 位置存储库。
如所说明的,芯片组230还与多种互连和I/O设备有接口,例如外围 组件互连(PCI)或PCI Express (PCI-E)设备261 、集成设备电子技术(IDE)或 高级传输附件(ATA)设备262、通用串行总线(USB)设备263、局域网(LAN) 或无线LAN(WLAN)设备264、音频设备265以及其它I/O设备266,其还 可以包括用于如本文所描述那样耦合I/O设备的其它互连架构。
参照图3,说明了利用分层互连栈的双向互连架构的框图的实施例。 对图3中的各层(例如,物理层302)的参考包括针对通用层的讨论,其可以 用不同的代理来实现,例如物理层302a和物理层302b。如所描绘的,互 连栈被划分成5层,其中的一层或更多层基于设计实现可能是可选的。例 如,在一个实施例中,路由层304被嵌入在链路层303的功能中;因此, 在一个实施例中,路由层不是独立的并且不同的层。
在一个实施例中,物理层302负责信息在物理介质上的电子传送。例 如,在链路层实体303a和303b之间利用物理点对点链路。作为说明性的 实例,物理链路包括差分信号方案,该方案包括双向差分信号对351和352。 这里,物理层可能在逻辑上被分成电子子块和逻辑子块,从而该物理层将 该栈的剩余部分与信息的电子传送隔离,并与链路层303进行通信。
在一个实施例中,链路层303从该栈的较高层中抽象出(abstmct)物理层302,并提供链路相关的服务,例如所连接的代理/实体之间的可靠数据 传送与流控制,和到多个虚拟通道与消息类的物理通道/接口的虚拟化。这 里,虚拟通道可以视为供该栈的较高层使用的多个虚拟网络。例如,协议 层306可能依靠由链路层303提供的抽象来将协议消息映射到消息类,并 因此映射到一个或更多虚拟通道。在一个实施例中,路由层304提供用于将分组从源路由到目的地的灵 活方法。如上所述,在极简单的拓扑中,路由层304可以是非显式的,而 是集成到链路层303的功能中。例如,路由层304可以依靠链路层303的 抽象来指定<端口,虚拟网络>对,以路由分组。这里,路由表信息被保存 以提供用于分组的路由信息。在一个实施例中,传输层305提供端到端的可靠传输服务。与路由层 304类似,传输层305基于设计实现也是可选的。例如,传输层305依靠 路由层304的服务来为协议层306提供可靠传输支持。在一个实施例中, 在互连架构内,组件子集包括传输层305。因此,该组件子集定义了分组 的关于传输层305的子字段,而其它组件可能未定义这些子字段。在一个实施例中,协议层306用于实现节点/代理之间较高级别的通信 协议,例如高速缓存一致性、排序、对等通信、中断传递等。换言之,协 议层306针对节点或代理(例如,归属节点、对等节点、缓存节点以及非缓 存节点滩应地定义了可允许的消息、请求、应答、阶段(phase)、 一致性状 态等。下面讨论消息的实例,例如归属节点消息、监听消息,应答消息等。注意,对各层及其相关联的逻辑的讨论可以用任何方式耦合。例如, 可以说协议逻辑被耦合到物理层,即发射或接收逻辑。这里,如可以从图 3看到的,在一个实施例中,协议逻辑可以并不直接耦合到物理层逻辑, 而是通过其它层逻辑来耦合。此外,在一个实施例中,互连栈被耦合到内 部组件逻辑,例如高速缓存控制或高速缓冲存储器逻辑,以启动适当的高 速缓存一致性操作。MESIF协议的实施例概述在一个实施例中,基本的已修改(Modified)、独占(Exclusive)、共享 (Shared)、无效(Invalid)、转发(Forward)(MESIF)协议提供了与监听协议类 似的协议,同时不存在单个串行化总线的潜在限制。和 听高速缓存协议一样,MESIF依靠具有数据的缓存拷贝的节点来维持一致性。使用点对点 链路而非同步的集中式广播引入了时间异常(time warp)的问题,即,存在 的情况是,从不同节点角度来看,事件似乎以不同顺序发生。例如,MESIF 协议通过识别由于时间异常造成的潜在差错并提供针对其的协议或软件解 决方案,来处理时间异常。归属节点通常与数据的未缓存拷贝相关联。因此,归属节点可以参与 和该归属节点相关联的数据有关的事务。然而,归属节点并不必被包括在 与事务相关联的"关键路径"中,相反,归属节点可以插入(interject)到该 事务中来解决冲突和时间异常问题。在一个实施例中,因为该方案的并发 广播特性,MESIF实现了与监听协议相关联的低时延,同时,在特定情况 下以最小可能时延(单个请求-应答往返)获取了数据的可缓存拷贝。在一个实施例中,关于MESIF协议的基本事务包括,将初始请求广播 到所有对等节点以及归属节点。如果被缓存的一个拷贝处在状态E、 F或 M—致性状态中,则该拷贝被包含在应答中。然后,第二消息被发送到归 属节点,来向其通知该请求已被满足。如果所请求的行未被缓存,或者仅 存在S状态拷贝,则发送到归属节点的第二请求被用来确认之前的请求, 归属节点这时可能已经从它的存储器中取得该行。在任意一种情况中,出 于同步和解决冲突的目的,归属节点对第二请求作出应答(并且可能对第一 请求作出应答,尽管这两个请求有时可能被组合)。注意,归属节点可以具 有一个或更多高速缓存,所以它可以如任何其它节点一样对初始请求作出 应答。在一个实施例中,以分布式的方式来处理冲突。因为单独的请求可能 被延迟任意长的时间,所以时间异常问题使得很难检测到冲突。然而,如 果每个节点都在作出请求之后监视冲突,那么将会检测到冲突。尽管多个 节点都可能检测到冲突,但是作为例子,其中至少一个节点将检测到冲突。 因此,在一个实施例中,来自节点的应答可能包括冲突信息。在一个实施例中,从应答中接收到该数据的拷贝的节点被允许在接收 到该数据时立即在内部使用该数据,但是不会让使用该数据的效果对系统 的其它部分可见(即全局可见),直到该节点接收到确认。所述确认还可以 包括这样的指令,即请求方节点必须将其拷贝转发到另一节点,以及可能从它自己的高速缓存中逐出(evict)该节点。最后,当一个节点通过提供缓存数据来对来自于另一节点的请求作出 应答时,在一个实施例中,该节点推迟其针对同一高速缓存行所接收的其 它请求,直到该节点从归属节点接收到一个应答(其承认了该节点转发了所 述数据的事实),由此确保所有节点观察到该高速缓存行(可能可写)的相同 的传送顺序。如上所述,归属节点是用于未缓存数据的存储库,但是该归属节点也 可以包括处理器和高速缓存。在这里,当归属节点处理器未命中高速缓存 时,归属节点向所有其它(对等)节点广播请求,并且归属节点内部处理该 请求,就像它是到达该归属节点的任何其它请求一样。注意,这是一种特 殊情况,因为归属节点并不显式地向其自身(该归属节点)发送消息。此外, 当针对本地缓存的数据的外部请求到达时,归属节点适当地作出应答。所公开的消息协议定义了在一致性(缓存和归属)代理、非缓存代理以 及其它代理(存储器控制器、处理器等等)之间所允许的一组消息。 一致性 协议使用所述消息作为算法中的词汇和语法来表达一致思想。该算法聪明 地对请求进行排序、解决了冲突,并且描述了缓存代理之间的交互。尽管 上面描述了 MESIF协议,但是并非要求使用MESIF高速缓存一致性协议。 例如,可以不使用转发状态,这导致使用已知的MESI协议。此外,注意 上面的讨论包括MESIF协议的实施例的示例性概述。所以,上面描述的各 个组件可以在单独的实施例中有所不同。下面包括了在消息传送和/或一致 性协议中使用的可能消息的非穷举示例性列表。监听消息在一个实施例中,监听消息被发往缓存代理(例如,对等缓存代理)。 监听消息通常不包括归属节点标识符(ID),使得它们被路由到对等缓存代 理,但是不路由到归属节点。监听数据(Snoop Data, SnpData):这是一个用于得到E、 F或S状态 下的数据的监听。监听失效拥有(Snoop Invalidate Own, SnpInvOwn):这是一个用于得 到E或M状态下的数据的监听。在一个实施例中,响应于在其本地存储器 中将该数据保持在E或M状态,对等代理提供该数据。监听失效无效至独占(Snoop Invalidate Invalid to Exclusive, SupIiivItoE):这是一个用于使对等缓存代理失效并将任何M状态数据转 储(flush)到归属节点的监听。监听失效X至无效(Snoop Invalidate X to Invalid, SnpInvXtoI):这是一个用于使对等缓存代理失效并将任何M状态数据转储到归属节点的监 听。监听失效无转发(Snoop Invalidate No Forward, SnpInvNoFwd):这是一个用于获得数据的监听,其使对等代理(l)将数据写回保持在特定高速缓 存一致性状态的存储器,(2)使本地存储器中保存的该数据失效,并且(3) 不将该数据直接提供给请求方节点。在一个实施例中,对等代理写回保持 在M状态的数据。在其它实施例中,对等代理还写回保持在E状态、S状 态、F状态或其组合的数据。 归属消息以下消息与归属节点相关联。例如,以下消息中的一些是针对归属节 点的请求消息。实际上,要注意, 一些监听消息和归属消息之间存在相似 性。例如,上面的SnpInvNoFwd和下面的RdlnvNoFwd是类似的,区别在 于该监听消息被发往对等缓存代理,而该读取消息被发往归属节点。因此, 通常说SnpInvNoFwd和RdlnvNoFwd都是同一种消息类型,例如读取失效 类型、监听失效类型、读取失效无转发类型,以及监听失效无转发类型。其它归属消息包括归属写回标记消息。这里,可以通过WbData消息 来单独发送数据,所述WbData消息可以按关于所述标记消息的任何顺序 被接收。下面包括的归属消息的其它实例是从缓存代理到归属代理的归属 监听应答消息,和针对用于告知冲突阶段开始的冲突消息的归属承认。读取数据(Read Data, RdData):这是对独占(E)状态以及可能的转发(F) 状态或S状态(取决于实施例)的数据的请求。读取失效拥有(Read Invalidate Own, RdlnvOwn):这是一个对M或E 状态的高速缓存行的请求。失效无效至独占(Invalidate Invalid to Exclusive, InvItoE):这是一个 对没有数据的高速缓存行的请求。非监听读取(Non-Snoop Read, NonsnpRd):这是一个执行对存储器的17非监听写入(Non-Snoop Write, NonSnpW):这是一个执行对存储器的 非一致写入的请求。读取失效无转发(Read Invalidate No Forward, RdlnvNoFwd):这是一个从存储器读取数据的请求。在一个实施例中,响应于接收到该消息,归 属节点等待从缓存代理写回的数据,然后在接收到写回的数据之后将正确 数据提供给请求方代理。在另一实施例中,归属节点从被引用的行保持在 无效状态的对等缓存代理处接收应答消息。这里,归属节点提供来自其本 地存储器或原始存储器存储库的正确数据。注意,如上所讨论的,RdlnvNoFwd与SnpInvNoFwd消息类似;然而, 通常对于监听消息来说,归属节点标识符(ID)未包括在该消息中,从而监 听消息未被路由到归属节点,而RdlnvNoFwd被路由到归属节点。写回已修改至无效、共享或独占(WriteBack Modified to Invalid, Shared, or Exclusive, WbMtoI、 WbMtoS和WbMtoE):这是一个将M状 态下的高速缓存行写回存储器并相应地将该高速缓存行状态转换为无效状 态、共享状态或独占状态的请求。在一个实施例中,这些消息是指示要发 送数据的标记消息,同时实际通过诸如\^*0站^消息的这样单独消息来 运送所述数据。应答无效或共享(Response Invalid or Shared, Rspl或RspS):对等代理相应地被留有无效状态或S状态下的行。应答转发无效或共享(Response Forward Invalid or Shared, RspFwdl 或RspFwdS):对等代理已经将数据发送给请求者,并且相应地将该行留为无效或共享状态。应答转发无效或共享写回(Response Forward Invalid or Shared Writeback^ RspFwdIWb或RspFwdSWb):对等代理已经将数据发送给请 求者并将WbIData发送给归属节点,并且相应地将该行留为无效或共享状 态。应答无效或共享写回(Response Invalid or Shared Writeback RespIWb或RespSWb):对等代理已经将数据逐出,同时发送WbIData消息给归属节点,并且未将任何消息发送给请求者。应答冲突(Response Conflict, RspCnfit):对等代理被留有无效状态下 的行,并且该对等代理具有冲突的未解决请求。承认冲突(Acknowledge Conflict, AckCnflt):数据完成/准许和完成/强 制承认沖突的承认接收。非数据应答消息在一个实施例中,非数据应答消息包括准许消息,用来准许对一个行 的所有权而不发送数据。非数据应答消息还可以包括完成消息,用来告知 完成、并且可能在冲突条件下从拥有者提取数据。准许完成(Grant—Completion, GntCmp):准许独占所有权而没有数据。准许强制承认冲突(Grant Force Acknowledge Conflict, Gnt_FrcAckCnflt):准许独占所有权而没有数据,加上强制承认冲突。 完成(Completion, CMP):所有监听应答都被收集到,并且未检测到冲突。强制承认冲突(Force Acknowledge Conflict, FrcAckCnflt):监听应答 被收集,用于承认冲突。完成转发失效拥有(Complete Forward Invalidate Own, Cmp—FwdlnvOwii):完成请求,将独占或己修改状态下的行转发给请求者, 并使本地拷贝失效。数据应答消息DataC—*:对应的MESIF状态下的数据。DataC—*_Cmp:具有完成消息的对应ESIF状态下的数据。DataC_*_FrcAckCnflt:具有FrcAckCnflt消息的对应ESIF状态下的、j',.- i-口数据。Wb*Data:写回数据,转换到对应的E、 S或I状态。 非监听写入数据(Non-Snoop Write Data, NonSnpWr):这是对存储器 的非一致写入。转至图4a,说明了用于在多个节点之间传送消息的协议图的实施例。 说明了四个节点或代理I/O中心、归属节点、具有高速缓存的处理器A 以及具有高速缓存的处理器B。注意,如所描绘的,处理器A、 B包括对等缓存代理,而i/o中心是非缓存代理,即见证方。图4a中说明的协议是响应于以下极其简化的交互模式 处理器B: X=l //B对数据X进行写入 处理器A: If(X=l) Y=l //A执行X的部分读取并对Y进行写入<formula>formula see original document page 20</formula>IOH执行Y和X的非监听读取 这里,注意,在一个实施例中,互连架构支持部分存储器访问和非监 听存储器访问。例如,部分存储器访问,也可以称为不可缓存(UC)存储器 访问,其包括对高速缓存行的一部分的访问。这里,该高速缓存行的一些 可能包括无效数据,所以根据存储器访问来更新或读取一部分。此外,非 监听存储器访问是指来自诸如I/O中心这样的非缓存代理的非一致存储器 访问。特别参考图4a,处理器B执行对数据X的写入,即X=l。响应于来 自处理器A的对数据X的部分读取,RdlnvOwn(X)消息被发送到归属节点, SnpInvOwn(X)消息被发送到对等代理B。因为B当前保存与数据X相关 联的处于已修改状态下的高速缓存行,所以响应于接收到SnpInvOwn(X), 代理B将DataCLM(X-l)消息中的数据X提供给请求方代理A,并将 RspFwdI(X)消息发送到归属节点,以指示它已经将该数据提供给请求方代 理A、并且已经将该高速缓存行留在无效状态,即LLC-M,I。这里,归属 节点将completion(X)消息发送到处理器A,以指示该事务的完成。然而,在代理B将数据发送到请求方代理A之后,并且在代理A接 收到完成消息之前,代理B发出请求数据X的请求消息,即SnpInvOwn(X), 其被用虚线图示为单独的事务。结果,代理A检测到关于数据X的冲突。 因此,代理A将RspCnflt发送到归属节点,并且随后响应于接收到数据/ 完成而发送AckCnflt(X)。因此,作为冲突仲裁者的归属节点将Cmp一FwdlnvOwn发送到代理A。 作为响应,代理A用消息标记RspIWb(X)和数据消息WbIData(X-l)将X=l 写回归属节点,并且代理A执行对Y的可缓存写入,即Y-1。这里,用标 记WbMtoI(Y)和数据消息WbIData(Y-l)将Y=l写回归属节点。然而,来自代理A的、用以提供X的值1的写回消息由于许多原因而被延迟了。同时,非缓存代理I/O中心执行Y的非监听读取,即 NonSnpRd(Y),和X的非监听读取,即NonSnpRd(X)。如可以从图中看到 的,在响应于NonSnpRd(X)的DataC—LCmp(X-0)消息中,由于从代理A 到归属节点的写回消息的延迟,X具有值0而不是1。实质上,无效值O 而非有效值1被提供给I/O中心,这是在归属节点处接收到正确数据之前 较早的部分读取被巻入冲突并且非监听读取被非缓存代理执行的结果。这里,可能的问题可以被概括为,读取失效拥有消息可能使对等代理 (B)将已修改拷贝转发到部分读取请求者(A)而不未写回存储器,而此时A 达到全局观察并将X的正确值提供回归属节点,归属节点可能己经将错误值提供给了i/o中心。因此,在一个实施例中,特定消息类型被用于部分存储器访问,例如 部分读取。在一个实施例中,这种消息类型包括针对对等代理的监听失效 消息,用于指示相关联的高速缓存行应该被无效并且不应被转发到部分读 取请求者。此外,在另一实施例中,该消息还用于向对等代理指示处于特 定高速缓存一致性状态(例如,已修改状态)的数据应该被写回存储器,即 归属节点。类似地,在一个实施例中,这种特定消息类型包括针对归属节点的读 取失效消息,而非针对对等代理的监听失效消息。在一个实施例中,响应 于接收到读取失效消息,归属节点要将正确数据提供给部分读取请求者。 这里,提供正确数据可能包括,等待接收到监听消息的缓存代理写回保持 在特定高速缓存一致性状态(例如,已修改状态)的该数据的拷贝,并将该 拷贝提供给部分读取请求者。在另一实施例中,提供正确数据可能包括, 从保持有无效状态的该高速缓存行的对等代理处接收应答,并将归属节点 中该数据的本地拷贝或来自与归属节点相关联的原始存储库的该数据的拷 贝提供给部分读取请求者。作为第一个实例,该消息类型包括读取失效无转发(RdINvNoFwd)消 息,其中发往对等代理的监听失效消息包括监听失效无转发(SnpInvNoFwd) 消息,发往归属节点的读取失效消息包括读取失效无转发消息。然而,消 息类型和消息并不限于此。实际上,在另一实施例中,使用另一种监听失 效消息,例如SnpInvItoE或SnpInvXtoI。这里,如上面所讨论的,监听在21进行无效,并且通过消息本身或者通过通用协议的实现来指示不将数据直 接从接收方代理转发到部分读取请求方代理。图4b说明了用来响应于部分和非监听存储器访问而提供有效数据的 协议图的实施例。和图4a的图类似,同一代理被巻入前述交互模式中。然 而,在这里,替代响应于代理A的部分读取请求而将RdlnvOwn(X)消息发 送到归属节点并将SnpInvOwn(X)消息发送到对等代理B的是,响应于该 部分读取请求,将RdlnvNoFwd(X)消息发送到归属节点并将 SnpInvNoFwd(X)消息发送到对等代理B。这里,当对等代理B接收到SnpInvOwn(X)消息时,与该数据相关联 的高速缓存行被保持在已修改高速缓存一致性状态。因此,该数据的已修 改拷贝(即X-l)通过消息RspIWb(X)和WblData(X4)被写回(即被推回)归 属节点,而不是和图4a中那样将该数据直接提供给部分读取请求者代理 A。然后,与图4a类似的协议流继续冲突阶段。然而,注意,当I/0中心 请求NonSnpRd(X)(即非监听读取)时,即使在非监听读取之后发生RspI(X) 的延迟,有效数据X-1也已经被写回存储器。因此,在该实施例中,针对 部分读取使用监听失效无转发消息而非监听失效拥有消息使得纠正了前述 的可能问题。换言之,响应于针对部分读取的监听失效无转发消息,数据 未被直接转发到部分读取请求者,而是在I/O中心进行非监听读取之前进 行已修改数据的写回。转至图5a,说明了用于可能导致访存顺序破坏的不同场景的协议图的 实施例。图5a中说明的协议是响应于以下示例性交互模式IOH: Data-New; Flag =New; 〃对数据和标志的非监听写入A: If(Flag=New) assert (Data=New); 〃数据和标志的部分读取 B: Read Data = Old; 〃数据的可缓存读取 首先,代理B发起数据的高速缓存一致读取事务。RdData和SnpData 消息被发送到归属节点和对等代理A。对等节点A用Rspl对归属节点作 出应答,以指示与数据相关联的高速缓存行被留在无效状态。因此,归属 节点将DataCJE—Cmp消息提供给代理B,该消息使该高速缓存行转换到于O(即旧值)。此夕卜,I/O中心或制造者发起与归属节点的非监听写入事务,该事务导致数据和标志的每一个都被更新为新值, 即值l。然后,消费者代理A发起标志和数据的部分读取事务。然而,当对等 代理B接收到SnpInvOwn(D)时,代理B将与数据相关联的高速缓存行保 持在独占状态。结果,对等代理B将其数据的缓存拷贝(即等于旧值的数据) 和RspFwdI消息提供给归属节点。不幸地,替代取得制造者(即I/O中心) 存放(deposit)在存储器中的数据的最新拷贝,A的数据读取导致B的高速 缓存中的旧拷贝被转发到A,即使A的标志读取的确从存储器获得了最新 拷贝。例如,假设I/O中心正在代表与处理器A进行通信I/O设备执行非监 听写入。理想情况下,处理器A检查标志以査看新数据什么时候到达,这 允许处理器执行其它操作,直到数据已经准备好被处理。然而,在所说明 的一组条件中,处理器A读取该标志为新值,以指示新数据已经到达,并 且可能基于该新标志值对相信为新数据的无效/旧数据进行操作。从而,这 种访存顺序破坏可能导致无效执行。转至图5b,说明了用来针对前述交互模式而提供适当的访存排序的协 议图的实施例。这里,以请求、应答和完成阶段来执行原始的一致读取事 务。类似地,来自非缓存代理的非监听写入被执行,以更新数据和标志。 然而,对于标志和数据的部分读取,利用了读取失效无转发和监听失效无 转发消息。结果,对等代理在两种情况下都不将数据直接转发到消费者/ 部分读取请求方代理A。替代地,在该实施例中,利用被保持在独占状态 下的数据,Rspl被发送到归属节点,并且该高速缓存行被转换到无效状态。 此夕卜,归属节点揚供已被I/0中心制造者存放的正确数据,即Data-New。因此,如上面所看到的,通过使用用于部分读取的协议消息来使对等 代理失效并且不转发它们的缓存拷贝,避免了由部分读取和非一致存储器 访问导致的访存顺序破坏。上面讨论了访存顺序破坏以及可以如何纠正这 种破坏的一些说明性实例。此外,通过使用这些消息,部分访问和非一致 访问之间可能的许多交互模式也是可纠正的。此夕卜,在一个实施例中在协 议逻辑内实现这些协议消息可能使得导致访存顺序破坏的遗留软件的风险减小,减小软件程序员遵从软件限制以强制访存顺序所带来的负担,并且 支持新的硬件和软件使用模型。在这里使用的模块是指任何硬件、软件、固件或其组合。通常被图示 为分离的模块边界一般是变化的并且有可能重叠。例如,第一模块和第二 模块可以共享硬件、软件、固件或其组合,同时可能保留一些独立的硬件、 软件或固件。在一个实施例中,术语逻辑的使用包括硬件,例如,晶体管、 寄存器或者其它硬件,例如可编程逻辑器件。然而,在另一实施例中,逻 辑也可以包括与硬件集成的软件或代码,例如固件或微码。在这里使用的值包括数字、状态、逻辑状态或二值逻辑状态的任何己知表示。通常,对逻辑电平或者逻辑值的使用也被称为1或o,这简单地 表示二值逻辑状态。例如,1指高逻辑电平而o指低逻辑电平。在一个实施例中,储存单元,例如晶体管或闪存单元,可以具有保持单个逻辑值或 者多个逻辑值的能力。然而,已经使用了计算机系统中值的其它表示。例如,十进制数字10也可以被表示为二进制值1010,以及十六进制字母A。 因此,值包括能够被保持在计算机系统中的信息的任何表示。此外,状态可以由值或者值的部分来表示。例如,第一值,例如逻辑 1,可以表示默认或初始状态,而第二值,例如逻辑0,可以表示非默认状 态。另外,在一个实施例中,术语重置和置位分别指默认的和更新的值或 状态。例如,默认值可能包括高逻辑值,即重置,而更新的值可能包括低 逻辑值,即置位。注意,值的任何组合可以被用来表示任何数量的状态。上面阐述的方法、硬件、软件、固件或代码集的实施例可以通过储存 在可由处理部件执行的机器可访问或机器可读介质上的指令或代码来实 现。机器可访问/可读介质包括提供(即储存和/或传送)机器(例如,计算机 或电子系统)可读形式的信息的任何机制。例如,机器可访问介质包括随机 存取存储器(RAM),如静态RAM (SRAM)或动态RAM (DRAM); ROM; 磁或光储存介质;闪存器件;电储存器件、光储存器件、声储存器件或其 它形式的传播信号(例如,载波、红外信号、数字信号)储存器件等等。例 如,机器可以通过从能够保存要在传播信号上传送的信息的介质接收所述 传播信号(例如,载波)来访问储存器件。在说明书中通篇提到"一个实施例"或者"一实施例"意指结合该实施例描述的特定特征、结构或特性被包括在本发明的至少一个实施例中。 因此,短语"在一个实施例中"在说明书中各处出现并非全都指同一实施 例。此外,所述特定的特征、结构或特性可以在一个或更多实施例中以任 何适当的方式组合。在前述说明书中,已经参照特定的示例性实施例给出了详细的描述。 然而显而易见的是,可以对本发明作出各种修改和改变而不偏离如所附权 利要求书中所给出的本发明的宽泛精神和范围。因此,说明书和附图是要 被视为说明性的而非限制性的。此外,前面对实施例和其它示例性语言的 使用并非必须指同一实施例或同一实例,而是可以指不同的或相异的实施 例,以及可能地指同一实施例。
权利要求
1、一种装置,包括协议层逻辑,用于生成与数据元素的读取相关联的第一消息,其中,所述第一消息向对等代理指示与所述数据元素相关联的高速缓存行要被无效,并且所述对等代理不将所述高速缓存行转发到请求方代理;以及物理层逻辑,其耦合到所述协议层逻辑,用于将监听消息发送到所述对等代理。
2、 根据权利要求1所述的装置,其中,所述第一消息包括监听失效无转发消息。
3、 根据权利要求2所述的装置,其中,所述协议层逻辑还用于生成要被路由到与所述数据元素相关联的归属代理的读取失效无转发消息。
4、 根据权利要求1所述的装置,其中,所述第一消息包括监听失效消息。
5、 根据权利要求1所述的装置,其中,所述数据元素的所述读取包括从所述高速缓存行对所述数据元素的部分读取。
6、 根据权利要求1所述的装置,其中,所述协议层逻辑在互连层栈中被耦合到所述物理层逻辑,从而所述互连层桟包括所述物理层逻辑、链路层逻辑以及所述协议层逻辑。
7、 根据权利要求6所述的装置,其中,所述物理层逻辑耦合到链接至所述对等代理的串行点到点链路,并且其中,所述协议层逻辑实现MESIF高速缓存一致性协议。
8、 一种装置,包括接收逻辑,用于接收引用了数据的监听失效消息;高速缓冲存储器,其包括保存着所述数据的高速缓存行;以及协议逻辑,其耦合到所述接收逻辑和所述高速缓冲存储器,所述协议逻辑用于响应于所述接收逻辑接收到引用了所述数据的所述监听失效消息并且所述高速缓存行被保持在第一高速缓存一致性状态,生成所述数据向与该数据相关联的归属节点的写回、并且发起所述高速缓存行从所述第一高速缓存一致性状态到无效高速缓存一致性状态的转换。
9、 根据权利要求8所述的装置,其中,所述协议逻辑还用于响应于所述接收逻辑接收到引用了所述数据的所述监听失效消息,不直接将所述数据提供给与所述监听失效消息相关联的请求方代理、而不管所述高速缓存行被保持在何种高速缓存一致性状态。
10、 根据权利要求9所述的装置,其中,所述第一高速缓存一致性状态是已修改高速缓存一致性状态。
11、 根据权利要求10所述的装置,其中,所述协议逻辑还用于响应于所述接收逻辑接收到引用了所述数据的所述监听失效消息并且所述高速缓存行被保持在独占或共享状态,将应答无效消息提供给与所述数据相关联的归属节点。
12、 根据权利要求8所述的装置,其中,所述监听失效消息是从由监听失效无转发消息、监听失效无效至独占消息和监听失效X至无效消息构成的组中选出的。
13、 根据权利要求8所述的装置,其中,所述协议逻辑和所述接收逻辑在逻辑上被组织到互连层栈中,其中,所述互连层栈至少包括包含所述接收逻辑的物理层、链路层以及包含所述协议逻辑的协议层。
14、 根据权利要求8所述的装置,其中,所述接收逻辑被耦合到高速点到点链路。
15、 一种系统,包括第一对等节点,用于实现第一互连栈,所述第一互连栈包括第一协议层和第一物理层,所述第一协议层用于生成引用了数据元素的第一消息和第二消息,所述第一物理层用于将所述第一消息发送到归属节点并将所述第二消息发送到第二对等节点;其中,所述第二对等节点通过点到点链路被耦合到所述第一对等节点,所述第二对等节点包括高速缓冲存储器并且实现第二互连栈,所述高速缓冲存储器保存着所述数据元素的缓存拷贝,所述第二互连栈包括第二物理层和第二协议层,所述第二物理层用于接收所述第二消息,所述第二协议层用于响应于所述第二物理层接收到所述第二消息,不将所述数据元素的所述缓存拷贝直接转发到所述第一对等节点、并使所述数据元素的所述缓存拷贝转换到无效一致性状态;并且其中,所述归属节点通过点到点链路被耦合到所述第一对等节点并且实现第三互连栈,所述第三互连栈包括第三物理层和第三协议层,所述第三物理层用于接收所述第一消息,所述第三协议层用于响应于所述第三物理层接收到所述第一消息,生成数据消息以将所述数据元素的正确拷贝提供给所述第一对等节点。
16、 根据权利要求15所述的装置,其中,所述第二协议层还用于生成应答消息,以向所述归属节点指示所述缓存拷贝留在无效状态,并且所述第二物理层还用于响应于所述第二物理层接收到所述第二消息并且所述数据元素的所述缓存拷贝在所述高速缓冲存储器中被保持在独占或共享一致性状态,将所述应答消息发送到所述归属节点。
17、 根据权利要求15所述的装置,其中,所述第二协议层还用于生成写回消息,以将所述数据元素的所述缓存拷贝提供给所述归属节点,并且所述第二物理层还用于响应于所述第二物理层接收到所述第二消息并且所述数据元素的所述缓存拷贝在所述高速缓冲存储器中被保持在已修改一致性状态,发送所述写回消息以将所述数据元素的所述缓存拷贝提供给所述归属节点。
18、 根据权利要求17所述的装置,其中,所述第三协议层生成所述数据消息以将所述数据元素的正确拷贝提供给所述第一对等节点包括响应于所述第三物理层接收到所述第一消息并从所述第二对等节点接收到所述数据元素的所述缓存拷贝,所述第三协议层生成所述数据消息以提供所述数据元素的所述缓存拷贝。
19、 根据权利要求18所述的装置,其中,所述第一消息包括读取失效消息,所述第二消息包括监听失效消息,并且所述数据消息包括写回标记消息和写回数据消息,并且其中,所述第一协议层用于响应于所述数据元素的部分读取而生成所述读取失效消息和所述监听失效消息。
20、 根据权利要求19所述的装置,其中,所述读取失效消息包括读取失效无转发(RdlnvNoFwd)消息,所述监听失效消息包括监听失效无转发(SnpInvNoFwd)消息,所述写回标记消息包括应答无效写回(RspIWb)消息,并且所述写回数据消息包括写回无效数据(WbIData)消息。
21、 一种方法,包括请求方节点生成引用了数据的第一消息;对等节点接收引用了数据的所述第一消息;以及响应于所述对等节点接收到所述第一消息,不直接将保存在所述对等节点的高速缓冲存储器的高速缓存行中的所述数据的拷贝转发到所述请求方节点、并使所述高速缓存行无效。
22、 根据权利要求21所述的方法,其中,请求方节点生成引用了数据的第一消息包括响应于所述请求方节点的部分读取请求,在所述请求方节点中实现的互连栈的协议层内生成引用了数据的所述第一消息。
23、 根据权利要求21所述的方法,还包括响应于所述对等节点接收到所述第一消息,确定所述高速缓存行是否处于已修改高速缓存一致性状态;以及响应于确定所述高速缓存行处于所述已修改高速缓存一致性状态,将所述对等节点的高速缓冲存储器的高速缓存行内保存的所述数据的所述拷贝推送到归属节点。
24、 根据权利要求23所述的方法,还包括响应于确定所述高速缓存行未处于所述已修改高速缓存一致性状态,将应答消息从所述对等节点发送到所述归属节点,以指示所述数据的所述拷贝在高速缓存行中被保持在无效高速缓存一致性状态。
25、 根据权利要求24所述的方法,还包括响应于所述归属节点从所述对等节点接收到所述应答消息,将所述数据从所述归属节点转发到所述请求方节点,以及响应于所述归属节点接收到从所述对等节点推送至所述归属节点的所述数据的所述拷贝,将从所述对等节点推至所述归属节点的所述数据的所述拷贝从所述归属节点转发到所述请求方节点。
26、 根据权利要求25所述的方法,其中,所述第一消息包括监听失效无转发(SnpInvNoFwd)消息。
27、 根据权利要求25所述的方法,其中,所述请求方节点、所述对等节点以及所述归属节点每一个均通过点到点串行链路相互互连。
全文摘要
本文描述了用于考虑到部分和非一致存储器访问而在基于高速缓存一致链路的互连中保持访存顺序的方法和装置。在一个实施例中,利用读取失效和/或监听失效消息来实现部分存储器访问,例如部分读取。当对等节点从请求方节点接收到引用了数据的监听失效消息时,所述对等节点使与所述数据相关联的高速缓存行失效,并且不直接将所述数据转发到所述请求方节点。在一个实施例中,当所述对等节点保存着处于已修改一致性状态下的所引用的高速缓存行时,响应于接收到所述监听失效消息,所述对等节点将所述数据写回与所述数据相关联的归属节点。
文档编号G06F12/08GK101625663SQ20091015874
公开日2010年1月13日 申请日期2009年7月7日 优先权日2008年7月7日
发明者C-T·舒, J·瓦什, R·H·比尔斯, R·J·沙弗拉内克 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1