CN102439571B - 一种防止节点控制器死锁的方法及装置 - Google Patents
一种防止节点控制器死锁的方法及装置 Download PDFInfo
- Publication number
- CN102439571B CN102439571B CN2011800021394A CN201180002139A CN102439571B CN 102439571 B CN102439571 B CN 102439571B CN 2011800021394 A CN2011800021394 A CN 2011800021394A CN 201180002139 A CN201180002139 A CN 201180002139A CN 102439571 B CN102439571 B CN 102439571B
- Authority
- CN
- China
- Prior art keywords
- node
- system address
- request message
- message
- monitoring information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0891—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0808—Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0817—Cache consistency protocols using directory methods
- G06F12/0828—Cache consistency protocols using directory methods with concurrent directory accessing, i.e. handling multiple concurrent coherency transactions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
- G06F12/0833—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
Abstract
一种防止节点控制器死锁的方法,包括:本节点的NC接收任一节点发送的请求消息并写入处理队列,该请求消息用于请求系统地址;NC监测其它节点上是否缓存有包含上述系统地址的缓存数据块,若是,则将其它节点上缓存中包含上述系统地址的缓存数据块进行无效处理,使NC接收到HA传送的第一监听消息时直接回应反馈消息至HA,而避免将第一监听消息写入处理队列被请求消息阻塞;第一监听消息用于监听其它节点上是否缓存有上述系统地址;反馈消息用于指示其它节点上缓存的上述系统地址无效,使HA将其存储的上述系统地址传送给CA;NC将已写入处理队列的请求消息传送给HA。本发明实施例可以防止节点控制器死锁,避免NUMA系统崩溃。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种防止节点控制器死锁的方法及装置,应用于非一致内存访问(Non-Uniform Memory Access,NUMA)系统。
背景技术
传统的NUMA系统的结构如图1所示,由第一节点N0、第二节点N1和第三节点N2这三个节点构成,这三个节点之间通过节点网络(NodeInterconnect)相连。其中,第一节点N0中包括一个节点控制器(NodeController,NC),一块系统内存(图1未显示)以及用于管理系统内存的系统地址的本地代理(Home Agent,HA),一个处理器单元(图1未显示)及该处理器单元的缓存代理(Caching Agent,CA)。如图1所示,第一节点N0中的各个组件本地互联(Local Interconnect),第一节点N0的NC、第二节点N1以及第三节点N2之间节点互联(Node Interconnect)。其中,第二节点N1、第三节点N2可以是仅包括处理器单元及其CA的节点,或者也可以是结构类似于第一节点N0的复杂节点。
在图1所示的NUMA系统中,第一节点N0的HA用于管理的系统内存的系统地址,第一节点N0的CA、第二节点N1以及第三节点N2通过该系统地址可以实现对系统内存访问。假设第一节点N0的HA管理系统地址A,当第二节点N1和/或第三节点N2需要请求系统地址A时,第二节点N1和/或第三节点N2需要发起请求消息,并传送给第一节点N0的NC,然后由第一节点N0的NC将该请求消息传送给第一节点N0的HA,第一节点N0的HA收到该请求消息后将系统地址A传送给第一节点N0的NC,再由第一节点N0的NC传送给第二节点N1和/或第三节点N2。进一步地,假设第二节点N1已缓存(Cached)了系统地址A,而且第一节点N0的CA也需要请求系统地址A时,则第一节点N0的CA也需要发起请求消息,并传送给第一节点N0的HA,第一节点N0的HA收到其CA发起的请求消息后需要发起监听消息,并传送给第一节点N0的NC,由第一节点N0的NC将该监听消息传送给第二节点N1。第二节点N1收到该监听消息后,将反馈消息传送给第一节点N0的NC,再由第一节点N0的NC传送给第一节点N0的HA,使得第一节点N0的HA获悉第二节点缓存的系统地址A有效,进而第一节点N0的HA可以将其存储的系统地址A通过本地网络传送给第一节点N0的CA,至此第一节点N0的HA完成了对第一节点N0的CA发起的请求消息的处理。在上述过程中,第一节点N0的HA获悉第二节点N1缓存的系统地址A有效后进一步通过本地网络将系统地址A传送给CA,使CA可以使用系统地址A进行系统内存,确保了第一节点N0的CA和第二节点N1所使用的系统地址一致,从而满足NUMA系统的缓存一致性协议(CacheCoherence Protocol)的要求。
实践中发现,在图1所示的NUMA系统中,第一节点N0的NC上设有排队策略,来自第二节点N1或第三节点N2的请求消息Request先进入处理队列,使得来自第一节点N0的HA发起的监听消息Probe有可能被第二节点N1或第三节点N2发起的请求消息Request阻塞。同时,第一节点N0的HA上也设有排队策略,来自第一节点N0的CA发起的请求消息Request先进入处理队列,使来自第一节点N0的NC传送的请求消息Request也有可能被来第一节点N0的CA发起的请求消息Request阻塞,如此,第一节点N0的NC和HA之间就形成一个如图2所示的阻塞环,从而导致了第一节点N0的NC死锁,而NC死锁会永久性地消耗NUMA系统资源,最终会导致NUMA系统崩溃。
发明内容
针对上述缺陷,本发明实施例提供的一种防止节点控制器死锁的方法及装置,主要应用于NUMA系统,能够防止节点控制器死锁,从而避免死锁导致NUMA系统性能下降或者崩溃。
一种防止节点控制器死锁的方法,应用于NUMA系统,包括:
本节点的节点控制器接收任一节点发送的请求消息,并将所述请求消息写入处理队列;所述请求消息用于请求系统地址;
所述节点控制器监测其它节点上是否缓存有包含所述系统地址的缓存数据块,若是,则将所述其它节点上缓存中包含所述系统地址的缓存数据块进行无效处理,以使所述节点控制器接收到所述本节点的本地代理传送的第一监听消息时直接回应反馈消息至所述本地代理,而避免将所述第一监听消息写入所述处理队列被所述请求消息阻塞;所述第一监听消息用于监听所述其它节点上是否缓存有所述系统地址;所述反馈消息用于指示所述其它节点上缓存的所述系统地址无效,以使所述本地代理将其存储的所述系统地址传送给所述本节点的缓存代理;
所述节点控制器将已写入处理队列的所述请求消息传送给第一节点的本地代理。
一种节点控制器,应用于NUMA系统,所述节点控制器位于NUMA系统的本地节点中,所述节点控制器包括:
接收单元,用于接收任一节点发送的请求消息,并将所述请求消息写入处理队列;所述请求消息用于请求系统地址;
监测单元,用于监测其它节点上是否缓存有包含所述系统地址的缓存数据块;
处理单元,用于在所述监测单元的监测结果为是时,将所述其它节点上缓存的包含所述系统地址的缓存数据块进行无效处理;
所述接收单元,还用于接收所述本地节点的本地代理传送的第一监听消息,所述第一监听消息用于监听所述其它节点上是否缓存有所述系统地址;
传送单元,用于在所述接收单元接收到所述第一监听消息时直接回应反馈消息至所述本地代理,避免所述接收单元将所述第一监听消息写入所述处理队列单元被所述请求消息阻塞;所述反馈消息用于指示所述其它节点上缓存的所述系统地址无效,以使所述本地代理将其存储的所述系统地址传送给所述本节点的缓存代理;
所述处理队列单元,用于存储所述接收单元写入的请求消息;
所述传送单元,还用于将已写入所述处理队列单元的所述请求消息传送给所述本地代理。
一种NUMA系统,包括本地节点以及本地节点以外的其它节点,所述本地节点包括节点控制器、本地代理以及缓存代理,其中:
所述节点控制器接收所述其它节点的请求消息并将所述请求消息写入处理队列,所述请求消息用于请求系统地址;所述节点控制器监测所述其它节点上是否缓存有包含所述系统地址的缓存数据块,若是,则将所述其它节点上缓存的包含所述系统地址的缓存数据块进行无效处理,以使所述节点控制器接收到所述本地代理传送的第一监听消息时直接回应反馈消息至所述本地代理,而避免将所述第一监听消息写入处理队列被所述请求消息阻塞,所述第一监听消息用于监听所述其它节点上是否缓存有所述系统地址;所述反馈消息用于指示所述其它节点上缓存的所述系统地址无效,以使所述本地代理将其存储的所述系统地址传送给所述缓存代理;所述节点控制器将已写入处理队列的所述请求消息传送给所述本地代理。
本发明实施例中,本节点的节点控制器在接收到任一节点发送的请求消息并写入处理队列后,先监测其它节点上是否缓存有包含该系统地址的缓存数据块,若监测发现其它节点上缓存有包含该系统地址的缓存数据块,则节点控制器将其它节点上缓存的包含该系统地址的缓存数据块进行无效处理,后续节点控制器接收到本节点的本地代理传送的第一监听消息时,由于节点控制器已经无效掉了其它节点上缓存的包含该系统地址的缓存数据块,使得节点控制器不需要再向其它节点传送该第一监听消息,直接回应反馈消息给HA即可,避免了节点控制器将该第一监听消息写入处理队列被请求消息阻塞,从而解开了节点控制器与HA之间相互依赖的阻塞环,防止了节点控制器发生死锁,避免了NUMA系统因为节点控制器发生死锁而崩溃。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明实施例的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为传统的NUMA系统的结构示意图;
图2为传统的NUMA系统的NC发生死锁的流程示意图;
图3为本发明实施例一提供的防止节点控制器死锁的方法流程示意图;
图4为本发明实施例二提供的防止节点控制器死锁的方法流程示意图;
图5为本发明实施例三提供的一种节点控制器的结构示意图;
图6为本发明实施例三提供的另一种节点控制器的结构示意图;
图7为本发明实施例四提供的NUMA系统的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明实施例提供了一种防止节点控制器死锁的方法、节点控制器以及NUMA系统,可以防止节点控制器死锁,避免NUMA系统因为节点控制器死锁而崩溃。下面通过具体实施例进行说明。
实施例一:
请参阅图3,图3为本发明实施例一提供的一种防止节点控制器死锁的方法,应用于NUMA系统。如图3所示,该方法可以包括以下步骤:
301、本节点的节点控制器(NC)接收任一节点发送的请求消息,并将该请求消息写入处理队列,该请求消息用于请求系统地址。
在NUMA系统中,NC上设置有排队策略,用于请求系统地址的请求消息传送至NC后,NC需要将该请求消息写入处理队列进行排队,然后按照处理权限(即处理的先后顺序)进行处理。
在NUMA系统中,任一节点根据所请求的系统地址可以访问系统内存。
在NUMA系统中,本节点可以是中央处理器单元(Central ProcessingUnit,CPU),或者可以是对称多处理(Symmetric Multi Processing,SMP)系统,本发明实施例不作限定。
302、NC监测其它节点上是否缓存有包含上述系统地址的缓存数据块(Cache Line),若是,则将其它节点上缓存的包含上述系统地址的缓存数据块进行无效处理,使NC接收到本节点的HA传送的第一监听消息时直接回应反馈消息给HA,避免NC将该第一监听消息写入处理队列被请求消息阻塞;其中,第一监听消息用于监听其它节点上是否缓存有上述系统地址;该反馈消息用于指示其它节点上缓存的上述系统地址无效,以使HA将其存储的上述系统地址传送给本节点的CA。
在NUMA系统中,其它节点可以是CPU,或者可以是SMP系统,本发明实施例不作限定。
作为一种可选的实施方式,NC监测其它节点上是否缓存有包含上述系统地址的缓存数据块的实现过程可以包括以下步骤:
A1、NC向其它节点传送第二监听消息SnpData,该第二监听消息SnpData用于监测其它节点上是否缓存有包含上述系统地址的缓存数据块。
B1、NC接收其它节点传送的响应消息RapS,该响应消息RapS用于指示其它节点上是否缓存有包含上述系统地址的缓存数据块。
由此可见,通过上述步骤A1和步骤B1,NC可以实现对其它节点的监测,获悉其它节点上是否缓存有包含上述系统地址的缓存数据块。
作为一种可选的实施方式,NC将其它节点上缓存的包含上述系统地址的缓存数据块进行无效处理的实现过程可以为:
NC传送指示消息SnpInvXtoI给其它节点,其中,该指示消息SnpInvXtoI用于指示其它节点将其缓存的包含上述系统地址的缓存数据块删除或置为不可用。
进一步地,NC还可以接收其它节点传送的指示响应消息RspI,该指示响应消息RspI是其它节点根据上述指示消息SnpInvXtoI的指示,将其缓存的包含上述系统地址的缓存数据块删除或置为不可用后传送的。
在NUMA系统中,其它节点接收到NC传送的指示消息SnpInvXtoI后,可以根据该指示消息SnpInvXtoI的指示,将其缓存的包含上述系统地址的缓存数据块删除或置为不可用。其中,其它节点将其缓存的包含上述系统地址的缓存数据块删除或置为不可用的具体实现方式是本领域技术人员所公知的常识,本发明实施例此处不作详细介绍。
其中,对于NC而言,当其接收到其它节点传送的指示响应消息RspI后,即可获悉其它节点已经将其缓存的包含上述系统地址的缓存数据块进行无效处理,这样NC在后续过程中即使收到本节点的HA传送的第一监听消息也不需要再将该第一监听消息传送给其它节点了,避免了NC将该第一监听消息写入处理队列被请求消息阻塞。
303、NC将已写入处理队列的请求消息传送给HA。
本实施例中,NC在监测出其它节点上缓存有包含上述系统地址的缓存数据块,并将其它节点上缓存的包含上述系统地址的缓存数据块进行无效处理之后,可以根据处理权限(即处理的先后顺序)将已写入处理队列的请求消息传送给本节点的HA,以使HA可以根据该请求消息的请求将存储的系统地址传送给NC,再由NC将该系统地址传送给第二节点,从而使得第二节点可以采用该系统地址进行系统内存。
本实施例中,NC收到HA传送的第一监听消息后,可以传送反馈消息至HA,以使HA根据该反馈消息的指示获悉其它节点缓存的上述系统地址无效,从而HA可以将其存储的上述系统地址传送给CA,使得CA可以采用该系统地址进行系统内存访问,从而满足NUMA系统的缓存一致性协议的要求。
本实施例中,NC如果监测出其它节点上没有缓存有包含上述系统地址的缓存数据块,则NC接收到HA传送的第一监听消息后,也可以传送反馈消息至HA,使HA可以将其存储的上述系统地址传送给CA,从而完成一次握手流程。NC也不需要将该第一监听消息传送给其它节点了,从而可以避免将该第一监听消息写入处理队列被请求消息阻塞,进而避免了NUMA系统因为NC发生死锁而崩溃。
本实施例中,NC传送请求消息和接收第一监听消息的先后顺序不限定,只要NC在接收到第一监听消息之前已将其它节点缓存的包含上述系统地址的缓存数据块进行无效处理即可。本实施例中,NC已经预先获悉了其它节点已经将其缓存的包含上述系统地址的缓存数据块进行无效处理,这样NC在接收到HA传送的第一监听消息时,不需要再将该第一监听消息传送给其它节点了,从而可以避免NC将该第一监听消息写入处理队列被请求消息阻塞。由于发生死锁是因为NC和HA之间形成相互依赖的阻塞环,因此只要在NC上避免第一监听消息被请求消息阻塞,那么这个导致发生死锁的阻塞环也随之被解开,进而避免了NUMA系统因为NC发生死锁而崩溃。
本实施例中,CA传送的请求消息用于请求上述系统地址,也就是说CA与任一节点传送的请求消息所请求的系统地址相同,从而使得CA与任一节点所使用的系统地址一致,满足NUMA系统的缓存一致性协议的要求。其中,CA与任一节点传送的请求消息所请求的系统地址可以是HA管理的多个系统地址中的任意一个。
本发明实施例中,本节点的节点控制器在接收到任一节点发送的请求消息并写入处理队列后,先监测其它节点上是否缓存有包含该系统地址的缓存数据块,若监测发现其它节点上缓存有包含该系统地址的缓存数据块,则节点控制器将其它节点上缓存的包含该系统地址的缓存数据块进行无效处理,后续节点控制器接收到本节点的本地代理传送的第一监听消息时,由于节点控制器已经无效掉了其它节点上缓存的包含该系统地址的缓存数据块,使得节点控制器不需要再向其它节点传送该第一监听消息,直接回应反馈消息给HA即可,避免了节点控制器将该第一监听消息写入处理队列被请求消息阻塞,从而解开了节点控制器与HA之间相互依赖的阻塞环,防止了节点控制器发生死锁,避免了NUMA系统因为节点控制器发生死锁而崩溃。
实施例二:
请参阅图4,图4为本发明实施例二提供的一种防止节点控制器死锁的方法,应用于NUMA系统。其中,本实施例二以满足快速通道互联(QuickPath Interconnect,QPI)协议的NUMA系统为例,介绍本发明实施例中提供的一种防止节点控制器死锁的方法。进一步地,本实施例二中假设NUMA系统中的第三节点N2上缓存有包含系统地址A的缓存数据块(Cache Line)。如图4所示,该方法可以包括以下步骤:
401、第一节点N0的NC接收第二节点N1传送的用于请求系统地址A的请求消息RdData,并将请求消息RdData写入处理队列。
402、第一节点N0的NC向第三节点N2传送监听消息SnpData,该监听消息SnpData用于监测第三节点N2上是否缓存有包含系统地址A的缓存数据块。
403、第一节点N0的NC接收第三节点N2传送的响应消息RapS,该响应消息RapS用于指示第三节点N2上缓存有包含系统地址A的Cache Line。
404、第一节点N0的NC将指示消息SnpInvXtoI传送给第三节点N2,其中,该指示消息SnpInvXtoI用于指示第三节点N2将其缓存的包含系统地址A的Cache Line进行无效处理。
405、第一节点N0的NC接收第三节点N2传送的指示响应消息RspI,其中,该指示响应消息RspI是第三节点N2根据上述指示消息SnpInvXtoI的指示,将其缓存的包含系统地址A的Cache Line进行无效处理后传送的。
本实施例中,第三节点N2将其缓存的包含系统地址A的Cache Line进行无效处理是指第三节点N2将其缓存的包含系统地址A的Cache Line删除或置为不可用。
406、第一节点N0的NC将已写入处理队列的请求消息RdData传送给第一节点N0的HA。
407、第一节点N0的NC接收第一节点N0的HA传送的监听消息SnpData,其中,第一节点N0的HA传送的监听消息SnpData是第一节点N0的HA收到第一节点N0的CA传送的用于请求系统地址A的请求消息RdData后触发传送的。
408、第一节点N0的NC接收到第一节点N0的HA传送的监听消息SnpData时,立刻传送反馈消息RspCnfit至第一节点N0的HA。
本实施例中,第一节点N0的HA可以将CA传送的用于请求系统地址A的请求消息RdData以及第一节点N0的NC传送的请求消息RdData写入处理队列进行排队,并按照处理权限(即处理的先后顺序)依次进行处理。具体地,第一节点N0的HA可以根据CA传送的请求消息RdData将系统地址A传送给CA;以及根据第一节点N0的NC传送的请求消息RdData将系统地址A传送给第一节点N0的NC,再由第一节点N0的NC将系统地址A传送给第二节点N1。
本实施例中,第一节点N0的NC在接收到来自第一节点N0的HA传送的监听消息SnpData时,第一节点N0的NC已获悉了第一节点N0的另一侧所有节点(即包括第二节点N1和第三节点N2)上都不存在系统地址A的Cache Line,那么第一节点N0的NC也就不需要继续向另一侧去传送监听消息SnpData了,可以传送反馈消息RspCnfit至第一节点N0的HA,避免了第一节点N0的NC将监听消息SnpData写入处理队列被请求消息RdData阻塞,从而可以在第一节点N0的NC上解开相互依赖的阻塞环,避免了第一节点N0的NC发生死锁。
作为一种可选的实施方式,本实施例中第一节点N0的NC上除了设置排队策略之外,还可以设置以下策略:
即第一节点N0的NC在收到其它节点传送的用于请求系统地址的请求消息时,如需要向第一节点N0的HA进一步请求时(第一节点N0的NC无法实现HA的代理),必须先使其它节点所在一侧的所有包含该系统地址的Cache Line无效,然后才能进行垮域请求。
其中,所谓的垮域请求是指用于请求系统地址的请求消息从其它节点进入第一节点N0的HA。
如图4所示,第一节点N0的NC接收到来自第二节点N1传送的请求消息后,发现自身作为HA代理无法满足该请求,则第一节点N0的NC在进行垮域请求前,先按照上述设置好的策略,先将第二节点N1一侧的第三节点N2上缓存的系统地址A的Cache Line无效掉。当第一节点N0的NC接收到来自第一节点N0的HA传送的监听消息时,尽管这个时候第一节点N0的NC已经在处理来自第二节点N1的请求消息,第一节点N0的NC也可以对针对监听消息传送反馈消息至第一节点的HA。如此,第一节点N0的HA就可以先处理完来自CA的请求消息,再继续处理来自第一节点N0的NC传送的请求消息。
本实施例中,NUMA系统的第一节点N0的NC在接收到第二节点N1传送的请求消息并写入处理队列后,先将第三节点N2上缓存的包含系统地址A的Cache Line无效掉;然后NC再将已写入处理队列的请求消息传送给第一节点N0的HA。第一节点N0的NC接收到第一节点N0的HA传送的监听消息时,第一节点N0的NC已经无效掉了第三节点N2上缓存的包含系统地址A的Cache Line,使第一节点N0的NC不需要继续向第三节点N2传送该监听消息,从而可以避免第一节点N0的NC将监听消息写入处理队列被请求消息阻塞,从而解开了第一节点N0的NC与HA之间相互依赖的阻塞环,防止了第一节点N0的NC发生死锁,避免了NUMA系统因为第一节点N0的NC发生死锁而崩溃。
实施例三:
请参阅图5,图5为本发明实施例三提供的一种节点控制器,应用于NUMA系统,本实施例提供的节点控制器位于NUMA系统的某一节点中,该节点控制器可以包括:
接收单元501,用于接收任一节点发送的请求消息,并将该请求消息写入处理队列505;其中,该请求消息用于请求系统地址;
监测单元502,用于监测其它节点上是否缓存有包含上述系统地址的缓存数据块;
处理单元503,用于在监测单元502的监测结果为是时,将其它节点上缓存的包含上述系统地址的缓存数据块进行无效处理;
接收单元501,还用于接收本节点的本地代理传送的第一监听消息,该第一监听消息用于监听其它节点上是否缓存有上述系统地址;
传送单元504,用于在接收单元501接收到第一监听消息时直接回应反馈消息至本地代理,避免接收单元501将第一监听消息写入处理队列单元被请求消息阻塞;其中,反馈消息用于指示其它节点上缓存的上述系统地址无效,以使本地代理将其存储的上述系统地址传送给本节点的缓存代理;
处理队列单元505,用于存储接收单元501写入的请求消息;
传送单元504还用于将已写入处理队列单元的请求消息传送给本地代理。
请一并参阅图6,图6为本发明实施例三提供的另一种节点控制器,应用于NUMA系统。其中,图6所示的节点控制器是由图5所示的节点控制器进行优化得到的,图6所示的节点控制器同样位于NUMA系统的某一节点中。在图6所示的节点控制器中,监测单元502可以包括:
第一模块5021,用于向其它节点传送第二监听消息,该第二监听消息用于监测其它节点上是否缓存有包含上述系统地址的缓存数据块;
第二模块5022,用于接收的其它节点传送的响应消息,该响应消息用于指示其它节点上是否缓存有包含上述系统地址的缓存数据块。
相应地,处理单元503具体用于在第二模块5022接收的响应消息表示第三节点上缓存有包含上述系统地址的缓存数据块时,将第三节点上缓存的包含系统地址的缓存数据块进行无效处理。
进一步地,在图6所示的节点控制器中,处理单元503可以包括:
第三模块5031,用于将指示消息SnpInvXtoI传送给其它节点,该指示消息SnpInvXtoI用于指示其它节点将其缓存的包含上述系统地址的缓存数据块删除或置为不可用。
进一步地,在图6所示的节点控制器中,处理单元503还可以包括:
第四模块5032,用于接收其它节点传送的指示响应消息RspI,该指示响应消息RspI是其它节点根据该指示消息SnpInvXtoI的指示,将其缓存的包含上述系统地址的缓存数据块删除或置为不可用后传送的。
本实施例中,本地代理根据传送单元504回应的反馈消息的指示获悉其它节点缓存了上述系统地址之后,可以将本地代理存储的上述系统地址传送给缓存代理,使得缓存代理可以采用该系统地址访问网络。
本实施例中,本节点的CA传送的请求消息也用于请求上述系统地址,也就是说CA所请求的系统地址与任一节点传送的请求消息所请求的系统地址相同,从而使得CA与任一节点所使用的系统地址一致,满足NUMA系统的缓存一致性协议的要求。
在NUMA系统中,节点可以是CPU,或者可以是SMP系统,本发明实施例不作限定。
本发明实施例中,本节点的节点控制器在接收到任一节点发送的请求消息并写入处理队列后,先监测其它节点上是否缓存有包含该系统地址的缓存数据块,若监测发现其它节点上缓存有包含该系统地址的缓存数据块,则节点控制器将其它节点上缓存的包含该系统地址的缓存数据块进行无效处理,后续节点控制器接收到本节点的本地代理传送的第一监听消息时,由于节点控制器已经无效掉了其它节点上缓存的包含该系统地址的缓存数据块,使得节点控制器不需要再向其它节点传送该第一监听消息,直接回应反馈消息给HA即可,避免了节点控制器将该第一监听消息写入处理队列被请求消息阻塞,从而解开了节点控制器与HA之间相互依赖的阻塞环,防止了节点控制器发生死锁,避免了NUMA系统因为节点控制器发生死锁而崩溃。
实施例四:
请参阅图7,图7为本发明实施例四提供的一种NUMA系统。在图7所示的NUMA系统中,该NUMA系统包括本地节点701以及本地节点701以外的其它节点702。其中,本地节点701的结构与图1中第一节点N0的结构类似,不同的是,本地节点701的NC的结构与图5所示的节点控制器结构相同,或者与图6所示的节点控制器的结构相同。
其中,本地节点701的节点控制器接收其它节点702的请求消息并将该请求消息写入处理队列,该请求消息用于请求系统地址;
本地节点701的节点控制器监测其它节点702上是否缓存有包含上述系统地址的缓存数据块,若是,则将其它节点702上缓存的包含上述系统地址的缓存数据块进行无效处理,以使节点控制器接收到本地代理传送的第一监听消息时直接回应反馈消息至本地代理,而避免将第一监听消息写入处理队列被请求消息阻塞,其中,第一监听消息用于监听其它节点702上是否缓存有上述系统地址;反馈消息用于指示其它节点702上缓存的上述系统地址无效,使本地代理将其存储的上述系统地址传送给缓存代理,以便所述本地节点701的节点控制器将已写入处理队列的请求消息传送给本地代理。
其中,上述的第一监听消息是本地代理接收到缓存代理传送的请求消息之后传送给节点控制器的,缓存代理传送的请求消息用于请求上述系统地址。
其中,缓存代理请求上述系统地址与其它节点702请求的系统地址相同。
本发明实施例中,本地节点701的节点控制器在接收到其它节点702发送的请求消息并写入处理队列后,先监测其它节点702上是否缓存有包含该系统地址的缓存数据块,若监测发现其它节点702上缓存有包含该系统地址的缓存数据块,则节点控制器将其它节点702上缓存的包含该系统地址的缓存数据块进行无效处理,后续节点控制器接收到本地代理传送的第一监听消息时,由于节点控制器已经无效掉了其它节点702上缓存的包含该系统地址的缓存数据块,使得节点控制器不需要再向其它节点702传送该第一监听消息,直接回应反馈消息给本地代理即可,避免了节点控制器将该第一监听消息写入处理队列被请求消息阻塞,从而解开了节点控制器与HA之间相互依赖的阻塞环,防止了节点控制器发生死锁,避免了NUMA系统因为节点控制器发生死锁而崩溃。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上对本发明实施例提供的一种防止节点控制器死锁的方法及节点控制器、NUMA系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (9)
1.一种防止节点控制器死锁的方法,应用于非一致内存访问系统,其特征在于,包括:
本节点的节点控制器接收任一节点发送的请求消息,并将所述请求消息写入处理队列;所述请求消息用于请求系统地址;
所述节点控制器监测其它节点上是否缓存有包含所述系统地址的缓存数据块,若是,则将所述其它节点上缓存中包含所述系统地址的缓存数据块进行无效处理,以使所述节点控制器接收到所述本节点的本地代理传送的第一监听消息时直接回应反馈消息至所述本地代理,而避免将所述第一监听消息写入所述处理队列被所述请求消息阻塞;所述第一监听消息用于监听所述其它节点上是否缓存有所述系统地址;所述反馈消息用于指示所述其它节点上缓存的所述系统地址无效,以使所述本地代理将其存储的所述系统地址传送给所述本节点的缓存代理;
所述节点控制器将已写入处理队列的所述请求消息传送给所述本节点的本地代理。
2.根据权利要求1所述的方法,其特征在于,所述节点控制器监测其它节点上是否缓存有包含所述系统地址的缓存数据块,包括:
所述节点控制器向其它节点传送第二监听消息,所述第二监听消息用于监测其它节点上是否缓存有包含所述系统地址的缓存数据块;
所述节点控制器接收的所述其它节点传送的响应消息,所述响应消息用于指示所述其它节点上是否缓存有包含所述系统地址的缓存数据块。
3.根据权利要求1或2所述的方法,其特征在于,所述将所述其它节点上缓存中包括所述系统地址的缓存数据块进行无效处理,包括:
所述节点控制器传送指示消息SnpInvXtoI给所述其它节点,所述指示消息SnpInvXtoI用于指示所述其它节点将其缓存中包含所述系统地址的缓存数据块删除或置为不可用。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
所述节点控制器接收所述其它节点传送的指示响应消息RspI,所述指示响应消息RspI是所述其它节点根据所述指示消息SnpInvXtoI的指示,将其缓存的包含所述系统地址的缓存数据块删除或置为不可用后传送的。
5.根据权利要求1或2所述的方法,其特征在于,所述第一监听消息是所述本地代理接收到所述本节点的缓存代理传送的请求消息之后传送给所述节点控制器的,所述缓存代理传送的请求消息用于请求所述系统地址。
6.根据权利要求1或2所述的方法,其特征在于,所述本节点为中央处理器单元或是对称多处理SMP系统。
7.一种节点控制器,应用于非一致内存访问系统,所述节点控制器位于所述非一致内存访问系统的本地节点中,其特征在于,所述节点控制器包括:
接收单元,用于接收任一节点发送的请求消息,并将所述请求消息写入处理队列;所述请求消息用于请求系统地址;
监测单元,用于监测其它节点上是否缓存有包含所述系统地址的缓存数据块;
处理单元,用于在所述监测单元的监测结果为是时,将所述其它节点上缓存的包含所述系统地址的缓存数据块进行无效处理;
所述接收单元,还用于接收所述本地节点的本地代理传送的第一监听消息,所述第一监听消息用于监听所述其它节点上是否缓存有所述系统地址;
传送单元,用于在所述接收单元接收到所述第一监听消息时直接回应反馈消息至所述本地代理,避免所述接收单元将所述第一监听消息写入处理队列单元被所述请求消息阻塞;所述反馈消息用于指示所述其它节点上缓存的所述系统地址无效,以使所述本地代理将其存储的所述系统地址传送给所述本地节点的缓存代理;
所述处理队列单元,用于存储所述接收单元写入的请求消息;
所述传送单元,还用于将已写入所述处理队列单元的所述请求消息传送给所述本地代理。
8.根据权利要求7所述的节点控制器,其特征在于,所述监测单元包括:
第一模块,用于向其它节点传送第二监听消息,所述第二监听消息用于监测其它节点上是否缓存有包含所述系统地址的缓存数据块;
第二模块,用于接收所述其它节点传送的响应消息,所述响应消息用于指示所述其它节点上是否缓存有包含所述系统地址的缓存数据块。
9.根据权利要求7或8所述的节点控制器,其特征在于,所述处理单元
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2011/081393 WO2012149812A1 (zh) | 2011-10-27 | 2011-10-27 | 一种防止节点控制器死锁的方法及节点控制器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102439571A CN102439571A (zh) | 2012-05-02 |
CN102439571B true CN102439571B (zh) | 2013-08-28 |
Family
ID=45986240
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011800021394A Active CN102439571B (zh) | 2011-10-27 | 2011-10-27 | 一种防止节点控制器死锁的方法及装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20130111150A1 (zh) |
EP (1) | EP2568379B1 (zh) |
CN (1) | CN102439571B (zh) |
WO (1) | WO2012149812A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140040561A1 (en) * | 2012-07-31 | 2014-02-06 | Futurewei Technologies, Inc. | Handling cache write-back and cache eviction for cache coherence |
CN103488606B (zh) * | 2013-09-10 | 2016-08-17 | 华为技术有限公司 | 基于节点控制器的请求响应方法和装置 |
CN103870435B (zh) * | 2014-03-12 | 2017-01-18 | 华为技术有限公司 | 服务器及数据访问方法 |
US10104019B2 (en) * | 2014-05-27 | 2018-10-16 | Magnet Forensics Inc. | Systems and methods for locating application-specific data on a remote endpoint computer |
CN104035888B (zh) | 2014-06-11 | 2017-08-04 | 华为技术有限公司 | 一种缓存数据的方法及存储设备 |
CN106484725B (zh) * | 2015-08-31 | 2019-08-20 | 华为技术有限公司 | 一种数据处理方法、装置和系统 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6338122B1 (en) * | 1998-12-15 | 2002-01-08 | International Business Machines Corporation | Non-uniform memory access (NUMA) data processing system that speculatively forwards a read request to a remote processing node |
US6269428B1 (en) * | 1999-02-26 | 2001-07-31 | International Business Machines Corporation | Method and system for avoiding livelocks due to colliding invalidating transactions within a non-uniform memory access system |
US6760809B2 (en) * | 2001-06-21 | 2004-07-06 | International Business Machines Corporation | Non-uniform memory access (NUMA) data processing system having remote memory cache incorporated within system memory |
US7225298B2 (en) * | 2003-04-11 | 2007-05-29 | Sun Microsystems, Inc. | Multi-node computer system in which networks in different nodes implement different conveyance modes |
US7856534B2 (en) * | 2004-01-15 | 2010-12-21 | Hewlett-Packard Development Company, L.P. | Transaction references for requests in a multi-processor network |
JP4848771B2 (ja) * | 2006-01-04 | 2011-12-28 | 株式会社日立製作所 | キャッシュ一貫性制御方法およびチップセットおよびマルチプロセッサシステム |
CN101621714B (zh) * | 2008-06-30 | 2013-06-12 | 华为技术有限公司 | 节点、数据处理系统和数据处理方法 |
US8205045B2 (en) * | 2008-07-07 | 2012-06-19 | Intel Corporation | Satisfying memory ordering requirements between partial writes and non-snoop accesses |
US9529636B2 (en) * | 2009-03-26 | 2016-12-27 | Microsoft Technology Licensing, Llc | System and method for adjusting guest memory allocation based on memory pressure in virtual NUMA nodes of a virtual machine |
US8327228B2 (en) * | 2009-09-30 | 2012-12-04 | Intel Corporation | Home agent data and memory management |
CN102026099B (zh) * | 2010-11-16 | 2013-04-17 | 西安电子科技大学 | 无线体域网中自适应低时延媒体接入控制方法 |
-
2011
- 2011-10-27 WO PCT/CN2011/081393 patent/WO2012149812A1/zh active Application Filing
- 2011-10-27 EP EP11864625.6A patent/EP2568379B1/en active Active
- 2011-10-27 CN CN2011800021394A patent/CN102439571B/zh active Active
-
2012
- 2012-12-07 US US13/708,670 patent/US20130111150A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
EP2568379A4 (en) | 2014-02-19 |
EP2568379B1 (en) | 2016-04-27 |
WO2012149812A1 (zh) | 2012-11-08 |
CN102439571A (zh) | 2012-05-02 |
US20130111150A1 (en) | 2013-05-02 |
EP2568379A1 (en) | 2013-03-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102439571B (zh) | 一种防止节点控制器死锁的方法及装置 | |
CN100489814C (zh) | 一种共享缓存系统及实现方法 | |
CN101625663B (zh) | 满足部分读取和非监听访问之间的访存顺序要求 | |
US7818509B2 (en) | Combined response cancellation for load command | |
US9336146B2 (en) | Accelerating cache state transfer on a directory-based multicore architecture | |
EP1443404A2 (en) | Non-speculative distributed conflict resolution for a cache coherency protocol | |
US20080162661A1 (en) | System and method for a 3-hop cache coherency protocol | |
JP2018181325A5 (zh) | ||
CN101635679B (zh) | 路由表的动态更新 | |
WO2015134100A1 (en) | Method and apparatus for memory allocation in a multi-node system | |
CN104106061A (zh) | 在偏好加载的系统中存在加载竞争的情况下用于存储的前进机制 | |
CN104991868A (zh) | 一种多核处理器系统和缓存一致性处理方法 | |
CN103440223A (zh) | 一种实现高速缓存一致性协议的分层系统及其方法 | |
WO2015134103A1 (en) | Method and system for ordering i/o access in a multi-node environment | |
CN101093464B (zh) | 高速缓存一致性方法和对称多处理系统 | |
CN109992566A (zh) | 一种文件访问方法、装置、设备及可读存储介质 | |
KR20050074310A (ko) | 캐시 라인 소유권 이전 방법 및 장치 | |
CN105359122B (zh) | 多cpu系统中的增强型数据传输 | |
US7506108B2 (en) | Requester-generated forward for late conflicts in a cache coherency protocol | |
CN102959529A (zh) | 用于缓存的网络的广播协议 | |
US20170286483A1 (en) | Standing queries in memory | |
CN104239270A (zh) | 一种高速缓存同步的方法及装置 | |
US20170286540A1 (en) | Local and remote execution of standing queries | |
US20180335829A1 (en) | Processing device and control method of processing device | |
CN106557429B (zh) | 一种内存数据的迁移方法和节点控制器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20211223 Address after: 450046 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu wisdom Island, Zhengdong New Area, Zhengzhou City, Henan Province Patentee after: Super fusion Digital Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |