读取数据的方法及装置与流程

文档序号:14911053发布日期:2018-07-10 23:25阅读:178来源:国知局

本申请涉及计算机领域,并且更具体地,涉及一种读取数据的方法及装置。



背景技术:

在缓存一致性-非对称存储器访问(Cache Coherence Non-Uniform Memory Access,简称为“CC-NUMA”)系统中,每个处理器都带有各自的扩展内存,处理器之间通过互联接口形成多处理器系统。各处理器所带的内存全系统可见,即任何一个处理器都可以访问本地内存或其他处理器所带的内存。上述多个处理器之间通过缓存一致性协议,维护数据一致性。目前绝大部分处理器都采用基于目录的缓存一致性协议,每个处理器都有目录,存储了每个处理器对应的存储器中。目录以缓存行(Cache Line)为单位记录了自己所带内存的数据被其他处理器访问的情况,目录需要记录被访问数据为独占或共享的状态,以及被哪个处理器所访问。

假设上述CC-NUMA系统包括四个中央处理器(Central Processing Unit,简称为“CPU”):CPU0,CPU1,CPU2和CPU3,CPU0需要读取CPU3的一个Cache Line数据,并将该数据设置为独占状态,那么该CPU0向CPU3发送独占请求,CPU3读取内存数据,向CPU0返回数据响应,并将目录中该数据对应的状态设置为独占态,因此,CPU0的缓存中就缓存了CPU3的该数据的副本。若在此之后,CPU1发起对相同地址的数据的访问,CPU3在接收到CPU1的访问请求之后,需要读取内存数据和目录,根据该目录获知该数据的独占副本被CPU0缓存,CPU3向CPU0发送侦听消息,获取到CPU0反馈的侦听响应之后,将目录中该数据的状态由独占态改为共享态,并将该数据发送给CPU1。

对于多个处理器之间数据访问过程的优化一直是亟待解决的问题。现有技术中的优化方案通过在每个处理器中设置一个目录缓存(Directory Cache,简称为“DC”),该目录缓存中缓存一部分目录,这一部分目录记录了该每个处理器自身存储的数据被其他处理器访问的一部分地址。当DC命中时,可以提前将侦听消息发送出去,例如,在上文的方案中,CPU3接收到CPU1发送的访问请求之后,若请求访问的数据的地址在DC中,那么CPU3可以直接向CPU0发送侦听消息,无需等待CPU3向存储器获取数据以及完整的目录。但是,DC一般只能缓存一个处理器Cache所对应的数据量的目录,那么若系统中有多个外部处理器的Cache时,大部分目录在DC中放不下,还是存储在存储器中,需要从存储器中读取目录,并不能起到优化的效果。若要提高命中率,就需要增大DC的容量,这样的设置浪费存储资源,增加设计成本。



技术实现要素:

有鉴于此,本申请实施例提供一种读取数据的方法,能够节省存储资源,节约设计成本。

第一方面,提供了一种读取数据的方法,包括:第一处理器接收第二处理器发送的第一读取请求消息,所述第一读取请求消息携带所述第二处理器需要读取的第一数据的地址以及所述第一数据的第一缓存状态,所述第一处理器包括第一地址范围寄存器DRR,所述第一DRR用于记录与所述第一处理器对应的存储器中被其他处理器访问的数据的地址的上界和下界;

在所述第一数据的地址在所述上界和所述下界范围内的情况下,所述第一处理器向除所述第二处理器外的至少一个第三处理器发送第一侦听消息,同时向所述存储器发送第二读取请求消息,所述第二读取请求消息用于请求读取所述第一数据,所述第一侦听消息用于表示所述第二处理器请求的所述第一缓存状态;

所述第一处理器接收所述至少一个第三处理器中的每个第三处理器根据所述第一侦听消息发送的第一侦听响应消息,所述第一侦听响应消息用于表示已根据所述第一缓存状态修改所述第一数据的缓存状态;

所述第一处理器接收所述存储器根据所述第二数据读取请求消息发送的所述第一数据;

所述第一处理器根据所述第一侦听响应消息,向所述第二处理器发送所述第一数据。

应理解,由于第一侦听消息和第二读取请求消息时同时发送的,第一处理器接收每个第三处理器发送的第一侦听响应消息和第一处理器接收存储器发送的第一数据,这两个步骤之间并没有先后顺序,应以实际情况为准,本申请实施例对此不作限定。

本申请实施例的读取数据的方法,通过在第一处理器中设置DRR以记录与该第一处理器对应的存储器中被其他处理器访问的数据的地址的上界和下界,使得第一处理器在接收到第二处理器发送的请求时,对于不需要侦听的情况,可以有效地过滤,对于需要侦听的情况,可以在提前读取内存数据的同时并行发起侦听,能够节省存储资源,节约设计成本,从而提高用户体验。

在第一方面的第一种可能的实现方式中,所述上界和所述下界范围内对应在所述存储器中的数据的大小小于或等于第一阈值,所述方法还包括:所述第一处理器根据所述第一数据的地址以及所述第一阈值,更新所述上界和所述下界。

具体地,系统运行一段时间后DRR的范围可能会变的非常大,接近第一处理器的整个地址空间,那么DRR过滤侦听的效果就会变差,因此,可以为第一DRR的地址限定一个范围,令第一DRR的上界和下界范围内对应的数据大小不超过第一阈值。在该第一DRR的上界和下界范围内对应的数据大小超过第一阈值的情况下,第一处理器可以更新该第一DRR的上界和下界。

这样,在每次有其他处理器访问该第一处理器的内存数据之后,该第一处理器根据访问的地址和第一阈值,更新第一DRR的上界和下界,能够保证该第一DRR的过滤侦听的效果。

结合第一方面的上述可能的实现方式,在第一方面的第二种可能的实现方式中,所述更新所述上界和所述下界,包括:

若所述第一数据的地址大于所述上界,且所述第一数据的地址与所述下界的范围内对应在所述存储器中的数据的大小大于所述第一阈值,所述第一处理器将所述第一数据的地址确定为更新后的所述上界,将所述第一数据的地址减去所述第一阈值所得的地址确定为更新后的所述下界;或

若所述第一数据的地址小于所述下界,且所述第一数据的地址与所述上界的范围内对应在所述存储器中的数据的大小大于所述第一阈值,所述第一处理器将所述第一数据的地址确定为更新后的所述下界,将所述第一数据的地址加所述第一阈值所得的地址确定为更新后的所述上界。

具体地,在第一数据的地址不在第一DRR的上界和下界的范围内时,在第二处理器访问了第一数据的地址的数据之后,该第一处理器就需要更新该第一DRR的上界和下界。更新的方式可以分两种情况:

(1)第一数据的地址大于上界,将第一数据的地址确定为更新后的上界,将第一数据的地址减去第一阈值所得的地址确定为更新后的下界;

(2)第一数据的地址小于下界,将第一数据的地址确定为更新后的下界,将第一数据的地址加上第一阈值所得的地址确定为更新后的上界。

上述第一DRR所记录的地址更新类似于滑动窗口机制,能够实时根据其他处理器对数据的读取情况进行更新。

结合第一方面的上述可能的实现方式,在第一方面的第三种可能的实现方式中,所述第一处理器包括多个DRR,所述多个DRR中的每个DRR对应不同的地址范围,所述多个DRR包括所述第一DRR;

所述方法还包括:

所述第一处理器根据所述第一数据的地址,从所述多个DRR中确定所述第一DRR。

具体地,可以为一个处理器设计多个DRR,并且为多个DRR中的每个DRR的地址限定一个范围,那么该第一处理器在接收到第二处理器发送的第一读取请求消息之后,可以根据该第一读取请求消息中携带的第一数据的地址,确定出包括该第一数据的地址的第一DRR。若每个DRR都不包括该第一数据的地址,那么该第一地址可能没有被其他处理器访问过,也可能是由于滑动窗口机制漏掉了,需要该第一处理器再根据存储器中存储的目录进行判断。

结合第一方面的上述可能的实现方式,在第一方面的第四种可能的实现方式中,所述第一处理器包括多个核,所述多个核与多个DRR一一对应。

具体地,可以为第一处理器的每一个核(Core)或者每一个最末级缓存(Last Level Cache,简称为“LLC”)设计一个对应的DRR寄存器,由于一个线程内的局部性更好,因此,DRR的有效性更好。

结合第一方面的上述可能的实现方式,在第一方面的第五种可能的实现方式中,所述方法还包括:

在所述第一数据的地址不在所述上界和所述下界范围内的情况下,所述第一处理器向所述存储器发送第三读取请求消息,所述第三读取请求消息用于请求读取所述第一数据以及所述第一处理器的目录,所述第一处理器的目录用于记录所述存储器中的数据被所述其他处理器访问的状态;

所述第一处理器接收所述存储器根据所述第二数据读取请求消息发送的所述第一数据以及所述第一处理器的目录;

在所述第一处理器根据所述第一处理器的目录,确定所述第一数据被第四处理器缓存的情况下,所述第一处理器向所述第四处理器发送第二侦听消息,所述第二侦听消息用于表示所述第二处理器请求的所述第一缓存状态;

所述第一处理器接收所述第四处理器根据所述第二侦听消息发送的第二侦听响应消息,所述第二侦听响应消息用于表示已根据所述第一缓存状态修改所述第一数据的缓存状态;

所述第一处理器根据所述第二侦听响应消息,向所述第二处理器发送所述第一数据。

应理解,上述第四处理器为除第一处理器和第二处理器外的其他处理器,因此,该第四处理器可以为至少一个第三处理器中的一个处理器,本申请实施例对此不作限定。

结合第一方面的上述可能的实现方式,在第一方面的第六种可能的实现方式中,在所述第一处理器接收第二处理器发送的第一读取请求消息之前,所述方法还包括:

所述第一处理器接收所述至少一个第三处理器中的第四处理器发送的第三读取请求消息,所述第三读取请求消息携带所述第一数据的地址以及所述第一数据的第二缓存状态;

所述第一处理器根据所述第三读取请求消息,向所述存储器发送第四读取请求消息,所述第四读取请求消息用于请求读取所述第一数据;

所述第一处理器接收所述存储器根据所述第四读取请求消息发送的所述第一数据;

所述第一处理器向所述第四处理器发送所述第一数据,并将所述第一数据的缓存状态记录为所述第二缓存状态。

具体地,在第二处理器向第一处理器发送该第一读取请求之前,已经有第四处理器读取了该第一数据,该第一处理器根据第四处理器发送的第三读取请求消息,向存储器读取第一数据,将该第一数据发送给第四处理器,并在对应的目录中记录第一数据的缓存状态为第二缓存状态。这里,第二缓存状态可以是独占状态。也可以是共享状态,本申请实施例对此不作限定。

第二方面,提供了一种读取数据的装置,用于执行上述第一方面或第一方面的任意可能的实现方式中的方法。具体地,该装置包括用于执行上述第一方面或第一方面的任意可能的实现方式中的方法的单元。

第三方面,提供了一种读取数据的装置,该装置包括:该装置包括:至少一个处理器、存储器和通信接口。其中,该至少一个处理器、该存储器和该通信接口均通过内部连接通路互相通信,该存储器用于存储计算机执行指令,该至少一个处理器用于执行该存储器存储的计算机执行指令,使得该装置可以通过该通信接口与其它装置进行数据交互来执行第一方面或第一方面的任意可能的实现方式中的方法。

第四方面,提供了一种读取数据的系统,该系统包括上述第二方面或第二方面的任一种可能实现方式中的装置;或者

该系统包括上述第三方面或第三方面的任一种可能实现方式中的装置。

第五方面,提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。

附图说明

图1是本申请实施例应用的多处理器系统的示意图。

图2是本申请实施例提供的读取数据的方法的示意性流程图。

图3是本申请实施例提供的第一DRR的地址示意图。

图4是本申请实施例提供的多个DRR的地址示意图。

图5是本申请实施例提供的更新多个DRR的地址的示意图。

图6为本申请实施例提供的读取数据的装置的示意性框图。

图7为本申请实施例提供的另一读取数据的装置的示意性框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

为了便于理解,下面先介绍一下本申请涉及到的多处理器系统的相关概念。

在多处理器系统中,存在共享数据和私有数据的存储器。私有数据是被单独的一个处理器使用的,而共享数据则是被多个处理器使用的。多处理器系统本质上是通过多个处理器之间互相读写共享数据完成处理器之间的通信。处理器把一个私有数据缓存之后,对该数据的访问就可以在该处理器的存储器中进行。而把共享数据装载到存储器中时,会在多个存储器中形成副本。如果某个处理器的存储器中的一个字被修改,若这个字中存储的是私有数据,则对这个字的修改只在这个存储器中进行;若这个字中存储的是共享数据,该数据可能在其他处理器的存储器中有副本,该数据最新修改后,如果其它的副本不能得到及时修改的话,这时该数据若被其他处理器访问就会出现错误,这就出现了多处理器高速缓存一致性问题。

如果一个多处理器系统满足如下条件,那么认为该多处理器系统是一致的:

(a)处理器P对地址X的写操作后面紧跟着处理器P对地址X的读操作,而且这次读操作和写操作之间没有其他处理器对地址X进行写操作,这时读操作总是返回P写入的数值。

(b)在其他处理器对地址X写操作后,处理器P对地址X执行读操作,这两个操作之间有足够的时间间隔而且没有其他处理器对地址X的写操作,这时读操作总是返回其他处理器写入的数值。

(c)写操作串行化,即对于同一个地址的写操作是串行执行的,若任意两个处理器分别对同一个地址进行写操作,那么系统会按照写操作的发送顺序先执行一个写操作,再执行另一个写操作,因此,在该多处理器系统中任意一个处理器看来对该地址的写操作都是按照上述串行的顺序执行的。

因此,处理器之间需要缓存一致性协议,来维护数据的一致性。目前绝大部分处理器都采用基于目录的缓存一致性协议,每个处理器都有目录,存储了每个处理器对应的存储器中。目录以缓存行(Cache Line)为单位记录了自己所带内存的数据被其他处理器访问的情况,目录需要记录被访问数据为独占或共享的状态,以及被哪个处理器所访问。目录可以通过共用总线与处理器和存储器通信,也可以通过专用端口连接到存储器,或者可以作为中央节点控制器的一部分来实现。

在上述基础之上,目录还必须跟踪每个数据块的状态。这就引出了MESI协议,MESI是修改(Modified)、独占(Exclusive)、共享(Shared)、失效(Invalid)的首字母缩写,代表四种缓存状态,失效状态可以简称为处于I状态,共享状态可以简称为S状态,独占状态可以简称为E状态,修改状态可以简称为M状态,任何多处理器系统中的缓存数据都处于这四种状态之一。

失效缓存数据:要么已经不在缓存中,要么内容已经过时。为了达到缓存的目的,这种状态的数据将会被忽略。一旦缓存数据被标记为失效,那效果就等同于它从来没被加载到缓存中。

共享缓存数据:它是和主内存内容保持一致的一份拷贝,在这种状态下的缓存数据只能被读取,不能被写入。多组缓存可以同时拥有针对同一内存地址的共享缓存数据。

独占缓存数据:和S状态一样,也是和主内存内容保持一致的一份拷贝。区别在于,如果一个处理器持有了某个E状态的缓存数据,那其他处理器就不能同时持有它,所以称之为“独占”。这意味着,如果其他处理器原本也持有同一缓存数据,那么其他处理器中的该缓存数据会马上变成I状态。

已修改缓存数据:属于脏段,因为它们已经被所属的处理器修改了。如果一个数据处于M状态,那么它在其他处理器缓存中的拷贝马上会变成I状态,这个规律和E状态一样。此外,如果已修改缓存数据被丢弃或标记为I状态,那么先要把它的内容回写到内存中。

综上所述,E状态解决了“在开始修改某块内存之前,需要告诉其他处理器”这一问题:只有当缓存数据处于E状态或M状态时,处理器才能去写它,也就是说只有这两种状态下,处理器是独占这个缓存段的。因此,当处理器想写某个缓存数据时,如果该处理器没有独占权,它必须先发送一条独占请求给总线,通知其他处理器,把它们拥有的同一缓存数据的拷贝失效。只有在获得独占权后,该处理器才能开始修改数据——并且此时,该处理器知道,这个缓存段只有一份拷贝,在自己的缓存里,所以不会有任何冲突。反之,如果有其他处理器想读取这个缓存数据,被独占或已修改的缓存数据必须先回到S状态。如果是已修改的缓存数据,那么还要先把内容回写到内存中。

因此,在多处理器系统中,读取某段缓存数据,实际上会牵涉到和该多处理器系统中的其他处理器之间的通讯,并且可能导致它们发生内存传输。本申请涉及的就是多处理器系统中读取数据的流程。

图1示出了本申请实施例的多处理器系统100。该多处理器系统100包括第一处理器101、第二处理器102以及至少一个第三处理器103,其中,每个处理器分别包括各自的存储器,用于缓存对应各自的数据。第一处理器101包括第一地址范围寄存器(Directory range register,简称为“DRR”),该第一DRR用于记录与该第一处理器对应的存储器中被其他处理器访问的数据的地址的上界和下界。具体地,在该其他处理器已访问多个地址的情况下,该多个地址可以是连续的,也可以是不连续的,该第一DRR仅需要取该多个地址中的最大值和最小值作为上界和下界进行记录即可。此外,第二处理器102、第三处理器103中也可以设置DRR,本申请的系统架构对此不作限定。

在一种实现方式中,上述第一处理器、第二处理器以及第三处理器可以为中央处理器(Central Processing Unit,简称为“CPU”),但本申请实施例并不限于此。

应理解,上述多处理器系统100还可以称为缓存一致性-非对称存储器访问(Cache Coherence Non-Uniform Memory Access,简称为“CC-NUMA”)系统。该多个处理器之间可以互相访问内存中的数据,且对数据的读写操作满足上述缓存一致性协议。

还应理解,图1示例性地示出了四个处理器和一个DRR,可选地,该多处理器系统100可以包括其它数量的处理器以及其他数量的DRR,本申请实施例对此不做限定。

图2是本申请实施例提供的读取数据的方法200的示意性流程图,该方法200可以应用于图1所示的多处理器系统100,但本申请实施例不限于此。

S210,第一处理器接收第二处理器发送的第一读取请求消息,所述第一读取请求消息携带所述第二处理器需要读取的第一数据的地址以及所述第一数据的第一缓存状态,所述第一处理器包括第一地址范围寄存器DRR,所述第一DRR用于记录与所述第一处理器对应的存储器中被其他处理器访问的数据的地址的上界和下界;

S220,在所述第一数据的地址在所述上界和所述下界范围内的情况下,所述第一处理器向除所述第二处理器外的至少一个第三处理器发送第一侦听消息,同时向所述存储器发送第二读取请求消息,所述第二读取请求消息用于请求读取所述第一数据,所述第一侦听消息用于表示所述第二处理器请求的所述第一缓存状态;

S230,所述第一处理器接收所述至少一个第三处理器中的每个第三处理器根据所述第一侦听消息发送的第一侦听响应消息,所述第一侦听响应消息用于表示已根据所述第一缓存状态修改所述第一数据的缓存状态;

S240,所述第一处理器接收所述存储器根据所述第二数据读取请求消息发送的所述第一数据;

S250,所述第一处理器根据所述第一侦听响应消息,向所述第二处理器发送所述第一数据。

具体地,在上述多处理器系统100中,第二处理器需要读取第一处理器内存中的第一数据,该第二处理器会向第一处理器发送第一读取请求消息,该第一读取请求消息用于请求读取该第一数据,并且该第一读取请求消息携带该第一数据的地址以及第二处理器请求的第一数据的第一缓存状态,该第一缓存状态可以是独占状态,也可以是共享状态。

在该第一处理器接收该第二处理器发送的第一读取请求消息之后,该第一处理器可以根据该第一读取请求消息中携带的第一数据的地址,判断该第一数据的地址是否在该第一DRR中记录的上界和下界范围之内。若该第一数据的地址在该上界和下界范围内,那么说明该第一数据的地址曾经被其他处理器访问过,该第一数据可能被其他处理器设置为独占状态,因此,为了保证缓存一致性,该第一处理器需要向除了该第二处理器外的至少一个第三处理器发送第一侦听消息,该第一侦听消息用于表示该第二处理器在第一读取请求消息中携带的第一缓存状态,使该至少一个第三处理器将该第一数据的缓存状态修改为与第二处理器请求的第一缓存状态相一致。在向至少一个第三处理器发送第一侦听消息的同时,该第一处理器向与自身相连的存储器发送第二读取请求消息,请求从本地内存中读取该第一数据。

应理解,该第一处理器在确定了该第一数据的地址在该上界和下界范围内的情况下,可以并行执行两个动作,即向至少一个第三处理器发送第一侦听消息和向与自身相连的存储器发送第二读取请求消息,上述“在向至少一个第三处理器发送第一侦听消息的同时,该第一处理器向与自身相连的存储器发送第二读取请求消息”中的“同时”指“发送第一侦听消息”和“”发送第二读取请求消息之间是没有因果关系的,该第一处理器不需要在发送上述第二读取请求消息之后才发送上述第一侦听消息,从而使得该第一处理器的两个操作可以并行执行,有效减少时延。

该至少一个第三处理器中的每个第三处理器接收第一处理器发送的第一侦听消息,判断自身是否缓存有该第一数据,若缓存有该第一数据,那么根据第一缓存状态修改该第一数据的缓存状态。例如,若该第一缓存状态为共享状态,那么缓存有该第一数据并且将该第一数据设置为独占状态的第三处理器需要将该第一数据修改为共享状态;若该第一缓存状态为独占状态,那么缓存有该第一数据的第三处理器需要将自身缓存的第一数据设置为无效状态。在对第一数据的状态依照缓存一致性协议修改完毕后,该至少一个第三处理器会向第一处理器返回第一侦听响应消息。

该第一处理器接收至少一个第三处理器中的每个第三处理器发送的第一侦听响应消息,表示已经按照协议对该第一数据的缓存状态进行了修改,那么,该第一处理器可以根据第一读取请求消息,将该第一数据设置为第一缓存状态。此外,该第一处理器接收存储器根据第二读取请求消息发送的第一数据,将第一数据发送给第二处理器。自此便完成了第二处理器读取第一数据的整个流程。

应理解,由于第一侦听消息和第二读取请求消息时同时发送的,S230和S240,即第一处理器接收每个第三处理器发送的第一侦听响应消息和第一处理器接收存储器发送的第一数据,这两个步骤之间并没有先后顺序,应以实际情况为准,本申请实施例对此不作限定。

因此,本申请实施例的读取数据的方法,通过在第一处理器中设置DRR以记录与该第一处理器对应的存储器中被其他处理器访问的数据的地址的上界和下界,使得第一处理器在接收到第二处理器发送的请求时,对于不需要侦听的情况,可以有效地过滤,对于需要侦听的情况,可以在提前读取内存数据的同时并行发起侦听,能够节省存储资源,节约设计成本,从而提高用户体验。

图3示出了本申请实施例提供的第一DRR的地址示意图。如图3所示的第一DRR的地址上界为c,下界为e。竖条方块表示第一处理器的地址全集,除该第一处理器外的其他处理器依次访问了该第一处理器的地址a,b,c,d,e,地址从大到小依次为c,b,d,a,e。

具体地,依次访问第一处理器的地址a,b,c,d,e后,第一DRR的值依次为:

a:{U,L}={a,null}

b:{U,L}={b,a}

c:{U,L}={c,a}

d:{U,L}={c,a}

e:{U,L}={c,e}

因此,最终第一DRR记录的地址即为{c,e},只要第二处理器请求读取的第一数据的地址落在{c,e}范围内,便可以并行发起侦听和读取第一数据。

应理解,U为上界(Upper Bound)的首字母大写,L为下界(Lower Bound)的首字母大写,下文与此相同,不再一一赘述。

作为一个可选的实施例,所述上界和所述下界范围内对应在所述存储器中的数据的大小小于或等于第一阈值,所述方法还包括:

所述第一处理器根据所述第一数据的地址以及所述第一阈值,更新所述上界和所述下界。

具体地,系统运行一段时间后DRR的范围可能会变的非常大,接近第一处理器的整个地址空间,那么DRR过滤侦听的效果就会变差,因此,可以为第一DRR的地址限定一个范围,令第一DRR的上界和下界范围内对应的数据大小不超过第一阈值。在该第一DRR的上界和下界范围内对应的数据大小超过第一阈值的情况下,第一处理器可以更新该第一DRR的上界和下界。

这样,在每次有其他处理器访问该第一处理器的内存数据之后,该第一处理器根据访问的地址和第一阈值,更新第一DRR的上界和下界,能够保证该第一DRR的过滤侦听的效果。

作为一个可选的实施例,所述更新所述上界和所述下界,包括:

若所述第一数据的地址大于所述上界,且所述第一数据的地址与所述下界的范围内对应在所述存储器中的数据的大小大于所述第一阈值,所述第一处理器将所述第一数据的地址确定为更新后的所述上界,将所述第一数据的地址减去所述第一阈值所得的地址确定为更新后的所述下界;或

若所述第一数据的地址小于所述下界,且所述第一数据的地址与所述上界的范围内对应在所述存储器中的数据的大小大于所述第一阈值,所述第一处理器将所述第一数据的地址确定为更新后的所述下界,将所述第一数据的地址加所述第一阈值所得的地址确定为更新后的所述上界。

具体地,在第一数据的地址不在第一DRR的上界和下界的范围内时,在第二处理器访问了第一数据的地址的数据之后,该第一处理器就需要更新该第一DRR的上界和下界。更新的方式可以分两种情况:

(1)第一数据的地址大于上界,将第一数据的地址确定为更新后的上界,将第一数据的地址减去第一阈值所得的地址确定为更新后的下界;

(2)第一数据的地址小于下界,将第一数据的地址确定为更新后的下界,将第一数据的地址加上第一阈值所得的地址确定为更新后的上界。

上述第一DRR所记录的地址更新类似于滑动窗口机制,能够实时根据其他处理器对数据的读取情况进行更新。

作为一个可选的实施例,所述第一处理器包括多个DRR,所述多个DRR中的每个DRR对应不同的地址范围,所述多个DRR包括所述第一DRR;

所述方法还包括:

所述第一处理器根据所述第一数据的地址,从所述多个DRR中确定所述第一DRR。

具体地,可以为一个处理器设计多个DRR,并且为多个DRR中的每个DRR的地址限定一个范围,那么该第一处理器在接收到第二处理器发送的第一读取请求消息之后,可以根据该第一读取请求消息中携带的第一数据的地址,确定出包括该第一数据的地址的第一DRR。若每个DRR都不包括该第一数据的地址,那么该第一地址可能没有被其他处理器访问过,也可能是由于滑动窗口机制漏掉了,需要该第一处理器再根据存储器中存储的目录进行判断。

图4示出了本申请实施例提供的多个DRR的地址示意图。如图4所示的第一DRR的地址上界为a,下界为e,第二DRR的上界为c,下界为d。竖条方块同样表示第一处理器的地址全集,除该第一处理器外的其他处理器依次访问了该第一处理器的地址a,b,c,d,e,地址从大到小依次为c,b,d,a,e。

具体地,依次访问第一处理器的地址a,b,c,d,e后,第一DRR和第二DRR的值依次为:

a:{U1,L1}={a,null},{U2,L2}={null,null}

b:{U1,L1}={a,null},{U2,L2}={null,b}

c:{U1,L1}={a,null},{U2,L2}={c,b}

d:{U1,L1}={a,null},{U2,L2}={c,d}

e:{U1,L1}={a,e},{U2,L2}={c,d}

因此,最终第一DRR记录的地址即为{a,e},第二DRR记录的地址即为{c,d}。只要第二处理器请求读取的第一数据的地址落在{a,e}范围内或{c,d}范围内,便可以并行发起侦听和读取第一数据。

图5示出了本申请实施例提供的更新多个DRR的地址的示意图。如图5所示,左侧为原始的第一DRR和第二DRR,右侧为更新后的第一DRR和第二DRR。假设每个DRR记录的范围限制在100MB以内,即超过100MB后以最新的地址确定边界。

在图4的基础之上,又有其他处理器访问了第一处理器中的地址f的数据,地址f大于地址c。因此,地址f需要记录在第二DRR中,但是f减去d的大小大于100MB,所以将f设置为新的上界,将f-100MB设置为新的下界。则在其他处理器访问了第一处理器的地址f之后,新的第一DRR,第二DRR分别为:

f:{U1,L1}={a,e},{U2,L2}={f,f-100MB}

实际上,DRR设置范围后,每个DRR实际上相当于一个滑动窗口,对于滑动窗口以外的,例如地址d,其侦听就不能通过DRR过滤需要读取内存中的目录进行处理。所以,根据实际系统的状态,合理的设计DRR的数量和范围,可以用远小于目录缓存的资源有效地实现目录的功能,需要侦听时提前发起侦听,不需要侦听时进行有效地过滤。

作为一个可选的实施例,所述第一处理器包括多个核,所述多个核与多个DRR一一对应。

具体地,可以为第一处理器的每一个核(Core)或者每一个最末级缓存(Last Level Cache,简称为“LLC”)设计一个对应的DRR寄存器,由于一个线程内的局部性更好,因此,DRR的有效性更好。例如,系统地址是40bit,每个处理器有32个核,对一个4P的系统,如果为每个核设计一个DRR,则需要的寄存器是3×32×40×2=7680个寄存器。再例如,如果LLC大小为32MB,那么DRR的记录范围可以限定在64MB左右,还可以为其配置一个合理的值,本申请实施例对此不作限定。

此外,还可以根据LLC的Bank,为每一个Bank设计一个DRR,本申请实施例对此也不作限定。

具体地,由于LLC通常比较大,这么大的存储器不可能是一整块来操作,需要分成多个物理模块Bank,例如,一个处理器的LLC有40MB,那么可以将该LLC分成10个Bank,该10个Bank中的每个Bank的大小为4MB。通过为每一个Bank设计一个DRR,可以分别对每个Bank进行独立地处理,从而提高系统性能。

作为一个可选的实施例,所述方法还包括:

在所述第一数据的地址不在所述上界和所述下界范围内的情况下,所述第一处理器向所述存储器发送第三读取请求消息,所述第三读取请求消息用于请求读取所述第一数据以及所述第一处理器的目录,所述第一处理器的目录用于记录所述存储器中的数据被所述其他处理器访问的状态;

所述第一处理器接收所述存储器根据所述第二数据读取请求消息发送的所述第一数据以及所述第一处理器的目录;

在所述第一处理器根据所述第一处理器的目录,确定所述第一数据被第四处理器缓存的情况下,所述第一处理器向所述第四处理器发送第二侦听消息,所述第二侦听消息用于表示所述第二处理器请求的所述第一缓存状态;

所述第一处理器接收所述第四处理器根据所述第二侦听消息发送的第二侦听响应消息,所述第二侦听响应消息用于表示已根据所述第一缓存状态修改所述第一数据的缓存状态;

所述第一处理器根据所述第二侦听响应消息,向所述第二处理器发送所述第一数据。

具体地,若该第一数据的地址不在第一DRR的上界和下界范围内,则说明该第一地址可能没有被其他处理器访问过,也可能是由于滑动窗口机制漏掉了,需要该第一处理器再根据存储器中存储的目录进行判断。该第一处理器向存储器发送第三读取请求消息,请求读取第一数据以及该第一处理器的目录。在获得了第一数据以及该第一处理器的目录之后,该第一处理器根据该第一数据的地址以及该第一处理器的目录,判断该第一数据的地址是否在该第一处理器的目录中。

若该第一数据的地址在该第一处理器的目录中,那么说明该第一数据曾被其他处理器访问过,该第一处理器根据该第一处理器的目录,确定该第一数据被第四处理器缓存。该第一处理器向该第四处理器发送第二侦听消息,第四处理器根据第一缓存状态将第一数据的缓存状态修改之后,向该第一处理器发送第二侦听响应消息,该第一处理器接收该第四处理器发送的第二侦听响应消息,确定多个处理器中该第一数据的缓存状态保持一致后,再向第二处理器发送该第一数据。

若该第一数据的地址不在该第一处理器的目录中,那么说明该第一数据不曾被任何处理器访问,该第一处理器可以直接将读取到的该第一数据发送给该第二处理器,并记录该第二处理器所请求的第一数据为第一缓存状态。

应理解,上述第四处理器为除第一处理器和第二处理器外的其他处理器,因此,该第四处理器可以为至少一个第三处理器中的一个处理器,本申请实施例对此不作限定。

作为一个可选的实施例,在所述第一处理器接收第二处理器发送的第一读取请求消息之前,所述方法还包括:

所述第一处理器接收所述至少一个第三处理器中的第四处理器发送的第三读取请求消息,所述第三读取请求消息携带所述第一数据的地址以及所述第一数据的第二缓存状态;

所述第一处理器根据所述第三读取请求消息,向所述存储器发送第四读取请求消息,所述第四读取请求消息用于请求读取所述第一数据;

所述第一处理器接收所述存储器根据所述第四读取请求消息发送的所述第一数据;

所述第一处理器向所述第四处理器发送所述第一数据,并将所述第一数据的缓存状态记录为所述第二缓存状态。

具体地,在第二处理器向第一处理器发送该第一读取请求之前,已经有第四处理器读取了该第一数据,该第一处理器根据第四处理器发送的第三读取请求消息,向存储器读取第一数据,将该第一数据发送给第四处理器,并在对应的目录中记录第一数据的缓存状态为第二缓存状态。这里,第二缓存状态可以是独占状态。也可以是共享状态,本申请实施例对此不作限定。

应理解,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

上文中结合图1至图5,详细描述了根据本申请实施例的读取数据的方法,下面将结合图6至图7,详细描述根据本申请实施例的读取数据的装置。

图6示出了本申请实施例提供的读取数据的装置600,该装置600包括:

接收单元610,用于接收第二处理器发送的第一读取请求消息,所述第一读取请求消息携带所述第二处理器需要读取的第一数据的地址以及所述第一数据的第一缓存状态,所述装置包括第一地址范围寄存器DRR,所述第一DRR用于记录与所述第一处理器对应的存储器中被其他处理器访问的数据的地址的上界和下界;

发送单元620,用于在所述第一数据的地址在所述上界和所述下界范围内的情况下,向除所述第二处理器外的至少一个第三处理器发送第一侦听消息,同时向所述存储器发送第二读取请求消息,所述第二读取请求消息用于请求读取所述第一数据,所述第一侦听消息用于表示所述第二处理器请求的所述第一缓存状态;

所述接收单元610还用于:接收所述至少一个第三处理器中的每个第三处理器根据所述第一侦听消息发送的第一侦听响应消息,所述第一侦听响应消息用于表示已根据所述第一缓存状态修改所述第一数据的缓存状态;接收所述存储器根据所述第二数据读取请求消息发送的所述第一数据;

所述发送单元620还用于:根据所述第一侦听响应消息,向所述第二处理器发送所述第一数据。

本申请实施例的读取数据的装置,通过在第一处理器中设置DRR以记录与该第一处理器对应的存储器中被其他处理器访问的数据的地址的上界和下界,使得第一处理器在接收到第二处理器发送的请求时,对于不需要侦听的情况,可以有效地过滤,对于需要侦听的情况,可以在提前读取内存数据的同时并行发起侦听,能够节省存储资源,节约设计成本,从而提高用户体验。

可选地,所述上界和所述下界范围内对应在所述存储器中的数据的大小小于或等于第一阈值,所述装置600还包括:更新单元,用于根据所述第一数据的地址以及所述第一阈值,更新所述上界和所述下界。

可选地,所述更新单元具体用于:若所述第一数据的地址大于所述上界,且所述第一数据的地址与所述下界的范围内对应在所述存储器中的数据的大小大于所述第一阈值,将所述第一数据的地址确定为更新后的所述上界,将所述第一数据的地址减去所述第一阈值所得的地址确定为更新后的所述下界;或若所述第一数据的地址小于所述下界,且所述第一数据的地址与所述上界的范围内对应在所述存储器中的数据的大小大于所述第一阈值,将所述第一数据的地址确定为更新后的所述下界,将所述第一数据的地址加所述第一阈值所得的地址确定为更新后的所述上界。

可选地,所述第一处理器包括多个DRR,所述多个DRR中的每个DRR对应不同的地址范围,所述多个DRR包括所述第一DRR;所述装置600还包括:确定单元,用于根据所述第一数据的地址,从所述多个DRR中确定所述第一DRR。

可选地,所述第一处理器包括多个核,所述多个核与多个DRR一一对应。

可选地,所述发送单元620还用于:在所述第一数据的地址不在所述上界和所述下界范围内的情况下,向所述存储器发送第三读取请求消息,所述第三读取请求消息用于请求读取所述第一数据以及所述第一处理器的目录,所述第一处理器的目录用于记录所述存储器中的数据被所述其他处理器访问的状态;所述接收单元610还用于:接收所述存储器根据所述第二数据读取请求消息发送的所述第一数据以及所述第一处理器的目录;所述发送单元620还用于:在根据所述第一处理器的目录,确定所述第一数据被第四处理器缓存的情况下,向所述第四处理器发送第二侦听消息,所述第二侦听消息用于表示所述第二处理器请求的所述第一缓存状态;所述接收单元610还用于:接收所述第四处理器根据所述第二侦听消息发送的第二侦听响应消息,所述第二侦听响应消息用于表示已根据所述第一缓存状态修改所述第一数据的缓存状态;所述发送单元620还用于:根据所述第二侦听响应消息,向所述第二处理器发送所述第一数据。

可选地,所述接收单元610还用于:在所述接收第二处理器发送的第一读取请求消息之前,接收所述至少一个第三处理器中的第四处理器发送的第三读取请求消息,所述第三读取请求消息携带所述第一数据的地址以及所述第一数据的第二缓存状态;所述发送单元620还用于:根据所述第三读取请求消息,向所述存储器发送第四读取请求消息,所述第四读取请求消息用于请求读取所述第一数据;所述接收单元610还用于:接收所述存储器根据所述第四读取请求消息发送的所述第一数据;所述发送单元620还用于:向所述第四处理器发送所述第一数据;所述装置600还包括:记录单元,用于将所述第一数据的缓存状态记录为所述第二缓存状态。

应理解,这里的装置600以功能单元的形式体现。这里的术语“单元”可以指应用特有集成电路(Application Specific Integrated Circuit,ASIC)、电子电路、用于执行一个或多个软件或固件程序的处理器(例如共享处理器、专有处理器或组处理器等)和存储器、合并逻辑电路和/或其它支持所描述的功能的合适组件。在一个可选例子中,本领域技术人员可以理解,装置600可以具体为上述实施例中的第一处理器,装置600可以用于执行上述方法实施例中与该第一处理器对应的各个流程和/或步骤,为避免重复,在此不再赘述。

图7示出了本申请实施例提供的另一读取数据的装置700。该装置700包括至少一个处理器710、存储器720和通信接口730;所述至少一个处理器710、所述存储器720和所述通信接口730均通过内部连接通路连接;

所述存储器720,用于存储计算机执行指令;

所述至少一个处理器710,用于执行所述存储器720存储的计算机执行指令,使得所述装置700可以通过所述通信接口730与其他装置进行数据交互来执行上述方法实施例提供的读取数据的方法。

其中,该至少一个处理器710用于执行以下操作:

通过所述通信接口730接收第二处理器发送的第一读取请求消息,所述第一读取请求消息携带所述第二处理器需要读取的第一数据的地址以及所述第一数据的第一缓存状态,所述装置包括第一地址范围寄存器DRR,所述第一DRR用于记录与所述第一处理器对应的存储器中被其他处理器访问的数据的地址的上界和下界;

在所述第一数据的地址在所述上界和所述下界范围内的情况下,通过所述通信接口730向除所述第二处理器外的至少一个第三处理器发送第一侦听消息,同时向所述存储器发送第二读取请求消息,所述第二读取请求消息用于请求读取所述第一数据,所述第一侦听消息用于表示所述第二处理器请求的所述第一缓存状态;

通过所述通信接口730接收所述至少一个第三处理器中的每个第三处理器根据所述第一侦听消息发送的第一侦听响应消息,所述第一侦听响应消息用于表示已根据所述第一缓存状态修改所述第一数据的缓存状态;

通过所述通信接口730接收所述存储器根据所述第二数据读取请求消息发送的所述第一数据;

根据所述第一侦听响应消息,通过所述通信接口730向所述第二处理器发送所述第一数据。

本申请实施例的读取数据的装置,通过在第一处理器中设置DRR以记录与该第一处理器对应的存储器中被其他处理器访问的数据的地址的上界和下界,使得第一处理器在接收到第二处理器发送的请求时,对于不需要侦听的情况,可以有效地过滤,对于需要侦听的情况,可以在提前读取内存数据的同时并行发起侦听,能够节省存储资源,节约设计成本,从而提高用户体验。

可选地,所述上界和所述下界范围内对应在所述存储器中的数据的大小小于或等于第一阈值,所述至少一个处理器710还用于根据所述第一数据的地址以及所述第一阈值,更新所述上界和所述下界。

可选地,所述至少一个处理器710具体用于:若所述第一数据的地址大于所述上界,且所述第一数据的地址与所述下界的范围内对应在所述存储器中的数据的大小大于所述第一阈值,将所述第一数据的地址确定为更新后的所述上界,将所述第一数据的地址减去所述第一阈值所得的地址确定为更新后的所述下界;或若所述第一数据的地址小于所述下界,且所述第一数据的地址与所述上界的范围内对应在所述存储器中的数据的大小大于所述第一阈值,将所述第一数据的地址确定为更新后的所述下界,将所述第一数据的地址加所述第一阈值所得的地址确定为更新后的所述上界。

可选地,所述第一处理器包括多个DRR,所述多个DRR中的每个DRR对应不同的地址范围,所述多个DRR包括所述第一DRR;所述至少一个处理器710还用于根据所述第一数据的地址,从所述多个DRR中确定所述第一DRR。

可选地,所述第一处理器包括多个核,所述多个核与多个DRR一一对应。

可选地,所述至少一个处理器710还用于:在所述第一数据的地址不在所述上界和所述下界范围内的情况下,通过所述通信接口730向所述存储器发送第三读取请求消息,所述第三读取请求消息用于请求读取所述第一数据以及所述第一处理器的目录,所述第一处理器的目录用于记录所述存储器中的数据被所述其他处理器访问的状态;通过所述通信接口730接收所述存储器根据所述第二数据读取请求消息发送的所述第一数据以及所述第一处理器的目录;在根据所述第一处理器的目录,通过所述通信接口730确定所述第一数据被第四处理器缓存的情况下,向所述第四处理器发送第二侦听消息,所述第二侦听消息用于表示所述第二处理器请求的所述第一缓存状态;通过所述通信接口730接收所述第四处理器根据所述第二侦听消息发送的第二侦听响应消息,所述第二侦听响应消息用于表示已根据所述第一缓存状态修改所述第一数据的缓存状态;根据所述第二侦听响应消息,通过所述通信接口730向所述第二处理器发送所述第一数据。

可选地,所述至少一个处理器710还用于:在所述接收第二处理器发送的第一读取请求消息之前,通过所述通信接口730接收所述至少一个第三处理器中的第四处理器发送的第三读取请求消息,所述第三读取请求消息携带所述第一数据的地址以及所述第一数据的第二缓存状态;根据所述第三读取请求消息,通过所述通信接口730向所述存储器发送第四读取请求消息,所述第四读取请求消息用于请求读取所述第一数据;通过所述通信接口730接收所述存储器根据所述第四读取请求消息发送的所述第一数据;通过所述通信接口730向所述第四处理器发送所述第一数据;所述至少一个处理器710还用于将所述第一数据的缓存状态记录为所述第二缓存状态。

应理解,装置700可以具体为上述实施例200中的第一处理器,并且可以用于执行上述方法实施例200中与第一处理器对应的各个步骤和/或流程。

应理解,在本申请实施例中,至少一个处理器可以包括不同类型的处理器,或者包括相同类型的处理器;处理器可以是以下的任一种:中央处理器(Central Processing Unit,简称为“CPU”)、ARM处理器、现场可编程门阵列(Field Programmable Gate Array,简称为“FPGA”)、专用处理器等具有计算处理能力的器件。一种可选实施方式,该至少一个处理器还可以集成为众核处理器。

存储器可以是以下的任一种或任一种组合:随机存取存储器(Random Access Memory,简称为“RAM”)、只读存储器(read only memory,简称为“ROM”)、非易失性存储器(non-volatile memory,简称为“NVM”)、固态硬盘(Solid State Drives,简称为“SSD”)、机械硬盘、磁盘、磁盘整列等存储介质。

通信接口用于本装置与其他设备之间的数据交互。通信接口可以是以下的任一种或任一种组合:网络接口(例如以太网接口)、无线网卡等具有网络接入功能的器件。

可选地,装置700还可以包括总线740,该总线可以包括地址总线、数据总线、控制总线等,为便于表示,在图7中用一条粗线表示该总线。总线可以是以下的任一种或任一种组合:工业标准体系结构(Industry Standard Architecture,简称为“ISA”)总线、外设组件互连标准(Peripheral Component Interconnect,简称为“PCI”)总线、扩展工业标准结构(Extended Industry Standard Architecture,简称为“EISA”)总线等有线数据传输的器件。

在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器执行存储器中的指令,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。

应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的分割,仅仅为一种逻辑功能分割,实际实现时可以有另外的分割方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1