一种防止节点控制器死锁的方法及节点控制器的制作方法

文档序号:6359058阅读:167来源:国知局
专利名称:一种防止节点控制器死锁的方法及节点控制器的制作方法
技术领域
本发明涉及计算机领域,尤其涉及一种防止节点控制器死锁的方法及节点控制器,应用于非一致内存访问(Non-Uniform Memory Access, NUMA)系统。
背景技术
传统的NUMA系统的结构如图1所示,由第一节点NO、第二节点m和第三节点N2 这三个节点构成,这三个节点之间通过节点网络(Node Interconnect)相连。其中,第一节点NO中包括一个节点控制器(Node Controller,NC),一块系统内存(图1未显示)以及用于管理系统内存的系统地址的本地代理(HomeAgent,HA),一个处理器单元(图1未显示) 及该处理器单元的缓存代理(Caching Agent,CA)。如图1所示,第一节点NO中的各个组件本地互联(Local Interconnect),第一节点NO的NC、第二节点附以及第三节点N2之间节点互联(Node Interconnect) 0其中,第二节点Ni、第三节点N2可以是仅包括处理器单元及其CA的节点,或者也可以是结构类似于第一节点NO的复杂节点。在图1所示的NUMA系统中,第一节点NO的HA用于管理的系统内存的系统地址,第一节点NO的CA、第二节点m以及第三节点N2通过该系统地址可以实现对系统内存访问。 假设第一节点NO的HA管理系统地址A,当第二节点m和/或第三节点N2需要请求系统地址A时,第二节点m和/或第三节点N2需要发起请求消息,并传送给第一节点NO的NC,然后由第一节点NO的NC将该请求消息传送给第一节点NO的HA,第一节点NO的HA收到该请求消息后将系统地址A传送给第一节点NO的NC,再由第一节点NO的NC传送给第二节点附和/或第三节点N2。进一步地,假设第二节点附已缓存(Cached) 了系统地址A,而且第一节点NO的CA也需要请求系统地址A时,则第一节点NO的CA也需要发起请求消息,并传送给第一节点NO的HA,第一节点NO的HA收到其CA发起的请求消息后需要发起监听消息, 并传送给第一节点NO的NC,由第一节点NO的NC将该监听消息传送给第二节点附。第二节点m收到该监听消息后,将反馈消息传送给第一节点NO的NC,再由第一节点NO的NC传送给第一节点NO的HA,使得第一节点NO的HA获悉第二节点缓存的系统地址A有效,进而第一节点NO的HA可以将其存储的系统地址A通过本地网络传送给第一节点NO的Ck,至此第一节点NO的HA完成了对第一节点NO的CA发起的请求消息的处理。在上述过程中,第一节点NO的HA获悉第二节点m缓存的系统地址A有效后进一步通过本地网络将系统地址A传送给Ck,使CA可以使用系统地址A进行系统内存,确保了第一节点NO的CA和第二节点附所使用的系统地址一致,从而满足NUMA系统的缓存一致性协议(Cache Coherence Protocol)的要求。实践中发现,在图1所示的NUMA系统中,第一节点NO的NC上设有排队策略,来自第二节点附或第三节点N2的请求消息Request先进入处理队列,使得来自第一节点NO的 HA发起的监听消息Probe有可能被第二节点m或第三节点N2发起的请求消息Request 阻塞。同时,第一节点NO的HA上也设有排队策略,来自第一节点NO的CA发起的请求消息 Request先进入处理队列,使来自第一节点NO的NC传送的请求消息Request也有可能被来第一节点NO的CA发起的请求消息Request阻塞,如此,第一节点NO的NC和HA之间就形成一个如图2所示的阻塞环,从而导致了第一节点NO的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 Processing Unit,CPU), 或者可以是对称多处理(Symmetric Multi Processing,SMP)系统,本发明实施例不作限定。302、NC监测其它节点上是否缓存有包含上述系统地址的缓存数据块(Cache Line),若是,则将其它节点上缓存的包含上述系统地址的缓存数据块进行无效处理,使NC 接收到本节点的HA传送的第一监听消息时直接回应反馈消息给HA,避免NC将该第一监听消息写入处理队列被请求消息阻塞;其中,第一监听消息用于监听其它节点上是否缓存有上述系统地址;该反馈消息用于指示其它节点上缓存的上述系统地址无效,以使HA将其存储的上述系统地址传送给本节点的CA。在NUMA系统中,其它节点可以是CPU,或者可以是SMP系统,本发明实施例不作限定。作为一种可选的实施方式,NC监测其它节点上是否缓存有包含上述系统地址的缓存数据块的实现过程可以包括以下步骤AUNC向其它节点传送第二监听消息SnpData,该第二监听消息SnpData用于监测其它节点上是否缓存有包含上述系统地址的缓存数据块。B1、NC接收其它节点传送的响应消息RapS,该响应消息RapS用于指示其它节点上是否缓存有包含上述系统地址的缓存数据块。由此可见,通过上述步骤Al和步骤Bi,NC可以实现对其它节点的监测,获悉其它节点上是否缓存有包含上述系统地址的缓存数据块。作为一种可选的实施方式,NC将其它节点上缓存的包含上述系统地址的缓存数据块进行无效处理的实现过程可以为NC传送指示消息SnpInvXtoI给其它节点,其中,该指示消息SnpInvXtoI用于指示其它节点将其缓存的包含上述系统地址的缓存数据块删除或置为不可用。进一步地,NC还可以接收其它节点传送的指示响应消息Rspl,该指示响应消息 RspI是其它节点根据上述指示消息SnpInvXtoI的指示,将其缓存的包含上述系统地址的缓存数据块删除或置为不可用后传送的。在NUMA系统中,其它节点接收到NC传送的指示消息SnpInvXtoI后,可以根据该指示消息SnpInvXtoI的指示,将其缓存的包含上述系统地址的缓存数据块删除或置为不可用。其中,其它节点将其缓存的包含上述系统地址的缓存数据块删除或置为不可用的具体实现方式是本领域技术人员所公知的常识,本发明实施例此处不作详细介绍。
7
其中,对于NC而言,当其接收到其它节点传送的指示响应消息RspI后,即可获悉其它节点已经将其缓存的包含上述系统地址的缓存数据块进行无效处理,这样NC在后续过程中即使收到本节点的HA传送的第一监听消息也不需要再将该第一监听消息传送给其它节点了,避免了 NC将该第一监听消息写入处理队列被请求消息阻塞。303、NC将已写入处理队列的请求消息传送给HA。本实施例中,NC在监测出其它节点上缓存有包含上述系统地址的缓存数据块,并将其它节点上缓存的包含上述系统地址的缓存数据块进行无效处理之后,可以根据处理权限(即处理的先后顺序)将已写入处理队列的请求消息传送给本节点的HA,以使HA可以根据该请求消息的请求将存储的系统地址传送给NC,再由NC将该系统地址传送给第二节点, 从而使得第二节点可以采用该系统地址进行系统内存。本实施例中,NC收到HA传送的第一监听消息后,可以传送反馈消息至HA,以使HA 根据该反馈消息的指示获悉其它节点缓存的上述系统地址无效,从而HA可以将其存储的上述系统地址传送给Ck,使得CA可以采用该系统地址进行系统内存访问,从而满足NUMA系统的缓存一致性协议的要求。本实施例中,NC如果监测出其它节点上没有缓存有包含上述系统地址的缓存数据块,则NC接收到HA传送的第一监听消息后,也可以传送反馈消息至HA,使HA可以将其存储的上述系统地址传送给Ck,从而完成一次握手流程。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系统。其中,本实施例二以满足快速通道互联(Quick Path Interconnect, QPI)协议的NUMA系统为例,介绍本发明实施例中提供的一种防止节点控制器死锁的方法。进一步地,本实施例二中假设NUMA系统中的第三节点N2上缓存有包含系统地址A的缓存数据块 (Cache Line)。如图4所示,该方法可以包括以下步骤401、第一节点NO的NC接收第二节点附传送的用于请求系统地址A的请求消息 RdData,并将请求消息RdData写入处理队列。402、第一节点NO的NC向第三节点N2传送监听消息SnpData,该监听消息SnpData 用于监测第三节点N2上是否缓存有包含系统地址A的缓存数据块。403、第一节点NO的NC接收第三节点N2传送的响应消息RapS,该响应消息RapS 用于指示第三节点N2上缓存有包含系统地址A的Cache Line。404、第一节点NO的NC将指示消息SnpInvXtoI传送给第三节点N2,其中,该指示消息SnpInvXtoI用于指示第三节点N2将其缓存的包含系统地址A的Cache Line进行无效处理。405、第一节点NO的NC接收第三节点N2传送的指示响应消息Rspl,其中,该指示响应消息RspI是第三节点N2根据上述指示消息SnpInvXtoI的指示,将其缓存的包含系统地址A的Cache Line进行无效处理后传送的。本实施例中,第三节点N2将其缓存的包含系统地址A的Cache Line进行无效处理是指第三节点N2将其缓存的包含系统地址A的Cache Line删除或置为不可用。406、第一节点NO的NC将已写入处理队列的请求消息RdData传送给第一节点NO 的HA。407、第一节点NO的NC接收第一节点NO的HA传送的监听消息SnpData,其中,第一节点NO的HA传送的监听消息SnpData是第一节点NO的HA收到第一节点NO的CA传送的用于请求系统地址A的请求消息RdData后触发传送的。408、第一节点NO的NC接收到第一节点NO的HA传送的监听消息SnpData时,立刻传送反馈消息RspCnfit至第一节点NO的HA。本实施例中,第一节点NO的HA可以将CA传送的用于请求系统地址A的请求消息 RdData以及第一节点NO的NC传送的请求消息RdData写入处理队列进行排队,并按照处理权限(即处理的先后顺序)依次进行处理。具体地,第一节点NO的HA可以根据CA传送的请求消息RdData将系统地址A传送给CA ;以及根据第一节点NO的NC传送的请求消息 RdData将系统地址A传送给第一节点NO的NC,再由第一节点NO的NC将系统地址A传送给第二节点附。本实施例中,第一节点NO的NC在接收到来自第一节点NO的HA传送的监听消息 SnpData时,第一节点NO的NC已获悉了第一节点NO的另一侧所有节点(即包括第二节点 Nl和第三节点N2)上都不存在系统地址A的Cache Line,那么第一节点NO的NC也就不需要继续向另一侧去传送监听消息SnpData 了,可以传送反馈消息RspCnfit至第一节点NO 的HA,避免了第一节点NO的NC将监听消息SnpData写入处理队列被请求消息RdData阻塞,从而可以在第一节点NO的NC上解开相互依赖的阻塞环,避免了第一节点NO的NC发生死锁。作为一种可选的实施方式,本实施例中第一节点NO的NC上除了设置排队策略之夕卜,还可以设置以下策略

即第一节点NO的NC在收到其它节点传送的用于请求系统地址的请求消息时,如需要向第一节点NO的HA进一步请求时(第一节点NO的NC无法实现HA的代理),必须先使其它节点所在一侧的所有包含该系统地址的Cache Line无效,然后才能进行垮域请求。其中,所谓的垮域请求是指用于请求系统地址的请求消息从其它节点进入第一节点NO的HA。如图4所示,第一节点NO的NC接收到来自第二节点m传送的请求消息后,发现自身作为HA代理无法满足该请求,则第一节点NO的NC在进行垮域请求前,先按照上述设置好的策略,先将第二节点附一侧的第三节点N2上缓存的系统地址A的Cache Line无效掉。当第一节点NO的NC接收到来自第一节点NO的HA传送的监听消息时,尽管这个时候第一节点NO的NC已经在处理来自第二节点附的请求消息,第一节点NO的NC也可以对针对监听消息传送反馈消息至第一节点的HA。如此,第一节点NO的HA就可以先处理完来自 CA的请求消息,再继续处理来自第一节点NO的NC传送的请求消息。本实施例中,NUMA系统的第一节点NO的NC在接收到第二节点附传送的请求消息并写入处理队列后,先将第三节点N2上缓存的包含系统地址A的Cache Line无效掉 ’然后NC再将已写入处理队列的请求消息传送给第一节点NO的HA。第一节点NO的NC接收到第一节点NO的HA传送的监听消息时,第一节点NO的NC已经无效掉了第三节点N2上缓存的包含系统地址A的Cache Line,使第一节点NO的NC不需要继续向第三节点N2传送该监听消息,从而可以避免第一节点NO的NC将监听消息写入处理队列被请求消息阻塞,从而解开了第一节点NO的NC与HA之间相互依赖的阻塞环,防止了第一节点NO的NC发生死锁, 避免了 NUMA系统因为第一节点NO的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,用于接收其它节点传送的指示响应消息Rspl,该指示响应消息 RspI是其它节点根据该指示消息SnpInvXtoI的指示,将其缓存的包含上述系统地址的缓存数据块删除或置为不可用后传送的。本实施例中,本地代理根据传送单元504回应的反馈消息的指示获悉其它节点缓存了上述系统地址之后,可以将本地代理存储的上述系统地址传送给缓存代理,使得缓存代理可以采用该系统地址访问网络。本实施例中,本节点的CA传送的请求消息也用于请求上述系统地址,也就是说CA 所请求的系统地址与任一节点传送的请求消息所请求的系统地址相同,从而使得CA与任一节点所使用的系统地址一致,满足NUMA系统的缓存一致性协议的要求。在NUMA系统中,节点可以是CPU,或者可以是SMP系统,本发明实施例不作限定。本发明实施例中,本节点的节点控制器在接收到任一节点发送的请求消息并写入处理队列后,先监测其它节点上是否缓存有包含该系统地址的缓存数据块,若监测发现其它节点上缓存有包含该系统地址的缓存数据块,则节点控制器将其它节点上缓存的包含该系统地址的缓存数据块进行无效处理,后续节点控制器接收到本节点的本地代理传送的第一监听消息时,由于节点控制器已经无效掉了其它节点上缓存的包含该系统地址的缓存数据块,使得节点控制器不需要再向其它节点传送该第一监听消息,直接回应反馈消息给HA 即可,避免了节点控制器将该第一监听消息写入处理队列被请求消息阻塞,从而解开了节点控制器与HA之间相互依赖的阻塞环,防止了节点控制器发生死锁,避免了 NUMA系统因为节点控制器发生死锁而崩溃。实施例四请参阅图7,图7为本发明实施例四提供的一种NUMA系统。在图7所示的NUMA系统中,该NUMA系统包括本地节点701以及本地节点701以外的其它节点702。其中,本地节点701的结构与图1中第一节点NO的结构类似,不同的是,本地节点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 系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述, 本说明书内容不应理解为对本发明的限制。
权利要求
1.一种防止节点控制器死锁的方法,应用于非一致内存访问系统,其特征在于,包括 本节点的节点控制器接收任一节点发送的请求消息,并将所述请求消息写入处理队列;所述请求消息用于请求系统地址;所述节点控制器监测其它节点上是否缓存有包含所述系统地址的缓存数据块,若是, 则将所述其它节点上缓存中包含所述系统地址的缓存数据块进行无效处理,以使所述节点控制器接收到所述本节点的本地代理传送的第一监听消息时直接回应反馈消息至所述本地代理,而避免将所述第一监听消息写入所述处理队列被所述请求消息阻塞;所述第一监听消息用于监听所述其它节点上是否缓存有所述系统地址;所述反馈消息用于指示所述其它节点上缓存的所述系统地址无效,以使所述本地代理将其存储的所述系统地址传送给所述本节点的缓存代理;所述节点控制器将已写入处理队列的所述请求消息传送给所述第一节点的本地代理。
2.根据权利要求1所述的方法,其特征在于,所述节点控制器监测其它节点上是否缓存有包含所述系统地址的缓存数据块,包括所述节点控制器向其它节点传送第二监听消息,所述第二监听消息用于监测其它节点上是否缓存有包含所述系统地址的缓存数据块;所述节点控制器接收的所述其它节点传送的响应消息,所述响应消息用于指示所述其它节点上是否缓存有包含所述系统地址的缓存数据块。
3.根据权利要求1或2所述的方法,其特征在于,所述将所述其它节点上缓存中包括所述系统地址的缓存数据块进行无效处理,包括所述节点控制器传送指示消息SnpInvXtoI给所述其它节点,所述指示消息 SnpInvXtoI用于指示所述其它节点将其缓存中包含所述系统地址的缓存数据块删除或置为不可用。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括所述节点控制器接收所述其它节点传送的指示响应消息Rspl,所述指示响应消息 RspI是所述其它节点根据所述指示消息SnpInvXtoI的指示,将其缓存的包含所述系统地址的缓存数据块删除或置为不可用后传送的。
5.根据权利要求1或2所述的方法,其特征在于,所述第一监听消息是所述本地代理接收到所述本节点的缓存代理传送的请求消息之后传送给所述节点控制器的,所述缓存代理传送的请求消息用于请求所述系统地址。
6.根据权利要求1或2所述的方法,其特征在于,所述本节点为中央处理器单元或是对称多处理SMP系统。
7.一种节点控制器,应用于非一致内存访问系统,所述节点控制器位于所述非一致内存访问系统的本地节点中,其特征在于,所述节点控制器包括接收单元,用于接收任一节点发送的请求消息,并将所述请求消息写入处理队列;所述请求消息用于请求系统地址;监测单元,用于监测其它节点上是否缓存有包含所述系统地址的缓存数据块; 处理单元,用于在所述监测单元的监测结果为是时,将所述其它节点上缓存的包含所述系统地址的缓存数据块进行无效处理;所述接收单元,还用于接收所述本地节点的本地代理传送的第一监听消息,所述第一监听消息用于监听所述其它节点上是否缓存有所述系统地址;传送单元,用于在所述接收单元接收到所述第一监听消息时直接回应反馈消息至所述本地代理,避免所述接收单元将所述第一监听消息写入所述处理队列单元被所述请求消息阻塞;所述反馈消息用于指示所述其它节点上缓存的所述系统地址无效,以使所述本地代理将其存储的所述系统地址传送给所述本节点的缓存代理;所述处理队列单元,用于存储所述接收单元写入的请求消息;所述传送单元,还用于将已写入所述处理队列单元的所述请求消息传送给所述本地代理。
8.根据权利要求7所述的节点控制器,其特征在于,所述监测单元包括第一模块,用于向其它节点传送第二监听消息,所述第二监听消息用于监测其它节点上是否缓存有包含所述系统地址的缓存数据块;第二模块,用于接收所述其它节点传送的响应消息,所述响应消息用于指示所述其它节点上是否缓存有包含所述系统地址的缓存数据块。
9.根据权利要求7或8所述的节点控制器,其特征在于,所述处理单元包括第三模块,用于在所述监测单元的监测结果为是时,传送指示消息SnpInvXtoI给所述其它节点,所述指示消息SnpInvXtoI用于指示所述其它节点将其缓存的包含所述系统地址的缓存数据块删除或置为不可用。
10.根据权利要求9所述的节点控制器,其特征在于,所述处理单元还包括第四模块,用于接收所述其它节点传送的指示响应消息Rspl,所述指示响应消息RspI是所述其它节点根据所述指示消息SnpInvXtoI的指示,将其缓存的包含所述系统地址的缓存数据块删除或置为不可用后传送的。
11.根据权利要求7或8所述的节点控制器,其特征在于,所述第一监听消息是所述本地代理接收到所述本地节点的缓存代理传送的请求消息之后传送给所述节点控制器的,所述缓存代理传送的请求消息用于请求所述系统地址。
12.根据权利要求7或8所述的节点控制器,其特征在于,所述本地节点为中央处理器单元或是对称多处理SMP系统。
13.一种非一致内存访问系统,包括本地节点以及本地节点以外的其它节点,所述本地节点包括节点控制器、本地代理以及缓存代理,其特征在于所述节点控制器接收所述其它节点的请求消息并将所述请求消息写入处理队列,所述请求消息用于请求系统地址;所述节点控制器监测所述其它节点上是否缓存有包含所述系统地址的缓存数据块,若是,则将所述其它节点上缓存的包含所述系统地址的缓存数据块进行无效处理,以使所述节点控制器接收到所述本地代理传送的第一监听消息时直接回应反馈消息至所述本地代理,而避免将所述第一监听消息写入所述处理队列被所述请求消息阻塞,所述第一监听消息用于监听所述其它节点上是否缓存有所述系统地址;所述反馈消息用于指示所述其它节点上缓存的所述系统地址无效,使所述节点控制器将已写入处理队列的所述请求消息传送给所述本地代理。
14.根据权利要求13所述的非一致内存访问系统,其特征在于,所述第一监听消息是所述本地代理接收到所述缓存代理传送的请求消息之后传送给所述节点控制器的,所述缓存代理传送的请求消息用于请求所述系统地址。
全文摘要
一种防止节点控制器死锁的方法,包括本节点的NC接收任一节点发送的请求消息并写入处理队列,该请求消息用于请求系统地址;NC监测其它节点上是否缓存有包含上述系统地址的缓存数据块,若是,则将其它节点上缓存中包含上述系统地址的缓存数据块进行无效处理,使NC接收到HA传送的第一监听消息时直接回应反馈消息至HA,而避免将第一监听消息写入处理队列被请求消息阻塞;第一监听消息用于监听其它节点上是否缓存有上述系统地址;反馈消息用于指示其它节点上缓存的上述系统地址无效,使HA将其存储的上述系统地址传送给CA;NC将已写入处理队列的请求消息传送给HA。本发明实施例可以防止节点控制器死锁,避免NUMA系统崩溃。
文档编号G06F12/08GK102439571SQ201180002139
公开日2012年5月2日 申请日期2011年10月27日 优先权日2011年10月27日
发明者戴若星, 褚小伟, 赵亚飞 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1