DATA READING METHOD, DEVICE, AND MULTI-CORE PROCESSOR
本申请涉及数据处理技术领域,尤其涉及一种数据读取方法、装置及多核处理器。 为了提升处理器的性能,越来越多的处理器采用了多处理器核架构。在采用多处理器核架构的处理器中,通常每个处理器核都配置有对应的缓存代理(cache agent,CA),处理器核从对应的CA中快速读写数据,并可以由本地代理(home agent,HA)管理多个CA对数据的读写权限。比如,CA1可以向HA发送独占读取请求,以向HA请求对目标数据的独占权限(读写权限的一种)。HA接收到CA1的独占读取请求,根据CA1的独占读取请求向CA1提供目标数据,并指示其它CA无效所缓存的目标数据,从而使CA1获取对目标数据的独占权限。 然而,由于不同CA可以独立地向同一个HA发送读取请求,致使CA在数据读取过程中可能会出现读取请求冲突的情况。例如,HA接收到CA1发送的独占读取请求,并根据该独占读取请求向CA1提供目标数据,以及指示其它CA无效所缓存的目标数据。之后,HA又接收到CA2发送的独占读取请求,HA根据该独占读取请求指示CA1向CA2提供目标数据,以及指示CA1无效所缓存的目标数据。由于CA1与HA之间有可能出现报文乱序等现象,使得CA1在发送了独占读取请求之后,有可能在接收到目标数据之前先接收到HA指示CA1无效该目标数据的请求,此时CA1处便发生了读取请求冲突。 发明内容 本申请提供一种数据读取方法、装置及多核处理器,用以提供一种读取请求冲突的处理机制。 第一方面,本申请实施例提供一种数据读取方法,包括:第一缓存代理CA向本地代理HA发送第一独占读取请求,该第一独占读取请求用于指示HA将目标数据的状态更新为第一CA独占状态;第一CA在接收到第一独占读取请求的第一独占读取应答前,若接收到HA发送的第一侦听请求,并根据第一侦听请求确定目标数据的状态为第一CA独占状态,则挂起第一侦听请求;第一CA接收到第一独占读取应答后,根据第一侦听请求更新对目标数据的读写权限,并向HA发送第一侦听应答。 采用上述方案,在第一CA接收到的第一侦听请求与第一CA所发送的第一独占读取请求发生冲突时,第一CA通过挂起第一侦听请求并在接收到第一独占读取请求的第一独占读取应答之后,再响应第一侦听请求,使得在保证缓存一致性的同时,可以依次完成各个请求的处理,从而解决读取请求冲突。 基于第一方面,在一种可能的实现方式中,第一CA可以通过以下方法更新对所述目标数据的读写权限,包括:若第一侦听请求为独占侦听请求,则第一CA将对目标数据的读写权限更新为无效权限;若第一侦听请求为共享侦听请求,则第一CA将目标数据的读写权限更新为共享权限;若第一侦听请求为无效侦听请求,则第一CA将对目标数据的读写权限更新为独占权限。 第二方面,本申请实施例提供一种数据读取方法,包括:本地代理HA接收第一缓存代理CA发送的第一独占读取请求;HA根据第一独占请求将目标数据的状态更新为第一CA独占状态;HA若接收到第二CA的第二读取请求,则根据目标数据的状态向第一CA发送第一侦听请求;第一侦听请求用于指示第一CA若根据第一侦听请求确定目标数据的状态为第一CA独占状态,则挂起第一侦听请求,以及,接收到第一独占读取应答后,根据第一侦听请求更新对目标数据的读写权限;HA接收第一CA根据第一侦听请求返回的第一侦听应答,并更新目标数据的状态;HA向第二CA发送第二读取应答。 基于第二方面,在一种可能的实现方式中,HA更新目标数据的状态,包括:若第二读取请求为独占读取请求,则HA将目标数据的状态更新为第二CA独占状态;若第二读取请求为共享读取请求,则HA将目标数据的状态更新为第一CA和第二CA共享状态;若第二读取请求为无效读取请求,则HA将目标数据的状态更新为第一CA独占状态。 第三方面,本申请实施例提供一种数据读取方法,包括:第二缓存代理CA向本地代理HA发送第二读取请求;第二读取请求用于指示HA根据第二读取请求更新目标数据的状态;第二CA接收HA发送的第二读取请求的第二读取应答,并更新对目标数据的读写权限。 基于第三方面,在一种可能的实现方式中,若第二读取请求为独占读取请求,则第二CA可以将对目标数据的读写权限更新为独占权限;该方法还包括:第二CA若将对目标数据的读写权限由独占权限修改为无效权限,则向HA发送权限更改信息;权限更改信息用于指示HA将目标数据的状态修改为无效状态。 第四方面,本申请实施例提供一种数据读取方法,包括:第一缓存代理CA向本地代理HA发送第一共享读取请求,第一共享读取请求用于指示HA将目标数据的状态更新为第一CA共享状态;第一CA在接收到第一共享读取请求的第一共享读取应答前,若接收到HA发送的第三独占侦听请求,则将对目标数据的读写权限更新为无效权限,并向HA发送第三独占侦听应答;第一CA接收到第一共享读取应答后,向HA发送第二共享读取请求,第二共享读取请求用于指示HA将目标数据的状态更新为第一CA共享状态。 采用上述方案,在第一CA接收到的第三独占侦听请求与第一CA所发送的第一共享读取请求发生冲突时,第一CA向HA发送第三独占侦听应答,并在接收到第一共享读取应答后,向HA发送第二共享读取请求,从而可以确保第一CA所获得的目标数据为最新的目标数据,在保证缓存一致性的同时解决了读取请求冲突。 第五方面,本申请实施例提供一种数据读取方法,包括:本地代理HA接收第一缓存代理CA发送的第一共享读取请求;HA根据第一共享读取请求将目标数据的状态更新为第一CA共享状态,并向第一CA发送第一共享读取应答;HA接收第二CA发送的第三独占读取请求,并根据目标数据的状态向第一CA发送第三独占侦听请求;第三独占侦听请求用于指示第一CA将对目标数据的读写权限更新为无效权限;HA在接收到第一CA发送的第三独占侦听请求的第三独占侦听应答后,向第二CA发送第三独占读取应答,并将目标数据的状态更新为第二CA独占状态;HA在接收到第一CA发送的第二共享读取请求后,向第二CA发送第二共享侦听请求;在接收到第二CA发送的第二共享侦听请求的第二共享侦听应答后,将目标数据的状态更新为第一CA和第二CA共享状态,并向第一CA发送第二共享读取请求的第二共享读取应答。 基于第五方面,在一种可能的实现方式中,第三独占读取应答用于指示第二CA向HA 返回第三独占读取应答的确收应答;HA向第二CA发送第二共享侦听请求之前,还包括:HA接收到第二CA发送的第三独占读取应答的确收应答。 在第一CA处已发生了读取请求冲突的情况下,HA通过第三独占读取应答用于指示第二CA向HA返回第三独占读取应答的确收应答,并在接收到第二CA发送的第三独占读取应答的确收应答之后,再向第二CA发送第二共享侦听请求,以防止第二CA所发送的第三独占读取请求与第二CA所接收的第二共享侦听请求出现冲突。 第六方面,本申请实施例提供一种数据读取方法,包括:第二缓存代理CA向本地代理HA发送第三独占读取请求;第三独占读取请求用于指示HA将目标数据的状态更新为第二CA独占状态;第二CA接收HA发送的第三独占读取应答,并将目标数据的读写权限更新为独占权限;第二CA接收HA发送的第二共享侦听请求,并根据第二共享侦听请求将对目标数据的独占权限更新为共享权限;第二CA向HA发送第二共享侦听应答。 基于第六方面,在一种可能的实现方式中,第二CA接收HA发送的第三独占读取应答之后,还包括:第二CA向HA发送所述第三独占读取应答的确收应答。 第七方面,本申请实施例提供一种装置,包括:请求模块和权限模块;其中,请求模块,用于向本地代理HA发送第一独占读取请求,第一独占读取请求用于指示HA将目标数据的状态更新为装置独占状态;权限模块,用于在接收到第一独占读取请求的第一独占读取应答前,若接收到HA发送的第一侦听请求,并根据第一侦听请求确定目标数据的状态为装置独占状态,则挂起第一侦听请求;在接收到第一独占读取应答后,根据第一侦听请求更新对目标数据的读写权限,并向HA发送第一侦听应答。 基于第七方面,在一种可能的实现方式中,权限模块具体用于:若第一侦听请求为独占侦听请求,则将对目标数据的读写权限更新为无效权限;若第一侦听请求为共享侦听请求,则将对目标数据的读写权限更新为共享权限;若第一侦听请求为无效侦听请求,则将对目标数据的读写权限更新为独占权限。 第八方面,本申请实施例提供一种装置,包括:请求模块和状态模块;其中,请求模块,用于接收第一缓存代理CA发送的第一独占读取请求;状态模块,用于根据第一独占请求将目标数据的状态更新为第一CA独占状态;请求模块,还用于若接收到第二CA的第二读取请求,则根据目标数据的状态向第一CA发送第一侦听请求;第一侦听请求用于指示第一CA若根据第一侦听请求确定目标数据的状态为第一CA独占状态,则挂起第一侦听请求,以及,接收到第一独占读取应答后,根据第一侦听请求更新对目标数据的读写权限;状态模块,还用于接收第一CA根据第一侦听请求返回的第一侦听应答,并更新目标数据的状态;向第二CA发送第二读取应答。 基于第八方面,在一种可能的实现方式中,状态模块具体用于:若第二读取请求为独占读取请求,则将目标数据的状态更新为第二CA独占状态;若第二读取请求为共享读取请求,则将目标数据的状态更新为第一CA和第二CA共享状态;若第二读取请求为无效读取请求,则将目标数据的状态更新为第一CA独占状态。 第九方面,本申请实施例提供一种装置,包括:请求模块和权限模块;其中,请求模块,用于向本地代理HA发送第二读取请求;第二读取请求用于指示HA根据第二读取请求更新目标数据的状态;权限模块,用于接收HA发送的第二读取请求的第二读取应答,并更新对目标数据的读写权限。 基于第九方面,在一种可能的实现方式中,权限模块具体用于:若第二读取请求为独 占读取请求,则将对目标数据的读写权限更新为独占权限;权限模块还用于:若将对目标数据的读写权限由独占权限修改为无效权限,则通过请求模块向HA发送权限更改信息;其中,权限更改信息用于指示HA将目标数据的状态修改为无效状态。 第十方面,本申请实施例提供一种装置,包括:请求模块和权限模块;其中,请求模块,用于向本地代理HA发送第一共享读取请求,第一共享读取请求用于指示HA将目标数据的状态更新为装置共享状态;权限模块,用于在接收到第一共享读取请求的第一共享读取应答前,若接收到HA发送的第三独占侦听请求,则将对目标数据的读写权限更新为无效权限,并向HA发送第三独占侦听应答;在接收到第一共享读取应答后,向HA发送第二共享读取请求,第二共享读取请求用于指示HA将目标数据的状态更新为所示装置共享状态。 第十一方面,本申请实施例提供一种装置,包括:请求模块和状态模块;其中,请求模块,用于接收第一缓存代理CA发送的第一共享读取请求;状态模块,用于根据第一共享读取请求将目标数据的状态更新为第一CA共享状态,并向第一CA发送第一共享读取应答;请求模块,还用于接收第二CA发送的第三独占读取请求,并根据目标数据的状态向第一CA发送第三独占侦听请求;第三独占侦听请求用于指示第一CA将对目标数据的读写权限更新为无效权限;在接收到第一CA发送的第三独占侦听请求的第三独占侦听应答后,向第二CA发送第三独占读取应答,并将目标数据的状态更新为第二CA独占状态;在接收到第一CA发送的第二共享读取请求后,向第二CA发送第二共享侦听请求;状态模块,还用于在接收到第二CA发送的第二共享侦听请求的第二共享侦听应答后,将目标数据的状态更新为第一CA和第二CA共享状态,并向第一CA发送第二共享读取请求的第二共享读取应答。 基于第十一方面,在一种可能的实现方式中,第三独占读取应答用于指示第二CA向装置返回第三独占读取应答的确收应答;请求模块向第二CA发送第二共享侦听请求之前,还用于:接收到第二CA发送的第三独占读取应答的确收应答。 第十二方面,本申请实施例提供一种装置,包括:请求模块和权限模块;其中,请求模块,用于向本地代理HA发送第三独占读取请求;第三独占读取请求用于指示HA将目标数据的状态更新为本装置独占状态;权限模块,用于接收HA发送的第三独占读取应答,并将对目标数据的读写权限更新为独占权限;接收HA发送的第二共享侦听请求,并根据第二共享侦听请求将对目标数据的读写权限更新为共享权限;向HA发送第二共享侦听应答。 基于第十二方面,在一种可能的实现方式中,权限模块在接收HA发送的第三独占读取应答之后,还用于:向HA发送所述第三独占读取应答的确收应答。 第十三方面,本申请实施例提供一种可读存储介质,该可读存储介质存储有可执行指令,可执行指令用于使计算机执行如上述第一方面,或第一方面的可能的实现方式,或第二方面,或第二方面的可能的实现方式,或第三方面,或第三方面的可能的实现方式,或第四方面,或第五方面,或第五方面的可能的实现方式,或第六方面,或第六方面的可能的实现方式所提供的方法。 第十四方面,本申请实施例提供一种程序产品,当其在控制器上运行时可以使计算机执行如上述第一方面,或第一方面的可能的实现方式,或第二方面,或第二方面的可能的实现方式,或第三方面,或第三方面的可能的实现方式,或第四方面,或第五方面,或第 五方面的可能的实现方式,或第六方面,或第六方面的可能的实现方式所提供的方法。 第十五方面,本申请实施例提供一种一种多核处理器,该多核处理器包括多个处理器核、多个缓存代理CA和至少一个本地代理HA;其中,多个处理器核分别与多个CA一一对应;处理器核,用于读写与该处理器核对应的CA中所缓存的数据;CA,用于执行如上述第一方面,或第一方面的可能的实现方式,或第三方面,或第三方面的可能的实现方式;HA,用于执行如上述第二方面,或第二方面的可能的实现方式;或者,CA,用于执行如上述第四方面,或第六方面,或第六方面的可能的实现方式所提供的方法;HA,用于执行如上述第五方面,或第五方面的可能的实现方式所提供的方法。 图1为一种缓存系统架构示意图; 图2为一种数据读取流程示意图之一; 图3为一种数据读取流程示意图之二; 图4为一种数据回写流程示意图; 图5为一种读取请求与回写请求冲突流程示意图; 图6为本申请实施例提供的一种数据读取方法流程示意图; 图7为一种读取请求冲突示意图; 图8为本申请实施例提供的一种数据读取方法流程示意图; 图9为本申请实施例提供的一种数据读取方法流程示意图; 图10为本申请实施例提供的一种装置结构示意图; 图11为本申请实施例提供的一种装置结构示意图。 下面将结合附图对本发明作进一步地详细描述。 图1为一种缓存系统架构示意图,该系统包括存储器101和多核处理器102,其中,多核处理器102为一致性多核处理器(coherence multi-processor,CMP)。如图1所示,多核处理器102包括多个处理器核(core0至coreN,N大于0),以及多个缓存代理(cache agent,CA)(CA0至CAN),其中,多个处理器核与多个CA之间一一对应。例如,core0与CA0对应,则core0可以通过CA0读写缓存数据,又例如,core1与CA1对应,则core1可以通过CA1读写缓存数据。 此外,多核处理器102中还包括至少一个本地代理HA(比如HA0至HAM,M大于等于0)。存储器101用于存储数据,至少一个HA中的每个HA可以与存储器101连接,并管理存储器101中存储的数据。其中,HA的数量与存储器101中数据量大小有关,例如,在存储器101中存储的数据量较大时,可能需要多个HA分别管理存储器101中存储的部分数据,换言之,存储器101中数据量越大,HA的数量越多。图1中,多个HA与多个CA之间通过互联网络(interconnect network,ICN)互联,任一CA可以通过ICN与任一HA传输消息,也可以通过ICN与其它CA传输消息。为了便于表述,本申请实施例仅针对用于管理目标数据的HA而言,以下皆同,不再赘述。 图1中所示的存储器101可以是内存储器(memory),也可以是三级缓存系统中的最后一级缓存(last level cache,LLC)。为了便于理解,本申请实施例以内存储器101为例 进行说明。 在图1所示的多核处理器102中,任一CA至少包括存储单元和控制单元,存储单元用于存储CA所缓存的数据,控制单元用于管理CA对数据的读写权限。在本申请实施例中,CA对数据的读写权限包括独占权限、共享权限和无效权限。例如,若CA0对数据A的读写权限为独占权限,则CA0可以缓存数据A,并且CA0对应的core0可以对数据A进行读写操作。若CA0对数据A的读写权限为共享权限,则CA0缓存数据A,core0可以对数据A进行读操作,但不可以进行写操作。若CA0对数据A的读写权限为无效权限,则CA0不可以缓存数据A,或CA0所缓存的数据A无效。 相应的,数据A在CA0中的数据态可以如下表一所示: 表一 应理解,本申请实施例中数据的数据态与数据的状态并不相同。数据的数据态表示数据在一个CA中的状态,而数据的状态则表示数据在多个CA中的读写权限分布情况。具体来说,若CA0对数据A的读写权限为独占权限,则数据A在CA0中既可以是修改态m,也可以是独占态e;若CA0对数据A的读写权限为共享权限,则数据A在CA0中可以是共享态s;若CA0对数据A的读写权限为无效权限,则数据A在CA0中的状态为无效态,即CA0中未缓存数据A或CA0中所缓存的数据A不可读写。 在图1所示多核处理器102中,任一HA也至少包括存储单元和控制单元,控制单元用于管理数据的状态,存储单元用于存储各个数据的状态。通常,HA中的存储单元会以目录的形式存储数据的状态,包括当前缓存有该数据的CA,以及缓存该数据的CA对该数据的读写权限,HA中的存储器存储各个数据所对应的目录,而控制单元通过更新存储单元中存储的目录完成对数据的状态的更新。 在本申请实施例中,可以为HA所管理的数据定义如表二所示的三种状态: 表二 以数据A为例,基于表二所示的三种数据的状态,数据A的状态与CA0至CAN分别对数据A的读写权限之间的对应关系,具体可以为:若数据A的状态为CA0独占状态,则此时CA0对数据A的读写权限为独占权限,CA1至CAN对数据A的读写权限为无效权限。若数据A的状态为CA0和CA1共享状态,则此时CA0和CA1对数据A的读写权限为共享权限,CA2至CAN对数据A的读写权限为无效权限。若数据A的状态为无效状 态,则此时CA0至CAN对数据A的读写权限皆为无效权限。应理解,在本申请实施例中数据A的状态为CA0共享状态,包括了只有CA0缓存数据A的情况,以及CA0和其它一个或多个CA共同缓存数据A的情况。 基于上述读写权限和数据的状态,CA可以通过向HA发送不同类型的读写请求以改变对任一数据的读写权限。例如,读取请求可以如下表三所示: 表三 具体而言,RdI为无效读取请求,CA可以向HA发送RdI以获取目标数据,但CA并不会缓存目标数据,即对目标数据的读写权限仍为无效权限。RdS为共享读取请求,CA可以向HA发送RdS以获取目标数据,以及对目标数据的共享权限。RdE为独占读取请求之一,CA可以向HA发送RdE以获取目标数据,以及对目标数据的独占权限。RdX为独占读取请求之二,CA可以向HA发送RdX以获取对目标数据的独占权限,但不获取目标数据。此外,CA还可以向HA发送InvX,以请求HA将所有CA中缓存的目标数据无效,即所有CA对目标数据皆为无效权限。 通过上述对读写权限的定义可见,在CA对目标数据的读写权限为独占权限时,与CA对应的处理器核才有可能对CA中所缓存的目标数据进行修改。基于此,具有独占权限的CA可以向HA发送回写请求,以请求HA根据CA中所缓存的目标数据更新内存储器中的目标数据,即回写目标数据。其中,回写请求可以如下表四所示: 表四 具体而言,WbI为无效回写请求,CA可以向HA发送WbI以请求HA将CA中所缓存的目标数据写入内存储器,同时,CA对目标数据的读写权限变为无效权限,即CA无效其所缓存目标数据;WbS为共享回写请求,CA可以向HA发送WbS以请求HA将CA中所缓存的目标数据写入内存储器,同时,CA对目标数据的读写权限变为共享权限;WbE为独占回写请求,CA可以向HA发送WbE以请求HA将CA中所缓存的目标数据写入内存储器,同时,CA对目标数据的读写权限仍为独占权限。 可以理解,HA对目标数据的状态的管理牵涉到多个CA对目标数据的读写权限的更 改。例如,CA3向HA发送独占读取请求时,若当前CA4中缓存有目标数据,则HA需要使CA4对目标数据的读写权限修改为无效权限才可以使CA3获取对目标数据的独占权限。基于此,本申请实施例还提供如表五所示的侦听请求,HA向CA4发送侦听请求,以使CA4根据侦听请求更新对目标数据的读写权限。 表五 其中,SnpI为无效侦听请求,SnpS为共享侦听请求,SnpE为独占侦听请求之一,SnpE用于从CA4获取目标数据并指示CA4将读写权限修改为无效权限。SnpX为独占侦听请求之二,与SnpE的区别在于,SnpX只用于指示CA4将读写权限修改为无效权限,并不会用于从CA4获取目标数据。表五中各个侦听请求的具体的发送规则可以参见本申请实施例后续表九所示。 针对上述表三至表五所示的多种请求,本申请还提供如下表六所示的请求应答: 表六 其中,CA3为向HA发送读取请求的CA,CA4为接收到侦听请求,即被侦听的CA。表六中,读取应答为HA向CA3发送的针对于读取请求的应答,读取应答中包括目标数据和/或权限应答,如RspDataE为数据应答,表示目标数据的独占态e副本,CA3接收并缓存RspDataE从而获取目标数据。Comp为权限应答,CA3接收Comp从而可以将对目标数据的读写权限更新为独占权限。 表六中,侦听应答为CA4向HA发送的针对于侦听请求的应答,无数据应答中Rsp_Comp为HA向CA3发送的应答,用于指示读取流程结束,Rsp_Ack为CA向HA发送的应答,用于通知HA该CA已接收到HA发送的某一消息。 为了更具体的说明读取请求、回写请求与CA3对目标数据的读写权限之间的关系,本申请实施例还提供如下表七所示的CA状态转移规则表: 表七 其中,Data表示请求目标数据,Comp表示请求对目标数据的读写权限。如表七所示,当CA3对目标数据的读写权限为无效权限或共享权限时,CA3可以向HA发送RdE读取请求,以获取目标数据以及对目标数据的独占权限,CA3在接收到HA对RdE请求的应答之后,将对目标数据的读写权限更新为独占权限。其它请求以此类推,本申请实施例不再赘述。 可以理解,CA4在接收到侦听请求后,也需要根据侦听请求更新对目标数据的读写权限,例如,可以按照如表八所示规则进行更新: 表八 举例说明,CA4在接收到无效侦听请求SnpI后,若CA4中目标数据的数据态为修改态m,对应的读写权限为独占权限,CA4保持对目标数据的独占权限并向HA发送侦听应答,同时,可以将目标数据的数据态更新为独占态e或保持修改态m。具体而言,若CA4将所缓存的目标数据的数据态更新为独占态e,则可以向HA发送独占侦听应答SnpRspEWb,SnpRspEWb包括CA4中目标数据的最新副本,HA接收到SnpRspEWb后可以将目标数据的最新副本写入内存储器中,即回写目标数据。以及,HA还可以将目标数据的最新副本进一步转发给CA3。如表八所示,CA4也可以向HA发送SnpRspFwdEWb,以指示HA完成回写目标数据,此外,CA4也会向CA3发送RspDataI,即目标数据的无效态i副本,从而完成对CA3无效读取请求RdI的响应。 可以理解,HA在收到CA3所发送的不同类型的读取请求后,也需要根据读取请求的类型和目标数据的当前的状态,通过读取内存储器或向CA4发送侦听请求以完成对CA3的应答。其具体的规则可以如下表九所示: 表九 如表九所示,HA在接收到CA3发送的读取请求后,会根据读取请求从内存储器中读取目标数据并发送给CA3或者向CA4发送侦听请求,以指示CA4更新对目标数据的读写权限和/或向CA3提供目标数据。 例如表九中,HA在接收到CA3发送的RdI读取请求后,若目标数据的当前的状态为无效状态或共享状态,则HA可以直接从内存储器中读取目标数据并发送给CA3。若目标数据的当前的状态为独占状态,则HA可以向独占目标数据的CA4发送无效侦听请求,即SnpI,从而指示CA4将目标数据提供给CA3。与之类似,HA在接收到CA3发送的RdS读取请求或者RdE读取请求后,也会从内存储器中读取目标数据并发送给CA3,或者通过共享侦听请求SnpS或独占侦听请求SnpE从CA4获取目标数据,并提供给CA3。 可以理解,HA在接收到CA4返回的侦听应答后,也需要对应更新目标数据的状态,如表十所示: 表十 其中,读取请求为HA从CA3收到的读取请求,读取应答为HA向CA3发送的读取应答,侦听应答为HA根据接收到的读取请求向CA4发送侦听请求后,从CA4接收到的侦听应答。举例说明,若HA接收到了CA3发送的独占读取请求RdE,HA确定目标数据处于CA4独占状态,则向CA4发送独占侦听请求SnpE。HA在接收到CA4返回的独占侦听应答SnpRspI后,将目标数据的状态更新为CA3独占状态E,并向CA3发送独占读取应答RspDataE_Comp。 如表十所示,在侦听应答中包括回写请求wb时,HA还会回写目标数据。在本申请实施例中,HA还可以根据回写请求的类型,修改目标数据的状态,如表十一所示: 表十一 如表十一所示,若HA收到的回写请求为无效回写请求WbI,则将目标数据写入内存储器,并将目标数据的状态更新为无效状态;若HA收到的回写请求为共享回写请求WbS,则将目标数据写入内存储器,并将目标数据的状态更新为共享状态;若HA收到的回写请求为独占回写请求WbE,则将目标数据写入内存储器,更新后目标数据的状态依旧为独占状态。 接下来,本申请实施例以具体的读取过程和回写过程为例对表一至表十一所示定义及规则作进一步说明。 读取过程示例之一 如图2所示,为一种数据读取流程示意图之一,图2中主要包括以下步骤: S201:假设CA2当前对目标数据的读写权限为无效权限,则根据表七所示规则,CA2可以向HA发送独占读取请求RdE。 S202:HA根据RdE将目标数据的状态设置为CA2独占状态。具体而言,假设目标数据的状态为无效状态,则根据表九所示规则,HA从内存储器读取目标数据,将目标数据的状态修改为CA2独占状态,并执行S203。 S203:HA向CA2发送独占读取应答。根据表六所示定义,该独占读取应答可以为RspDataE_Comp。 S204:CA2接收到RspDataE_Comp后,根据表七所示规则,将对目标数据的读写权限更新为独占权限。 S205:假设CA1当前对目标数据的读写权限为无效权限,则根据表七所示规则,CA1可以向HA发送独占读取请求RdE。 S206:HA接收到CA1发送的RdE后,由于当前目标数据的状态为CA2独占状态,则根据表九所示规则,向CA2发送独占侦听请求SnpE。 S207:CA2接收到HA发送的独占侦听请求后,根据表八所示规则,将对目标数据的读写权限修改为无效权限,其所缓存的目标数据变为无效态。 S208:CA2向HA发送独占侦听应答。如表八所示,独占侦听应答可以为SnpRspISnpRspFwdI、SnpRspIWb、SnpRspFwdI和SnpRspFwdIWb中的任一种。假设S208中CA2向HA发送了SnpRspIWb。 S209:HA从SnpRspIWb中获取目标数据,由于独占侦听应答中包括了回写请求,则HA将从SnpRspIWb中获取的目标数据写入内存储器。以及,将目标数据的状态设置为CA1独占状态。 S210:HA向CA1发送独占读取应答RspDataE_Comp。 S211:CA1在接收到RspDataE_Comp后,根据表七所示规则,将对目标数据的读写权限更新为独占权限。 通过图2所示的过程,实现了独占权限在CA1和CA2之间的转移。 读取过程示例之二 如图3所示,为一种数据读取流程示意图之二,图3中主要包括以下步骤: S301:CA1向HA发送共享读取请求RdS。 S302:HA接收到共享读取请求RdS后,若确定目标数据的状态为CA2独占状态,则根据表九所示规则执行S303。 S303:HA向CA2发送共享侦听请求SnpS。 S304:CA2接收到共享侦听请求SnpS后,根据表八所示规则,将对目标数据的读写权限更新为共享权限,将所缓存的目标数据变为共享态,并执行S305。 S305:CA2向HA发送共享侦听应答。如表八所示,共享侦听应答可以为SnpRspS、SnpRspFwdS、SnpRspSWb和SnpRspFwdSWb中的任一种。假设S305中CA2向HA发送了SnpRspFwdSWb,其同时向CA1发送了目标数据RspDataS。 S306:HA接收到SnpRspFwdSWb后,根据表十所示规则,将目标数据的状态设置为CA1和CA2共享状态。 S307:HA向CA1发送共享读取应答。根据表六所示定义,由于CA2已将目标数据发送给CA1,因此HA向CA1发送的共享读取应答可以为完成应答Rsp_Comp。 S308:CA1在接收到Rsp_Comp和RspDataS后,根据表七所示规则,将对目标数据的读写权限更新为共享权限。 通过图3所示的过程,CA1获取了目标数据的共享权限,以及,将CA2对目标数据的读写权限由独占权限变为共享权限。 回写过程示例 假设独占目标数据的CA1对所缓存的目标数据进行了修改,则CA1中所缓存的目标数据为m态。由于缓存溢出等原因,CA1需要将所缓存的目标数据回写到内存储器中。例如,可采用图4所示过程进行回写,图4为一种数据回写流程示意图,其中主要包括以下步骤: S401:CA1向HA发送无效回写请求WbI。在无效回写请求WbI中,包括CA1所缓存的m态目标数据。 S402:HA在接收无效回写请求WbI,并从无效回写请求WbI中获取m态目标数据。HA将m态目标数据写入内存储器,从而实现内存储器中所存储的目标数据的更新。以及,根据表十一所示的规则,将目标数据的状态由CA1独占状态修改为无效状态。 S403:HA向CA1发送无效回写应答。通常,该无效回写应答可以为表六中所示的完成应答Rsp_Comp。 S404:CA1在接收到HA发送的无效回写应答后,可以确定HA已经完成目标数据的状态的修改,进而可以将对目标数据的读写权限更新为无效权限。 通过上述过程,可以将独占目标数据的CA1中所缓存的目标数据写入内存储器,即回写目标数据,进而可以释放CA1的缓存空间,甚至还可以将CA1对目标数据的读写权限由独占权限修改为其它权限。 读取请求与回写请求冲突示例 上述读取过程示例和回写过程示例皆为理想情况下的过程,在实际应用中,往往会出现请求冲突的问题。例如,CA2独占目标数据,则CA2向HA发送的回写请求有可能会与其它CA的读取请求发生冲突。以图5为例,图5为一种读取请求与回写请求冲突流程示意图,图5中主要包括以下步骤: S501:CA1向HA发送共享读取请求RdS。 S502:由于当前目标数据的状态为CA2独占状态,HA向CA1发送共享侦听请求SnpS。 S503:CA2在接收到HA发送的共享侦听请求SnpS之前,向HA发送了无效回写请求WbI。 S504:HA接收CA2发送的无效读取请求WbI,根据无效读取请求WbI将目标数据写入内存储器,并将目标数据的状态更新为无效状态。 S505:HA向CA2发送无效回写应答Rsp_Comp。 S506:由于CA2在接收到HA发送的共享侦听请求SnpS之前,向HA发送了无效回写请求WbI,因此CA2在接收到共享侦听请求SnpS之后,将共享侦听请求SnpS挂起直至接收到无效回写应答Rsp_Comp后,CA2将对目标数据的读写权限更新为无效权限,并向HA发送共享侦听应答。由于此时CA2中所缓存的数据为i态,因此该共享侦听应答可以为SnpRspI。 S507:HA在接收到CA2发送的共享侦听应答SnpRspI后,从内存储器中读取目标数据并向CA1发送共享读取应答RspDataS_Comp。 S508:CA1接收共享读取应答RspDataS_Comp,根据共享读取应答RspDataS_Comp缓存s态目标数据,并将对目标数据的读写权限更新为共享权限。 在上述过程中,CA1的共享读取请求RdS与CA2的无效回写请求WbI之间出现了冲突,CA2通过挂起与共享读取请求RdS对应的共享侦听请求SnpS,确保回写过程可以正常完成。 可以理解,读取请求与读取请求之间也可能出现冲突。例如在图2所示的读取过程中,若CA2在接收到HA在S203中发送的独占读取应答之前,先接收到了HA在S206中发送的独占侦听请求,则CA2处便发生了独占读取请求与独占侦听请求之间的冲突,对于CA1、CA2和HA所属的系统而言,便是发生了读请求冲突。 基于此,本申请实施例提供一种数据读取方法,以提供一种读取请求冲突的处理机制。表十二为本申请实施例中,CA1在接收到侦听请求后的处理规则: 表十二 其中,侦听请求为CA1从HA接收到的侦听请求,侦听请求中包括目标数据的状态,CA1在接收到侦听请求后,可以从侦听请求中获取目标数据的状态。 此外,本申请实施例还提供一种CA1在接收到读取应答后的处理规则,如表十三所示: 表十三 通常,与独占权限有关的读取请求冲突会对CMP系统的缓存一致性造成影响,因此本申请实施例主要通过以下两种具体的、与独占权限有关的读取请求冲突的实施例,对本申请实施例所提供的数据读取方法以及表十二和表十三所示的规则进行说明。 实施例一,独占读取请求与侦听请求发生冲突的处理机制 图6为本申请实施例提供的一种数据读取方法流程示意图,如图6所示,主要包括以下步骤: S601:CA1向HA发送第一独占读取请求,以获取对目标数据的独占权限。 S602:HA接收CA1发送的第一独占读取请求,并根据第一独占读取请求将目标数据的状态更新为CA1独占状态。 在S602的一种可能的实现方式中,HA接收到CA1发送的第一独占读取请求之前,若目标数据处于无效状态,则HA在接收到CA1发送的第一独占读取请求之后,可以从内存储器中获取目标数据,并将目标数据发送给CA1。 在S602的另一种可能的实现方式中,若目标数据的状态为CA3共享状态,则HA在接收到CA1发送的第一独占读取请求之后,可以向CA3发送独占侦听请求,以指示CA3将对目标数据的读写权限变为无效权限,以及,从内存储器中获取目标数据,并将目标数据发送给CA1。 在S602的另一种可能的实现方式中,若目标数据的状态为CA3独占状态,则HA在接收到CA1发送的第一独占读取请求之后,可以向CA3发送独占侦听请求,以指示CA3将对目标数据的读写权限变为无效权限,以及,指示CA3提供目标数据的最新副本,具体实现过程可以参考图2,本申请实施例不再赘述。 S603:HA向CA1发送第一独占读取应答。 S604:HA接收CA2发送的第二读取请求。在本申请实施例中,HA在接收到第一独占读取请求之后,接收到第二读取请求,因此HA一般会先处理第一独占读取请求。若HA在执行S602和S603时接收到了第二读取请求,则HA可以挂起第二读取请求直至执行完S603。 S605:HA根据第二读取请求向CA1发送第一侦听请求。 其中,第一侦听请求与第二读取请求的请求类型之间存在如下对应关系:若第二读取 请求为独占读取请求,则第一侦听请求为独占侦听请求;若第二读取请求为共享读取请求,则第一侦听请求为共享侦听请求;若第二读取请求为无效读取请求,则第一侦听请求为无效侦听请求,具体可以参考表九所示规则,本申请实施例不再赘述。 S606:由于ICN中出现报文乱序等情况,使得CA1在接收到第一独占读取应答之前,先接收到了第一侦听请求。基于表十二所示规则,CA1在接收到第一侦听请求后,若根据第一侦听请求确定目标数据的状态为CA1独占状态,则挂起第一侦听请求。这是因为,若根据第一侦听请求确定目标数据的状态为CA1独占状态,便意味着HA已经接收并处理了CA1所发送的第一独占读取请求,因此CA1在后续必然会收到HA所发送的第一独占读取应答。基于此,CA1可以挂起第一侦听请求,以等待第一独占读取应答的到来。 S607:CA1接收到第一独占读取应答后,根据表十三所示规则,根据第一侦听请求更新对目标数据的读写权限。 在一种可能的实现方式中,第一独占读取应答中包括目标数据,CA1可以从第一独占读取应答中获取目标数据。在另一种可能的实现方式中,CA1在接收第一独占读取应答时,还会接收到其它CA(如CA3)发送的目标数据。 CA1在接收到第一独占读取应答后,便可以开始处理第一侦听请求,根据第一侦听请求更新对目标数据的读写权限。以表八所示规则为例,若第一侦听请求为独占侦听请求,则CA1将对目标数据的读写权限更新为无效权限;若第一侦听请求为共享侦听请求,则CA1将对目标数据的读写权限更新为共享权限;若第一侦听请求为无效侦听请求,则CA1将对目标数据的读写权限更新为独占权限。 S608:CA1向HA发送第一侦听应答。第一侦听应答的具体类型可以参考表八所示规则,对此不再赘述。 S609:HA接收到第一侦听应答后,更新目标数据的状态。 以表八所示规则为例,若第二读取请求为独占读取请求,则HA将目标数据的状态更新为第二CA独占状态;若第二读取请求为共享读取请求,则HA将目标数据的状态更新为CA1和CA2共享状态;若第二读取请求为无效读取请求,则HA将目标数据的状态更新为CA1独占状态。 在一种可能的实现方式中,HA还可以根据第一侦听应答获取目标数据,并根据所获取的目标数据更新内存储器中的目标数据。 S610:HA向CA2发送第二读取应答,第二读取应答的具体类型可以参考表八所示规则,对此不再赘述。 S611:CA2接收到第二读取应答后,便可以更新对目标数据的读写权限。 以表七所示规则为例,若第二读取请求为独占读取请求RdE,则CA2将对目标数据的读写权限更新为独占权限;若第二读取请求为共享读取请求RdS,则CA2将对目标数据的读写权限更新为共享权限;若第二读取请求为无效读取请求RdI,则CA2将对目标数据的读写权限更新为无效权限。 为了提高对数据独占权限管理的准确性,在本申请实施例的一种可能的实现方式中,CA2将对目标数据的读写权限更新为独占权限之后,若在后续处理过程中又将对目标数据的独占权限修改为无效权限,则CA2需要向HA发送权限更改信息,以指示HA将目标数据的状态修改为无效状态。在一种可能的实现方式中,CA2可以向HA发送无效回写请求,该无效回写请求中包括CA2中所缓存的目标数据,以指示HA在接收到无效回写请求后, 将无效回写请求中的目标数据写入内存储器中。与之类似,CA2若将目标数据的独占权限修改为共享权限,也可以向HA发送共享回写请求以指示HA将目标数据的状态修改为CA2共享状态。 通过对独占权限的准确管理,可以避免一些读取冲突的发生。例如,CA1对目标数据的原始的读写权限为独占权限,相应的,HA中所记录的目标数据的状态为CA1独占状态。若CA1在后续处理过程中将对目标数据的读写权限修改为无效权限,却未向HA发送权限更改信息,便可能发送图7所示的读取请求冲突,如图7所示,主要包括以下步骤: S701:CA2向HA发送独占读取请求a,以请求获取对目标数据的独占权限。 S702:HA根据目标数据的状态向CA1发送独占侦听请求a。 S703:CA1在接收到独占侦听请求a之前发送了独占读取请求b,并在接收到独占读取请求b对应的独占读取应答之前收到了独占侦听请求a,此时CA1处便发生了读取请求冲突。 由此可见,若CA1在将对目标数据的读写权限由独占权限修改为无效权限时,向HA发送权限修改信息,使得HA可以将目标数据的状态修改为无效状态,则在后续收到CA2发送的独占读取请求a时,便不会再向CA1发送独占侦听请求a,由此便可以避免图7所示读取请求冲突的情况的发生。 实施例二,共享读取请求与独占侦听请求发生冲突的处理机制 图8为本申请实施例提供的一种数据读取方法流程示意图,如图8所示,主要包括以下步骤: S801:CA1向HA发送第一共享读取请求,以获取对目标数据的共享权限。 虽然HA在记录任一数据为共享状态时,往往还可以记录共享有该数据的CA。但是,由于CMP系统中一个数据往往可以由多个CA共享,若每个CA在无效所缓存的数据之后都向HA发送权限修改信息,则会消耗系统中过多的资源。因此,通常CA可以自行无效具有共享权限的数据而无需通知HA,假设CA1在S801之前的处理过程中曾获取过目标数据及对目标数据的共享权限,并在处理过程中删除了目标数据,则在S801中CA1对目标数据的读写权限为无效权限,而HA所记录的目标数据的状态仍为共享状态。 S802:HA接收到第一共享读取请求后,根据第一共享读取请求将目标数据的状态更新为CA1共享状态。 以表九所示规则为例,若目标数据的状态为CA3独占状态,则HA通过向CA3发送共享侦听请求,以指示CA3将对目标数据的独占权限修改为共享权限,并向HA或CA1发送目标数据,以及,HA将目标数据的状态修改为CA1和CA3共享状态;若目标数据的状态为无效状态,则HA从内存储器中获取目标数据,将目标数据提供给CA1并将目标数据的状态更新为CA1共享状态;若目标数据的状态为CA3共享状态,则HA从内存储器中获取目标数据,将目标数据提供给CA1并将目标数据的状态更新为CA1和CA3共享状态。 S803:HA向CA1发送第一共享读取请求的第一共享读取应答。 S804:CA2向HA发送第三独占读取请求。 S805:HA在接收到CA1发送的第一共享读取请求之后,接收到了CA2发送的第三独占读取请求。HA挂起第三独占读取请求直至向CA1发送完第一共享读取应答。之后, HA根据目标数据当前的状态向CA1发送第三独占侦听请求。 S806:由于ICN中出现报文乱序等情况,使得CA1在接收到第一共享读取请求的第一共享读取应答之前,接收到了第三独占侦听请求,从而发生了读取请求冲突。虽然第三独占侦听请求中也可以包括目标数据的状态信息,CA1可以根据第三独占侦听请求确定目标数据的状态为CA1共享状态,然而,由于HA在接收到第一共享读取请求之前,所记录的目标数据的状态便有可能为CA1共享状态,因此CA1无法根据第三独占侦听请求确定HA是否已处理其所发送的第一共享读取请求。基于此,根据表十二所示规则,CA1将对目标数据的读写权限更新为无效权限,并向HA发送第三独占侦听应答。在一种可能的实现方式中,该第三独占侦听应答中可以包括冲突信息,如表十二中SnpRespCnflt,以使HA可以根据冲突信息确定CA1处发生读取请求冲突。 S807:HA接收CA1发送的第三独占侦听应答,将目标数据的状态更新为第二CA独占状态。 S808:HA向CA2发送第三独占读取应答。CA2接收到第三独占读取应答后,便可以将对目标数据的读写权限修改为独占权限。 S809:CA1在接收到第三独占侦听请求之后收到了第一共享读取应答,由于无法确定第一共享读取请求和第三独占读取请求到达HA的先后顺序,因此无法确定其所获得的目标数据是否为最新副本。如图8所示,CA1接收到第一共享读取应答时,目标数据的状态为CA2独占状态,若CA2对目标数据进行了修改,则CA1通过第一共享读取请求获得的目标数据便不是目标数据的最新副本。因此,根据表十三所示规则,CA1可以无效通过第一共享读取应答获取的目标数据,并再次向HA发送第二共享读取请求,以向HA重新请求目标数据的共享权限。 在一种可能的实现方式中,CA2在接收到第三独占读取应答之后,还可以向HA返回第三独占读取应答的确收应答。HA在接收到第二共享读取请求之后,若还未收到第三独占读取应答的确收应答,则挂起该第二共享读取请求,直至收到第三独占读取应答的确收应答之后,再执行S810,以防止在CA2处发生读取请求冲突。 S810:HA根据目标数据的状态向CA2发送第二共享侦听请求。 S811:CA2根据第二共享侦听请求将对目标数据的读写权限更新为共享权限。 S812:CA2向HA发送第二共享侦听应答。 S813:HA在接收到CA2发送的第二共享侦听应答后,将目标数据的状态更新为CA1和CA2共享状态。 S814:HA向CA1发送第二共享读取应答。 在一种可能的实现方式中,第二共享读取请求还包括应答指示信息,HA在接收到第二共享读取请求后,开启确收应答机制,即HA在发送任一消息后,只有在接收到该消息的应答之后才会发送下一消息,以防止CA1的第二共享读取请求也发生读取请求冲突。 采用上述过程,CA1便可以确保在发生共享读取请求冲突的情况下仍可以获取目标数据的最新副本及共享权限。可以理解,虽然图8所示过程中HA先收到第一共享读取请求,后收到第三独占读取请求,但对于HA先收到第三独占读取请求,后收到第一共享读取请求的场景,CA1也可以按照图8中的步骤进行处理,该过程可以如图9所示,CA1和CA2所执行的步骤与图8类似,区别在于HA所执行的部分步骤(图9中虚线所示)。如图9所示,主要包括以下步骤: S901:HA接收CA2发送的第三独占读取请求。 S902:HA根据目标数据的状态,向CA1发送第三独占侦听请求。 S903:CA1向HA返回第三独占侦听应答。 与图8中CA1的执行步骤类似,CA1是在收到第一共享读取应答之前收到了第三独占侦听请求,因此根据表十二所示规则,CA1依旧向HA发送第三独占侦听应答。在一种可能的实现方式中,第三独占侦听应答中可以包括冲突指示信息,如表十二中SnpRespCnflt,以使HA可以根据冲突指示信息确定CA1处发生读取请求冲突。 S904:HA将目标数据的状态更新为CA2独占状态。 S905:HA向CA2发送第三独占读取应答。CA2在接收到第三独占读取应答后,便可以将对目标数据的读写权限更新为独占权限。 S906:HA在接收到第三独占侦听请求之后,接收到了第一共享读取请求,由于HA已经开始处理第三独占读取请求,因此HA可以挂起第一共享读取请求,直至执行完S905(或接收到CA2发送的第三独占读取应答的确收应答)。 S907:HA根据目标数据的状态,向CA2发送第二共享侦听请求。 S908:CA2接收到第二共享侦听请求之后,将对目标数据的读写权限更新为共享权限。 S909:CA2向HA发送第二共享侦听应答。 S910:HA接收到CA2发送的第二共享侦听应答后,将目标数据的状态更新为CA1和CA2共享状态。 S911:HA向CA1发送第一共享读取应答。 S912:CA1接收到第一共享读取应答后,根据表十三所示规则,将通过第一共享读取应答获取的目标数据无效,并向HA发送第二共享读取请求。 S913:由于在S910中HA便已将目标数据的状态更新为CA1和CA2共享状态,因此HA在接收到第二共享读取请求后,可以直接从内存储器中获取目标数据 S914:HA通过第二共享读取应答将目标数据发送给CA1。 通过上述过程可见,虽然图9所示流程中HA向CA1发送的第一共享读取应答中包括的目标数据为目标数据的最新副本,然而,CA1无法区分图8和图9两种不同的读取请求冲突,因此在本申请实施例中,CA1若在接收到第一共享读取应答之前接收到了第三独占侦听请求,则CA1皆会在接收到第一共享读取应答之后无效所获取的目标数据并再次向HA发起第二共享读取请求,以确保最终所获取的目标数据为目标数据的最新副本。 上述主要从CA和HA之间交互的角度对本申请提供的方法进行了介绍。可以理解的是,为了实现上述功能,CA或HA可以包括执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本发明能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。 图10示出了本申请实施例中所涉及的装置的可能的示例性框图之一,该装置1000可以以软件的形式运行于CA中。如图10所示,装置1000可以包括:请求模块1001和权限模块1002,当装置1000运行于如图6所示实施例中的CA1时: 请求模块1001,用于向本地代理HA发送第一独占读取请求,第一独占读取请求用于指示HA将目标数据的状态更新为装置独占状态;权限模块1002,用于在接收到第一独占读取请求的第一独占读取应答前,若接收到HA发送的第一侦听请求,并根据第一侦听请求确定目标数据的状态为装置1000独占状态,则挂起第一侦听请求;在接收到第一独占读取应答后,根据第一侦听请求更新对目标数据的读写权限,并向HA发送第一侦听应答。 在一种可能的实现方式中,权限模块1002具体用于:若第一侦听请求为独占侦听请求,则将对目标数据的读写权限更新为无效权限;若第一侦听请求为共享侦听请求,则将对目标数据的读写权限更新为共享权限;若第一侦听请求为无效侦听请求,则将对目标数据的读写权限更新为独占权限。 当装置1000运行于如图6所示实施例中的CA2时: 请求模块1001,用于向本地代理HA发送第二读取请求;第二读取请求用于指示HA根据第二读取请求更新目标数据的状态;权限模块1102,用于接收HA发送的第二读取请求的第二读取应答,并更新对目标数据的读写权限。 在一种可能的实现方式中,权限模块1002具体用于:若第二读取请求为独占读取请求,则将对目标数据的读写权限更新为独占权限;权限模块1003还用于:若将对目标数据的读写权限由独占权限修改为无效权限,则通过请求模块1001向HA发送权限更改信息;其中,权限更改信息用于指示HA将目标数据的状态修改为无效状态。 当装置1000运行于如图8和/或图9所示实施例中的CA1时: 请求模块1001,用于向本地代理HA发送第一共享读取请求,第一共享读取请求用于指示HA将目标数据的状态更新为装置1000共享状态;权限模块1002,用于在接收到第一共享读取请求的第一共享读取应答前,若接收到HA发送的第三独占侦听请求,则将对目标数据的读写权限更新为无效权限,并向HA发送第三独占侦听应答;在接收到第一共享读取应答后,向HA发送第二共享读取请求,第二共享读取请求用于指示HA将目标数据的状态更新为装置1000共享状态。 当装置1000运行于如图8和/或图9所示实施例中的CA2时: 请求模块1001,用于向本地代理HA发送第三独占读取请求;第三独占读取请求用于指示HA将目标数据的状态更新为本装置独占状态;权限模块1002,用于接收HA发送的第三独占读取应答,并将对目标数据的读写权限更新为独占权限;接收HA发送的第二共享侦听请求,并根据第二共享侦听请求将对目标数据的读写权限更新为共享权限;向HA发送第二共享侦听应答。 在一种可能的实现方式中,权限模块1002在接收HA发送的第三独占读取应答之后,还用于:向HA发送所述第三独占读取应答的确收应答。 基于相同的技术构思,图11示出了本申请实施例中所涉及的装置的可能的示例性框图之二,该装置1100可以以软件的形式运行于HA中。装置1100可以包括:请求模块1101和状态模块1102。当装置1100运行于如图6所示实施例中的HA时: 请求模块1101,用于接收第一缓存代理CA发送的第一独占读取请求;状态模块1102, 用于根据第一独占请求将目标数据的状态更新为第一CA独占状态;请求模块1101,还用于若接收到第二CA的第二读取请求,则根据目标数据的状态向第一CA发送第一侦听请求;第一侦听请求用于指示第一CA若根据第一侦听请求确定目标数据的状态为第一CA独占状态,则挂起第一侦听请求,以及,接收到第一独占读取应答后,根据第一侦听请求更新对目标数据的读写权限;状态模块1102,还用于接收第一CA根据第一侦听请求返回的第一侦听应答,并更新目标数据的状态;向第二CA发送第二读取应答。 在一种可能的实现方式中,状态模块1102具体用于:若第二读取请求为独占读取请求,则将目标数据的状态更新为第二CA独占状态;若第二读取请求为共享读取请求,则将目标数据的状态更新为第一CA和第二CA共享状态;若第二读取请求为无效读取请求,则将目标数据的状态更新为第一CA独占状态。 当装置1100运行于如图7所示实施例中的HA时: 请求模块1101,用于接收第一缓存代理CA发送的第一共享读取请求;状态模块1102,用于根据第一共享读取请求将目标数据的状态更新为第一CA共享状态,并向第一CA发送第一共享读取应答;请求模块1101,还用于接收第二CA发送的第三独占读取请求,并根据目标数据的状态向第一CA发送第三独占侦听请求;第三独占侦听请求用于指示第一CA将对目标数据的读写权限更新为无效权限;在接收到第一CA发送的第三独占侦听请求的第三独占侦听应答后,向第二CA发送第三独占读取应答,并将目标数据的状态更新为第二CA独占状态;在接收到第一CA发送的第二共享读取请求后,向第二CA发送第二共享侦听请求;状态模块1102,还用于在接收到第二CA发送的第二共享侦听请求的第二共享侦听应答后,将目标数据的状态更新为第一CA和第二CA共享状态,并向第一CA发送第二共享读取请求的第二共享读取应答。 在一种可能的实现方式中,第三独占读取应答用于指示第二CA向装置返回第三独占读取应答的确收应答;请求模块1101向第二CA发送第二共享侦听请求之前,还用于:接收到第二CA发送的第三独占读取应答的确收应答。 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。 尽管在此结合各实施例对本申请进行了描述,然而,在实施所要求保护的本发明过程中,本领域技术人员通过查看所述附图、公开内容、以及所附权利要求书,可理解并实现所述公开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成部 分或步骤,“一”或“一个”不排除多个的情况。单个处理器或其他单元可以实现权利要求中列举的若干项功能。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措施不能组合起来产生良好的效果。 本领域技术人员应明白,本申请的实施例可提供为方法、装置(设备)、可读存储介质或程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式,这里将它们都统称为“模块”或“系统”。 本申请是参照本申请的方法、装置(设备)和程序产品的流程图和/或方框图来描述的。应理解可由程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。 这些程序指令也可存储在能引导可编程数据处理设备以特定方式工作的可读存储器中,使得存储在该可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。 这些程序指令也可装载到其他可编程数据处理设备上,使得在其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。 尽管结合具体特征及其实施例对本发明进行了描述,显而易见的,在不脱离本发明的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本发明的示例性说明,且视为已覆盖本发明范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。 The embodiments of the present application provide a data reading method, a device, and a multi-core processor. Said method comprises: a first CA (CA1) sending, to an HA, a first exclusive read request, the first exclusive read request being used to instruct the HA to update the state of target data into a CA1 exclusive state; before receiving a first exclusive read response to the first exclusive read request, if the CA1 receives a first monitoring request sent by the HA and determines, according to the first monitoring request, that the state of the target data is the CA1 exclusive state, the CA1 suspending the first monitoring request; and after receiving the first exclusive read response, the CA1 updating, according to the first monitoring request, a read/write permission to the target data, and sending a first monitoring response to the HA. The method above solves a read request conflict whilst ensuring cache consistency. 一种数据读取方法,其特征在于,包括: 第一缓存代理CA向本地代理HA发送第一独占读取请求,所述第一独占读取请求用于指示所述HA将目标数据的状态更新为所述第一CA独占状态; 所述第一CA在接收到第一独占读取请求的第一独占读取应答前,若接收到所述HA发送的第一侦听请求,并根据所述第一侦听请求确定所述目标数据的状态为所述第一CA独占状态,则挂起所述第一侦听请求; 所述第一CA接收到第一独占读取应答后,根据所述第一侦听请求更新对所述目标数据的读写权限,并向所述HA发送第一侦听应答。 如权利要求1所述的方法,其特征在于,所述第一CA根据所述第一侦听请求更新对所述目标数据的读写权限,包括: 若所述第一侦听请求为独占侦听请求,则所述第一CA将对所述目标数据的读写权限更新为无效权限; 若所述第一侦听请求为共享侦听请求,则所述第一CA将对所述目标数据的读写权限更新为共享权限; 若所述第一侦听请求为无效侦听请求,则所述第一CA将对所述目标数据的读写权限更新为独占权限。 一种数据读取方法,其特征在于,包括: 本地代理HA接收第一缓存代理CA发送的第一独占读取请求; 所述HA根据所述第一独占请求将所述目标数据的状态更新为所述第一CA独占状态; 所述HA若接收到第二CA的第二读取请求,则根据所述目标数据的状态向所述第一CA发送第一侦听请求;所述第一侦听请求用于指示所述第一CA若根据所述第一侦听请求确定所述目标数据的状态为所述第一CA独占状态,则挂起所述第一侦听请求,以及,接收到所述第一独占读取应答后,根据所述第一侦听请求更新对所述目标数据的读写权限; 所述HA接收所述第一CA根据所述第一侦听请求返回的第一侦听应答,并更新所述目标数据的状态; 所述HA向所述第二CA发送第二读取应答。 如权利要求3所述的方法,其特征在于,所述HA更新所述目标数据的状态,包括: 若所述第二读取请求为独占读取请求,则所述HA将所述目标数据的状态更新为所述第二CA独占状态; 若所述第二读取请求为共享读取请求,则所述HA将所述目标数据的状态更新为所述第一CA和所述第二CA共享状态; 若所述第二读取请求为无效读取请求,则所述HA将所述目标数据的状态更新为所述第一CA独占状态。 一种数据读取方法,其特征在于,包括: 第一缓存代理CA向本地代理HA发送第一共享读取请求,所述第一共享读取请求用于指示所述HA将目标数据的状态更新为所述第一CA共享状态; 所述第一CA在接收到第一共享读取请求的第一共享读取应答前,若接收到所述HA发送的第三独占侦听请求,则将对所述目标数据的读写权限更新为无效权限,并向所述HA 发送第三独占侦听应答; 所述第一CA接收到所述第一共享读取应答后,向所述HA发送第二共享读取请求,所述第二共享读取请求用于指示所述HA将所述目标数据的状态更新为所述第一CA共享状态。 一种数据读取方法,其特征在于,包括: 本地代理HA接收第一缓存代理CA发送的第一共享读取请求; 所述HA根据所述第一共享读取请求将所述目标数据的状态更新为所述第一CA共享状态,并向所述第一CA发送第一共享读取应答; 所述HA接收第二CA发送的第三独占读取请求,并根据所述目标数据的状态向所述第一CA发送第三独占侦听请求;所述第三独占侦听请求用于指示所述第一CA将对所述目标数据的读写权限更新为无效权限; 所述HA在接收到所述第一CA发送的第三独占侦听请求的第三独占侦听应答后,向所述第二CA发送第三独占读取应答,并将所述目标数据的状态更新为所述第二CA独占状态; 所述HA在接收到所述第一CA发送的第二共享读取请求后,向所述第二CA发送第二共享侦听请求;在接收到所述第二CA发送的所述第二共享侦听请求的第二共享侦听应答后,将所述目标数据的状态更新为所述第一CA和所述第二CA共享状态,并向所述第一CA发送第二共享读取请求的第二共享读取应答。 如权利要求6所述的方法,其特征在于,所述第三独占读取应答用于指示所述第二CA向所述HA返回所述第三独占读取应答的确收应答; 所述HA向所述第二CA发送第二共享侦听请求之前,还包括: 所述HA接收到所述第二CA发送的所述第三独占读取应答的确收应答。 一种装置,其特征在于,包括:请求模块、挂起模块和权限模块; 所述请求模块,用于向本地代理HA发送第一独占读取请求,所述第一独占读取请求用于指示所述HA将目标数据的状态更新为所述装置独占状态; 所述权限模块,用于在接收到第一独占读取请求的第一独占读取应答前,若接收到所述HA发送的第一侦听请求,并根据所述第一侦听请求确定所述目标数据的状态为所述装置独占状态,则挂起所述第一侦听请求;在接收到所述第一独占读取应答后,根据所述第一侦听请求更新对所述目标数据的读写权限,并向所述HA发送第一侦听应答。 如权利要求8所述的装置,其特征在于,所述权限模块具体用于:若所述第一侦听请求为独占侦听请求,则将对所述目标数据的读写权限更新为无效权限;若所述第一侦听请求为共享侦听请求,则将对所述目标数据的读写权限更新为共享权限;若所述第一侦听请求为无效侦听请求,则将对所述目标数据的读写权限更新为独占权限。 一种装置,其特征在于,包括:请求模块和状态模块; 所述请求模块,用于接收第一缓存代理CA发送的第一独占读取请求; 所述状态模块,用于根据所述第一独占请求将所述目标数据的状态更新为所述第一CA独占状态; 所述请求模块,还用于若接收到第二CA的第二读取请求,则根据所述目标数据的状态向所述第一CA发送第一侦听请求;所述第一侦听请求用于指示所述第一CA若根据所述第一侦听请求确定所述目标数据的状态为所述第一CA独占状态,则挂起所述第一侦听 请求,以及,接收到所述第一独占读取应答后,根据所述第一侦听请求更新对所述目标数据的读写权限; 所述状态模块,还用于接收所述第一CA根据所述第一侦听请求返回的第一侦听应答,并更新所述目标数据的状态;向所述第二CA发送第二读取应答。 如权利要求10所述的装置,其特征在于,所述状态模块具体用于:若所述第二读取请求为独占读取请求,则将所述目标数据的状态更新为所述第二CA独占状态;若所述第二读取请求为共享读取请求,则将所述目标数据的状态更新为所述第一CA和所述第二CA共享状态;若所述第二读取请求为无效读取请求,则将所述目标数据的状态更新为所述第一CA独占状态。 一种装置,其特征在于,包括:请求模块和权限模块; 所述请求模块,用于向本地代理HA发送第一共享读取请求,所述第一共享读取请求用于指示所述HA将目标数据的状态更新为所述装置共享状态; 所述权限模块,用于在接收到第一共享读取请求的第一共享读取应答前,若接收到所述HA发送的第三独占侦听请求,则将对所述目标数据的读写权限更新为无效权限,并向所述HA发送第三独占侦听应答;在接收到所述第一共享读取应答后,向所述HA发送第二共享读取请求,所述第二共享读取请求用于指示所述HA将所述目标数据的状态更新为所述装置共享状态。 一种装置,其特征在于,包括:请求模块和状态模块; 所述请求模块,用于接收第一缓存代理CA发送的第一共享读取请求; 所述状态模块,用于根据所述第一共享读取请求将所述目标数据的状态更新为所述第一CA共享状态,并向所述第一CA发送第一共享读取应答; 所述请求模块,还用于接收第二CA发送的第三独占读取请求,并根据所述目标数据的状态向所述第一CA发送第三独占侦听请求;所述第三独占侦听请求用于指示所述第一CA将对所述目标数据的读写权限更新为无效权限;在接收到所述第一CA发送的第三独占侦听请求的第三独占侦听应答后,向所述第二CA发送第三独占读取应答,并将所述目标数据的状态更新为所述第二CA独占状态;在接收到所述第一CA发送的第二共享读取请求后,向所述第二CA发送第二共享侦听请求; 所述状态模块,还用于在接收到所述第二CA发送的所述第二共享侦听请求的第二共享侦听应答后,将所述目标数据的状态更新为所述第一CA和所述第二CA共享状态,并向所述第一CA发送第二共享读取请求的第二共享读取应答。 如权利要求13所述的装置,其特征在于,所述第三独占读取应答用于指示所述第二CA向所述装置返回所述第三独占读取应答的确收应答; 所述请求模块向所述第二CA发送第二共享侦听请求之前,还用于: 接收到所述第二CA发送的所述第三独占读取应答的确收应答。 一种可读存储介质,其特征在于,所述可读存储介质存储有可执行指令,所述可执行指令用于使计算机执行如权利要求1至7中任一项所述的方法。 一种多核处理器,其特征在于,所述多核处理器包括多个处理器核、多个缓存代理CA和至少一个本地代理HA;其中,所述多个处理器核分别与所述多个CA一一对应; 所述处理器核,用于读写与所述处理器核对应的CA中所缓存的数据; 所述CA,用于执行如权利要求1或2所述的方法;所述HA,用于执行如权利要求3 或4所述的方法; 或者,所述CA,用于执行如权利要求5所述的方法;所述HA,用于执行如权利要求6或7所述的方法。技术领域
背景技术
附图说明
具体实施方式
RdI 获取目标数据,但不申请权限 RdS 获取目标数据,且允许与其它CA共享目标数据 RdE 获取目标数据,以及对目标数据的独占权限 RdX 获取对目标数据的独占权限,不获取目标数据 InvX 所有CA对目标数据的读写权限为无效权限,不读取数据 SnpI 侦听获取目标数据,不需要修改读写权限 SnpS 侦听获取目标数据,并指示将读写权限修改为共享权限 SnpE 侦听获取目标数据,并指示将读写权限修改为无效权限 SnpX 指示将读写权限修改为无效权限 RdI 无效 Data+Comp 无效 RdS 无效 Data+Comp 共享 RdE 无效/共享 Data+Comp 独占 RdX 无效/共享 Comp 独占 InvX 无效/共享/独占 Comp 无效 WbI 独占 Comp 无效 WbS 独占 Comp 共享 WbE 独占 Comp 独占 Evct 共享/独占 Comp 无效