一种缓存数据控制方法、节点控制器和系统的制作方法
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种缓存数据控制方法、节点控制器和系统。
【背景技术】
[0002]在高性能处理器组建的CC-NUMA系统中,由于处理器本身的扩展能力有限,需要将处理器分成多个节点,利用节点内的NC (Node Controller,节点控制器,简称NC)进行多处理器扩展,以增加并行处理的处理器个数,提升系统性能。CC-NUMA系统中,处理器通常具有大容量的扩展内存和较大容量的高速缓存(例如,L3缓存)。例如,常见的CC-NUMA系统中,单个处理器的扩展内存达到IT以上,L3缓存的容量达到30MB左右,一个节点的扩展内存的容量通常在几个TB,以一个16个处理器的CC-NUMA系统为例,节点的处理器的L3缓存的总容量达到30*16 = 480MB左右,缓存的容量远远小于内存容量。在NC中为每一个Cache Line都设置一个目录项记录是没有,NC—般会采用压缩目录的方式,以减少目录的容量。但是随着节点内扩展内存的急剧增加,目录的容量也急剧增加,现有的压缩目录的方式无法很好的减少目录存储空间的需求。
【发明内容】
[0003]本发明实施例所要解决的技术问题在于,提供一种一种缓存数据控制方法、节点控制器和系统。可减少目录对存储空间的需求。
[0004]为了解决上述技术问题,本发明实施例第一方面提供了一种多处理器系统的缓存数据控制方法,包括:
[0005]节点控制器接收源节点发送的数据访问请求;其中,所述数据访问请求携带访问地址和访问类型;
[0006]若所述访问类型为共享请求,所述节点控制器查询第一目录中是否存在所述访问地址的第一目录项,若为是,确定所述访问地址对应的缓存数据为独占态;
[0007]根据所述第一目录项中的存储位置确定所述缓存数据所在的目标节点;
[0008]所述节点控制器向所述目标节点发送第一侦听消息,所述第一侦听消息用于指示所述目标节点将所述缓存数据返回给所述节点控制器;
[0009]所述节点控制器将所述缓存数据返回至所述源节点,并删除所述第一目录中所述第一目录项。
[0010]结合第一方面,在第一种可能的实现方式中,还包括:
[0011]若所述访问类型为独占请求且所述第一目录中存在所述访问地址的第一目录项,确定所述访问地址对应的缓存数据为独占态;
[0012]根据所述第一目录项中的存储位置确定所述缓存数据所在的目标节点;
[0013]所述节点控制器向所述目标节点节点发起第二侦听消息,所述第二侦听消息用于指示所述目标节点将所述数据缓存返回给所述节点控制器;
[0014]所述节点控制器将所述访问地址对应的缓存数据返回至所述源节点,并更新所述第一目录中所述访问地址的目录项。
[0015]结合第一方面,在第二种可能的实现方式中,还包括:
[0016]若所述访问类型为共享请求且所述第一目录中不存在所述访问地址的第一目录项,查询所述访问地址对应的目标处理器;
[0017]所述节点控制器向所述目标处理器发送所述共享请求,所述共享请求用于指示所述目标处理器在第二目录中查询所述访问地址的第二目录项,若根据所述第二目录项确定所述缓存数据为共享态且所述目标处理器关联的缓存中存在所述缓存数据,所述目标处理器向所述节点控制器返回所述缓存数据;
[0018]所述节点控制器所述缓存数据返回至所述源节点。
[0019]结合第一方面的第一种可能的实现方式,在第三种可能的实现方式中,还包括:
[0020]若所述访问类型为独占请求且所述第一目录中不存在所述访问地址的第一目录项,查询所述访问地址对应的目标处理器;
[0021 ] 所述节点控制器向所述目标处理器发送所述独占请求,所述独占请求用于指示所述目标处理器在第二目录中查询所述访问地址的第二目录项,在所述第二目录项中确定所述缓存数据的存储状态和存储位置,若所述数据缓存为共享态,所述目标处理器向所述目标处理器所在的节点内的其他处理器和所述存储位置对应的节点发送第三侦听消息,所述第三侦听消息用于指示所述其他处理器或所述存储位置对应的其他节点返回所述数据缓存;
[0022]所述节点控制器将所述数据缓存返回至所述源节点,并在所述第一目录中创建所述访问地址的第三目录项。
[0023]结合第一方面至第三种可能的实现方式中的任意一种,在第四种可能的实现方式中,所述数据访问请求可以由本地节点中的任意一个处理器发出或所述至少一个远端节点中任意一个远端节点发出。
[0024]本发明实施例第二方面提供了一种节点控制器,包括:
[0025]接收模块,用于接收源节点发送的数据访问请求;其中,所述数据访问请求携带访问地址和访问类型,所述节点控制器位于本地节点;
[0026]第一查询模块,用于若所述访问类型为共享请求,查询第一目录中是否存在所述访问地址的第一目录项,若为是,确定所述访问地址对应的缓存数据为独占态;
[0027]第一确定模块,用于根据所述第一目录项中的存储位置确定所述缓存数据所在的第一远端目标节点;
[0028]第一发送模块,用于向所述目标节点发送第一侦听消息,所述第一侦听消息用于指示所述目标节点将所述缓存数据返回给所述节点控制器;
[0029]删除模块,用于将所述缓存数据返回至所述源节点,并删除所述第一目录中所述第一目录项。
[0030]结合第二方面,在第一种可能的实现方式中,还包括:
[0031]第二查询模块,用于若所述访问类型为独占请求且所述第一目录中存在所述访问地址的第一目录项,确定所述访问地址对应的缓存数据为独占态;
[0032]第二确定模块,用于根据所述第一目录项中的存储位置确定所述缓存数据所在的目标节点;
[0033]第二发送模块,用于向所述目标节点节点发起第二侦听消息,所述第二侦听消息用于指示所述目标节点将所述数据缓存返回给所述节点控制器;
[0034]更新模块,用于将所述访问地址对应的缓存数据返回至所述源节点,并更新所述第一目录中所述访问地址的目录项。
[0035]结合第二方面,在第二种可能的实现方式中,还包括:
[0036]第三查询模块,用于若所述访问类型为共享请求且所述第一目录中不存在所述访问地址的第一目录项,查询所述访问地址对应的目标处理器;
[0037]第三发送模块,用于向所述目标处理器发送所述共享请求,所述共享请求用于指示所述目标处理器在第二目录中查询所述访问地址的第二目录项,若根据所述第二目录项确定所述缓存数据为共享态且所述目标处理器关联的缓存中存在所述缓存数据,所述目标处理器向所述节点控制器返回所述缓存数据;
[0038]返回模块,用于所述缓存数据返回至所述源节点。
[0039]结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,还包括:
[0040]第四查询模块,用于若所述访问类型为独占请求且所述第一目录中不存在所述访问地址的第一目录项,查询所述访问地址对应的目标处理器;
[0041]第四发送模块,用于向所述目标处理器发送所述独占请求,所述独占请求用于指示所述目标处理器在第二目录中查询所述访问地址的第二目录项,在所述第二目录项中确定所述缓存数据的存储状态和存储位置,若所述数据缓存为共享态,所述目标处理器向所述目标处理器所在的节点内的其他处理器和所述存储位置对应的节点发送第三侦听消息,所述第三侦听消息用于指示所述其他处理器或所述存储位置对应的其他节点返回所述数据缓存;
[0042]创建模块,用于将所述数据缓存返回至所述源节点,并在所述第一目录中创建所述访问地址的第三目录项。
[0043]本发明实施例第三方面提供了一种多处理器系统,其特征在于,包括至少两个节点,其中,每个节点中有两个上述任意一项所述的节点控制器。
[0044]实施本发明实施例,具有如下有益效果:
[0045]节点控制器的目录中只记录独占态的缓存数据的目录项,不再记录共享态的缓存数据的目录项,这样减少目录对存储空间的需求,提高节点内存储器的利用率。
【附图说明】
[0046]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0047]图1是本发明实施例提供的一种多处理器系统的网络架构图;
[0048]图2是本发明实施例提供的一种多处理器系统的缓存数据控制方法的流程示意图;
[0049]图3a和图3b是本发明实施例提供的一种处理器系统的缓存数据控制方法的另一流程示意图;
[0050]图4是本发明实施例提供的一种多处理器系统的第一交互示意图;
[0051]图5是本发明实施例提供的一种多处理器系统的第二交互示意图;
[0052]图6是本发明实施例提供的一种多处理器系统的第三交互示意图;
[0053]图7
是本发明实施例提供的一种多处理器系统的第四交互示意图;
[0054]图8是本发明实施例提供的一种节点控制器的结构示意图。
【具体实施方式】
[0055]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0056]参见图1,为本发明实施例提供的多处理器系统的网络架构图,在本发明实施例中,多处理器系统包括N+1节点,N ^ 2,节点和节点之间通过互联网络连接,每个节点的结构相同,节点包括n+l(n ^ O)个CPU,每个CPU设置有对应的内存和缓存,每个CPU与节点内的节点控制器连接,节点控制器设置有一个目录,目录由多个目录项组成,每个目录项以内存地址为索引,用于记录内存地址对应的内存数据的存储状态和存储位置。其中,每个节点内的内存可以是图1中的每个CPU设置为一个单独的内存,也可以是一个共享内存,节点内的每个CPU负责管理指定的地址范围,本发明不作限制。
[0057]目录项中的存储状态分为独占态、共享态和无效态,独占态表示只有一个节点的缓存拥有缓存数据,且缓存数据与内存中的内存数据不一致;共享态表示一个或多个节点的缓存拥有缓存数据,且缓存数据域内存中的内存数据一致;独占态表示没有任何一个节点的缓存拥有缓存数据。
[0058]参见图2,为本发明实施例提供的一种多处理器系统的缓存数据控制方法的流程示意图,在本发明实施例中,所述方法包括:
[0059]S201、节点控制器接收源节点发送的数据访问请求;其中,所述数据访问请求携带访问地址和访问类型,所述节点控制器位于本地节点。
[0060]具体的,节点控制器所在的节点为本地节点,本地节点中的处理器的数量可以为一个或多个,数据访问请求可以是其他节点发出的,也可以是本地节点中的处理器发出的。多处理器的内存进行统一编址,每个节点分配有不同的内存地址范围,数据访问请求中的访问地址为内存地址,数据访问请求用于请求内存中访问地址指向的内存数据,由于多处理器采用多节点的缓存机制,该内存数据的副本缓存数据可能存在于某个节点的处理器的缓存中。访问类型包括独占请求和共享请求,其中独占请求表示独占请求的节点唯一拥有缓存数据,且缓存数据和内存中的内存数据不一致;共享请求表示共享请求的节点不是唯一拥有缓存数据,且缓存数据和内存中的内存数据一致。
[0061]S202、若所述访问类型为共享请求,所述节点控制器查询第一目录中是否存在所述访问地址的第一目录项,若为是,确定所述访问地址对应的缓存数据为独占态。
[0062]具体的,节点控制器识别数据访问请求中携带的访问类型,如果识别出访问类型为共享请求,节点控制器查询第一目录中是否存在访问地址对应的第一目录项,第一目录可以设置为节点控制器内,也可以设置为节点控制器之外。节点控制器的第一目录包括多个目录项,目录项以内存地址为索引,表示内存地址指向的内存数据对应的缓存数据的存储状态和存储位置,存储状态分为共享态、无效态和独占态,如果第一目录中没有内存地址对应的目录,表示节点中可能没有对应的缓存数据。本发明实施例中,节点控制器上的目录中只存储独占态的缓存数据的存储位置,即如果节点控制器的目录中存储存在内存地址对应的目录项,则表明该内存地址对应的内存数据在节点中存在缓存数据,且该缓存数据为独占态,这样可以减少节点控制器的目录的大小,节省存储空间。
[0063]S203、根据所述第一目录项中的存储位置确定所述缓存数据所在的目标节点。
[0064]具体的,查询第一目录项中缓存数据的存储位置,获知缓存数据位于目标节点上。
[0065]S204、所述节点控制器向所述目标节点发送第一侦听消息,所述第一侦听消息用于指示所述目标节点将所述缓存数据返回给所述节点控制器。
[0066]具体的,节点控制器向目标节点发出第一侦听消息,目标节点接收到第一侦听消息后将缓存数据返回给节点控制器。
[0067]S205、所述节点控制器将所述缓存数据返回至所述源节点,并删除所述第一目录中所述第一目录项。
[0068]具体的,由于节点控制器将缓存数据返回至源节点,这样目标节点和源节点上均存在缓存数据,缓存数据的实际状态变为共享态,由于节点控制器的第一目录只存储共享态的目录项,因此节点控制器删除访问地址对应的目录项。需要说明的是,节点控制器上的第一目录上不再存储共享态的目录项,但是本地节点内的多个处理器仍然会维护缓存数据的目录,利用缓存一致性协议记录缓存数据的存储状态和存储位置,此处不再赘述。
[0069]实施本发明的实施例,节点控制器的目录中只记录独占态的缓存数据的目录项,不再记录共享态的缓存数据的目录项,这样减少目录对存储空间的需求,提高节点内存储器的利用率。
[0070]参见图3a和图3b,为本发明实施例提供的一种多处理器系统的缓存数据控制方法的另一流程示意图,在本发明实施例中,所述方法包括:
[0071 ] S301、节点控制器接收源节点发送的携带访问地址和访问类型的数据访问请求。
[0072]具体的,节点控制器所在的节点为本地节点,本地节点中的处理器的数量可以为一个或多个,数据访问请求可以是其他节点发出的,也可以是本地节点中的处理器发出的。多处理器的内存进行统一编址,每个节点分配有不同的内存地址范围,数据访问请求中的访问地址为内存地址,数据访问请求用于请求内存中访问地址指向的内存数据,由于多处理器采用多节点的缓存机制,该内存数据的副本缓存数据可能存在于某个节点的处理器的缓存中。访问类型包括独占请求和共享请求,其中独占请求表示独占请求的节点唯一拥有缓存数据,且缓存数据和内存中的内存数据不一致;共享请求表示共享请求的节点不是唯一拥有缓存数据,且缓存数据和内存中的内存数据一致。
[0073]S302、节点控制器识别访问类型。
[0074]具体的,节点控制器可以根据数据访问请求中携带的访问类型标识确定访问类型,例如-Exclusive表示独占请求,Shared表示共享请求。如果访问类型为独占请求,执行S311,如果访问请求为共享请求,执行S303。
[0075]S303、查询第一目录中是否存在所述访问地址的第一目录项。
[0076]具体的,以访问地址为索引搜索节点控制器的目录中是否存在对应的第一目录项,节点控制器的目录可以位于节点控制器内部,也可以位于节点控制器外部,本发明不作限制。若第一目录中存在访问地址的第一目录项,指向S304,否则,执行S308。
[0077]S304、确定所述访问地址对应的缓存数据为独占态。
[0078]具体的,第一目录中只存储独占态的缓存数据的目录,如果第一目录中存在访问地址对应的第一目录项,表明访问地址对应的缓存数据位独占态。
[0079]S305、根据所述第一目录项中的存储位置确定所述缓存数据所在的目标节点。
[0080]具体的,第一目录项的存储位置标示缓存数据位于哪个节点,或更具体的位于哪个节点中的哪个处理器的缓存中,节点控制器根据第一目录项的存储位置表项确定缓存数据所在的目标节点。其中,此时缓存数据为独占态,缓存数据只可能位于一个节点上。
[0081]S306、所述节点控制器向所述目标节点发送第一侦听消息,所述第一侦听消息用于指示所述目标节点将所述缓存数据返回给所述节点控制器。
[0082]S307、所述节点控制器将所述缓存数据返回至所述源节点,并删除所述第一目录中所述第一目录项。
[0083]具体的,缓存数据由独占态变为共享态,节点控制器的目录只记载独占态的缓存数据的目录项,此时节点控制器将访问地址对应的目录项删除,但是访问地址对应的处理器仍然会记录缓存数据的存储状态为共享态。
[0084]S308、查询所述访问地址对应的目标处理器。
[0085]具体的,多处理器中的每个处理器划分有不同范围的内存地址,每个内存地址互相重叠,根据访问地址属于的内存地址区间确定对应的目标处理器。
[0086]S309、所述节点控制器向所述目标处理器发送所述共享请求,所述共享请求用于指示所述目标处理器在第二目录中查询所述访问地址的第二目录项,若根据所述第二目录项确定所述缓存数据为共享态且所述目标处理器关联的缓存中存在所述缓存数据,所述目标处理器向所述节点控制器返回所述缓存数据。
[0087]S310、所述节点控制器所述缓存数据返回至所述源节点。
[0088]S311、查询第一目录中是否存在所述访问地址的第一目录项。
[0089]S312、确定所述访问地址对应的缓存数据为独占态。
[0090]S313、根据所述第一目录项中的存储位置确定所述缓存数据所在的目标节点。
[0091]S314、所述节点控制器向所述目标节点节点发起第二侦听消息,所述第二侦听消息用于指示所述目标节点将所述数据缓存返回给所述节点控制器。
[0092]S315、所述节点控制器将所述访问地址对应的缓存数据返回至所述源节点,并更新所述第一目录中所述访问地址的目录项。
[0093]S316、查询所述访问地址对应的目标处理器。
[0094]S317、所述节点控制器向所述目标处理器发送所述独占请求,所述独占请求用于指示所述目标处理器在第二目录中查询所述访问地址的第二目录项,在所述第二目录项中确定所述缓存数据的存储状态和存储位置,若所述数据缓存为共享态,所述目标处理器向所述目标处理器所在的节点内的其他处理器和所述存储位置对应的节点发送第三侦听消息,所述第三侦听消息用于指示所述其他处理器或所述存储位置对应的其他节点返回所述数据缓存。
[0095]S318、所述节点控制器将所述数据缓存返回至所述源节点,并在所述第一目录中创建所述访问地址的第三目录项。
[0096]实施本发明的实施例,节点控制器的目录中只记录独占态的缓存数据的目录项,不再记录共享态的缓存数据的目录项,这样减少目录对存储空间的需求,提高节点内存储器的利用率。
[0097]下面结合图4-图7对本发明实施例的多处理器系统的缓存数据控制方法进行详细说明,实施例以两个节点进行说明,每个节点设有两个节点控制器和n+1个处理器,每个处理器配置有一个内存,节点内的内存统一进行编址,节点O包括节点控制器NCOO和节点控制器NCOl,节点I包括节点控制器10和节点控制器11,同一节点内的节点控制器根据预先划分的地址访问管理内存,例如,节点O内有100个处理器,节点控制器00管理处理器0-49,节点控制器01管理处理器50-99,同时节点控制器00和处理器01分别管理处理器对应的内存。假设节点O中的处理器η向节点I中的地址A的缓存数据发起独占请求,地址A的缓存数据变成独占态,通过独占响应节点控制器11在目录上创建地址A的目录项。
[0098]节点O中的处理器O向节点I中的地址B的缓存数据发起共享请求,地址B对应的缓存数据变为共享态,节点控制器NClO的目录上不会创建地址B的目录项,但是地址B对应的节点I中的处理器O会记录地址B的缓存数据的状态。
[0099]参见图4,为地址A的缓存数据由独占态变为独占态的转换流程,该转换流程包括:
[0100]S401、节点O的NCOl接收节点O的处理器O发起的数据访问请求,其中,数据访问请求的访问地址为地址Α,访问类型为独占请求。
[0101]S402.NC01将数据访问请求发送至节点I的NClI。
[0102]S403、NC11查寻目录发现存在地址A的目录项,确定地址A的缓存数据位独占态,存储位置为节点0,NCll向NCOl发起侦听消息。
[0103]S404.NC01侦听节点O内处理器O至处理器n,处理器O的缓存上存在地址A的独占态的缓存数据。
[0104]S405、节点O内处理器η的缓存上的地址A的缓存数据由独占态转换为无效态,并处理器η向NCll返回携带独占态的缓存数据的侦听响应;
[0105]S406、NC01将侦听响应返回NC11。
[0106]S407、NC11将侦听响应发送给NCOl。
[0107]S408、NC01将侦听响应返回给请求者处理器O。
[0108]参见图5,为地址A的缓存数据由独占态变为共享态的转换流程,该转换流程包括:
[0109]S501、节点O中的处理器O向NCOl发送数据访问请求,其中数据访问请求的访问类型为共享请求,访问地址为地址A ;
[0110]S502.NC01将数据访问请求发送至NClI,NClI第一目录上存在第一地址对应的缓存数据,确定第一地址对应的缓存数据为独占态,同时查询到缓存数据的存储位置为节点O上,发现节点O ;
[0111]S503、NC11向节点O中的NCOl发起侦听请求。
[0112]S504、NC01收到请求后侦听节点O内的处理器O至处理器n,侦听到处理器η的缓存上拥有独占态的缓存数据。
[0113]S505、处理器η向NCOl返回携带独占态的缓存数据的侦听响应。
[0114]S506、NCOl将侦听响应返回NCll后,此时,地址A对应的缓存数据转为共享态,NCl I第一目录中地址A的第一目录项进行删除。
[0115]S507、NC11将共享态的缓存数据返回给请求者处理器O。
[0116]参见图6,为缓存数据由共享态转换为共享态的转换流程,该转换流程包括:
[0117]S601、节点O中的处理器η向NCOO发送数据访问请求,数据访问请求的访问地址为地址B,访问类型为共享请求。
[0118]S602、NCOO将共享请求发送NC10,NClO查询目录中不存在地址B对应的目录项,则NCOO向地址B对应的处理器O发起共享请求;
[0119]S603.NC10转发共享请求到地址B对应的处理器0,处理器O查寻自己的目录发现地址B的缓存数据为共享态,且地址B的缓存数据位于处理器O的缓存中,不需要发起侦听请求,处理器O直接向NClO返回携带缓存数据的数据响应。
[0120]S604、处理器O向NClO返回数据响应。
[0121]S605、NC10将数据响应返回至NC00。
[0122]S606、NC00将数据响应返回至请求者处理器η。
[0123]参见图7,为缓存数据由共享态变为无效态的转换流程,该转换流程包括:
[0124]S701、节点O中的处理器η向NCOO发起数据访问请求,其中,数据访问请求的访问地址为地址B,访问类型为独占请求。
[0125]S702、NC00将独占请求发送至NC10,NC10查寻目录中不存在地址B对应的目录项,则NClO向地址B对应的处理器O发起独占请求。
[0126]S703、NClO向处理器O发起独占请求。
[0127]S704、处理器O查寻自己的目录发现地址B对应的缓存数据为共享态,需要发起侦听,处理器O采用广播侦听的方式,处理器O会向节点I内其他处理器(处理器I至处理器η)和NCll发起独占侦听请求,当NCll接收到独占侦听请求,地址B的目录不由NCll管理,在现有的技术方案中是直接返回无效侦听响应,而本发明中由NCll向远端节点(节点O)发起广播侦听。
[0128]S705、节点I内拥有地址B对应的共享态的缓存数据的处理器返回侦听响应;
[0129]S706、NC11向节点O的NCOl发起独占侦听请求。
[0130]S707、独占侦听请求到达NCOl后,NCOl向节点O内做广播侦听。
[0131]S708、远端节点(节点O)内的处理器返回侦听响应,NCOl节点到侦听响应后返回无效响应,将节点O外地址B对应的数据缓存全部置为无效态。
[0132]S709、远端节点(节点O)的NCOl向节点I的NCll返回无效响应;
[0133]S710、NC11向地址B对应的处理器O返回无效响应。
[0134]S711、处理器完成无效响应收集后向请求者NClO返回数据响应,其中携带无效态的数据缓存。
[0135]S712, NClO向NCOO返回数据响应,并在目录上创建地址B对应的目录项,存储地址设为节点O。
[0136]S713、NCOO将数据响应返回至请求者处理器O。
[0137]由上面的描述可以看出,本发明不为共享态的缓存数据创建目录项,目录上可以记录更多的独占态的缓存数据的目录项,共享态的缓存数据不会占用目录的存储空间,从而有效减少了由于目录的溢出导致对处理器的无效侦听。另外利用节点内处理器做广播侦听的特性,解决了节点外有共享态数据,但是又遇到独占请求的问题,保证了 Cache —致性协议的正确性。
[0138]参见图8,为本发明实施例提供的一种节点控制器的结构示意图,在本发明实施例中,所述节点控制器包括:接收模块81、第一查询模块82、第一确定模块83、第一发送模块84和删除模块85。
[0139]接收模块81,用于接收源节点发送的数据访问请求;其中,所述数据访问请求携带访问地址和访问类型,所述节点控制器位于本地节点。
[0140]第一查询模块82,用于若所述访问类型为共享请求,查询第一目录中是否存在所述访问地址的第一目录项,若为是,确定所述访问地址对应的缓存数据为独占态。
[0141 ] 第一确定模块83,用于根据所述第一目录项中的存储位置确定所述缓存数据所在的第一远端目标节点。
[0142]第一发送模块84,用于向所述目标节点发送第一侦听消息,所述第一侦听消息用于指示所述目标节点将所述缓存数据返回给所述节点控制器。
[0143]删除模块85,用于将所述缓存数据返回至所述源节点,并删除所述第一目录中所述第一目录项。
[0144]本发明实施例和方法项实施例一基于同一构思,其带来的技术效果也相同,具体原理请参照方法实施例一的描述,此处不再赘述。
[0145]进一步可选的,本发明实施例的节点控制器还包括:
[0146]第二查询模块,用于若所述访问类型为独占请求且所述第一目录中存在所述访问地址的第一目录项,确定所述访问地址对应的缓存数据为独占态;
[0147]第二确定模块,用于根据所述第一目录项中的存储位置确定所述缓存数据所在的目标节点;
[0
148]第二发送模块,用于向所述目标节点节点发起第二侦听消息,所述第二侦听消息用于指示所述目标节点将所述数据缓存返回给所述节点控制器;
[0149]更新模块,用于将所述访问地址对应的缓存数据返回至所述源节点,并更新所述第一目录中所述访问地址的目录项。
[0150]进一步的,本发明实施例的节点控制器还包括:
[0151]第三查询模块,用于若所述访问类型为共享请求且所述第一目录中不存在所述访问地址的第一目录项,查询所述访问地址对应的目标处理器;
[0152]第三发送模块,用于向所述目标处理器发送所述共享请求,所述共享请求用于指示所述目标处理器在第二目录中查询所述访问地址的第二目录项,若根据所述第二目录项确定所述缓存数据为共享态且所述目标处理器关联的缓存中存在所述缓存数据,所述目标处理器向所述节点控制器返回所述缓存数据;
[0153]返回模块,用于所述缓存数据返回至所述源节点。
[0154]进一步可选的,本发明实施例的节点控制器还包括:
[0155]第四查询模块,用于若所述访问类型为独占请求且所述第一目录中不存在所述访问地址的第一目录项,查询所述访问地址对应的目标处理器;
[0156]第四发送模块,用于向所述目标处理器发送所述独占请求,所述独占请求用于指示所述目标处理器在第二目录中查询所述访问地址的第二目录项,在所述第二目录项中确定所述缓存数据的存储状态和存储位置,若所述数据缓存为共享态,所述目标处理器向所述目标处理器所在的节点内的其他处理器和所述存储位置对应的节点发送第三侦听消息,所述第三侦听消息用于指示所述其他处理器或所述存储位置对应的其他节点返回所述数据缓存;
[0157]创建模块,用于将所述数据缓存返回至所述源节点,并在所述第一目录中创建所述访问地址的第三目录项。
[0158]本发明实施例和方法项实施例二基于同一构思,其带来的技术效果也相同,具体原理请参照方法实施例二的描述,此处不再赘述。
[0159]本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random AccessMemory, RAM)等。
[0160]以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
【主权项】
1.一种多处理器系统的缓存数据控制方法,其特征在于,包括: 节点控制器接收源节点发送的数据访问请求;其中,所述数据访问请求携带访问地址和访问类型; 若所述访问类型为共享请求,所述节点控制器查询第一目录中是否存在所述访问地址的第一目录项,若为是,确定所述访问地址对应的缓存数据为独占态; 根据所述第一目录项中的存储位置确定所述缓存数据所在的目标节点; 所述节点控制器向所述目标节点发送第一侦听消息,所述第一侦听消息用于指示所述目标节点将所述缓存数据返回给所述节点控制器; 所述节点控制器将所述缓存数据返回至所述源节点,并删除所述第一目录中所述第一目录项。2.如权利要求1所述的方法,其特征在于,还包括: 若所述访问类型为独占请求且所述第一目录中存在所述访问地址的第一目录项,确定所述访问地址对应的缓存数据为独占态; 根据所述第一目录项中的存储位置确定所述缓存数据所在的目标节点; 所述节点控制器向所述目标节点节点发起第二侦听消息,所述第二侦听消息用于指示所述目标节点将所述数据缓存返回给所述节点控制器; 所述节点控制器将所述访问地址对应的缓存数据返回至所述源节点,并更新所述第一目录中所述访问地址的目录项。3.如权利要求1所述的方法,其特征在于,还包括: 若所述访问类型为共享请求且所述第一目录中不存在所述访问地址的第一目录项,查询所述访问地址对应的目标处理器; 所述节点控制器向所述目标处理器发送所述共享请求,所述共享请求用于指示所述目标处理器在第二目录中查询所述访问地址的第二目录项,若根据所述第二目录项确定所述缓存数据为共享态且所述目标处理器关联的缓存中存在所述缓存数据,所述目标处理器向所述节点控制器返回所述缓存数据; 所述节点控制器所述缓存数据返回至所述源节点。4.如权利要求2所述的方法,其特征在于,还包括: 若所述访问类型为独占请求且所述第一目录中不存在所述访问地址的第一目录项,查询所述访问地址对应的目标处理器; 所述节点控制器向所述目标处理器发送所述独占请求,所述独占请求用于指示所述目标处理器在第二目录中查询所述访问地址的第二目录项,在所述第二目录项中确定所述缓存数据的存储状态和存储位置,若所述数据缓存为共享态,所述目标处理器向所述目标处理器所在的节点内的其他处理器和所述存储位置对应的节点发送第三侦听消息,所述第三侦听消息用于指示所述其他处理器或所述存储位置对应的其他节点返回所述数据缓存; 所述节点控制器将所述数据缓存返回至所述源节点,并在所述第一目录中创建所述访问地址的第三目录项。5.如权利要求1-4任意一项所述的方法,其特征在于,所述数据访问请求可以由本地节点中的任意一个处理器发出或所述至少一个远端节点中任意一个远端节点发出。6.一种节点控制器,其特征在于,包括: 接收模块,用于接收源节点发送的数据访问请求;其中,所述数据访问请求携带访问地址和访问类型,所述节点控制器位于本地节点; 第一查询模块,用于若所述访问类型为共享请求,查询第一目录中是否存在所述访问地址的第一目录项,若为是,确定所述访问地址对应的缓存数据为独占态; 第一确定模块,用于根据所述第一目录项中的存储位置确定所述缓存数据所在的第一远端目标节点; 第一发送模块,用于向所述目标节点发送第一侦听消息,所述第一侦听消息用于指示所述目标节点将所述缓存数据返回给所述节点控制器; 删除模块,用于将所述缓存数据返回至所述源节点,并删除所述第一目录中所述第一目录项。7.如权利要求6所述的节点控制器,其特征在于,还包括: 第二查询模块,用于若所述访问类型为独占请求且所述第一目录中存在所述访问地址的第一目录项,确定所述访问地址对应的缓存数据为独占态; 第二确定模块,用于根据所述第一目录项中的存储位置确定所述缓存数据所在的目标节点; 第二发送模块,用于向所述目标节点节点发起第二侦听消息,所述第二侦听消息用于指示所述目标节点将所述数据缓存返回给所述节点控制器; 更新模块,用于将所述访问地址对应的缓存数据返回至所述源节点,并更新所述第一目录中所述访问地址的目录项。8.如权利要求6所述的节点控制器,其特征在于,还包括: 第三查询模块,用于若所述访问类型为共享请求且所述第一目录中不存在所述访问地址的第一目录项,查询所述访问地址对应的目标处理器; 第三发送模块,用于向所述目标处理器发送所述共享请求,所述共享请求用于指示所述目标处理器在第二目录中查询所述访问地址的第二目录项,若根据所述第二目录项确定所述缓存数据为共享态且所述目标处理器关联的缓存中存在所述缓存数据,所述目标处理器向所述节点控制器返回所述缓存数据; 返回模块,用于所述缓存数据返回至所述源节点。9.如权利要求8所述的节点控制器,其特征在于,还包括: 第四查询模块,用于若所述访问类型为独占请求且所述第一目录中不存在所述访问地址的第一目录项,查询所述访问地址对应的目标处理器; 第四发送模块,用于向所述目标处理器发送所述独占请求,所述独占请求用于指示所述目标处理器在第二目录中查询所述访问地址的第二目录项,在所述第二目录项中确定所述缓存数据的存储状态和存储位置,若所述数据缓存为共享态,所述目标处理器向所述目标处理器所在的节点内的其他处理器和所述存储位置对应的节点发送第三侦听消息,所述第三侦听消息用于指示所述其他处理器或所述存储位置对应的其他节点返回所述数据缓存; 创建模块,用于将所述数据缓存返回至所述源节点,并在所述第一目录中创建所述访问地址的第三目录项。10.一种多处理器系统,其特征在于,包括至少两个节点,其中,每个节点中有两个如权利要求6-9任意一项所述的节点控制器。
【专利摘要】本发明实施例公开了一种缓存数据控制方法,节点控制器接收源节点发送的数据访问请求;其中,数据访问请求携带访问地址和访问类型;若访问类型为共享请求,节点控制器查询第一目录中是否存在访问地址的第一目录项,若为是,确定访问地址对应的缓存数据为独占态;根据第一目录项中的存储位置确定缓存数据所在的目标节点;节点控制器向目标节点发送第一侦听消息,第一侦听消息用于指示目标节点将缓存数据返回给节点控制器;节点控制器将缓存数据返回至源节点,并删除第一目录中第一目录项。本发明实施例还公开了一种节点控制器。采用本发明,能较少目录对存储空间的需求。
【IPC分类】G06F12/08
【公开号】CN104899160
【申请号】CN201510292332
【发明人】程永波
【申请人】华为技术有限公司
【公开日】2015年9月9日
【申请日】2015年5月30日