首页> 中国专利> 在维护缓存一致性时维护事务次序的处理器及其方法

在维护缓存一致性时维护事务次序的处理器及其方法

摘要

提出了在维护缓存一致性时维护事务次序的处理器及其方法,其中所述方法包括:从第一模块接收到针对目标数据块的第一副本的第一请求;将维护的当前的序列戳加一以得到第一序列戳;基于第一序列戳生成用于在第二模块上更新目标数据块的第二副本的状态的监听消息;检查待发送的一个或多个响应消息中的每一个响应消息的序列戳;以及基于检查的结果向第二模块发送监听消息。

著录项

  • 公开/公告号CN112579479B

    专利类型发明专利

  • 公开/公告日2022-07-08

    原文格式PDF

  • 申请/专利权人 成都海光微电子技术有限公司;

    申请/专利号CN202011430013.4

  • 发明设计人 武杨;

    申请日2020-12-07

  • 分类号G06F12/0817(2016.01);G06F12/0842(2016.01);

  • 代理机构北京市柳沈律师事务所 11105;

  • 代理人万里晴

  • 地址 610216 四川省成都市中国(四川)自由贸易试验区成都高新区和乐二街171号4栋

  • 入库时间 2022-08-23 13:59:44

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-07-08

    授权

    发明专利权授予

说明书

技术领域

本发明涉及在多核或多处理器系统中的并发事务,更具体地,涉及在维护缓存一致性时维护事务次序的处理器及其方法。

背景技术

在多核或多处理器系统中,多个缓存(cache)中的每个缓存所存储的数据块都是它们共享的内存中对应地址的数据块的副本,因此多核和多处理器系统的缓存一致性既包括每个缓存和内存之间的一致性,还包括多个缓存彼此之间的一致性。也就是说,对于在内存中的同一位置的数据块,不同缓存中与之对应的缓存行(cache line)或数据块不应该有不一致的值。

实现缓存一致性的方式一般来说有两种,一种是基于广播,一种是基于目录。随着多核或多处理器系统的规模越来越大(诸如CC-NUMA系统),基于目录的缓存一致性协议成为当今的主流。基于目录的缓存一致性协议的基本思想是用目录的形式(例如,表格)记录所有缓存行或数据块以及共享数据块的位置和状态。因此,当处理器对某一缓存行或数据块进行访存操作时,便可根据相应的目录项获悉与该缓存行或数据块中存储的副本相对应的内存上的原数据块以及其他缓存上的其他副本的状态,并且根据所获悉的信息来确定如何进行缓存一致性的维护。

在维护缓存一致性时,次序(ordering)是一个非常重要的问题。具体地,维护缓存一致性通常涉及系统中出现并发事务的情况,其中,事务(transaction)是指为了处理对数据块的请求而发起的在各个缓存和相关模块之间进行的通信过程。实际上,往往同时出现针对同一数据块的多个副本的请求,从而出现并发事务。如果对这些并发事务处理的次序不正确,则缓存一致性将无法得到保证。

发明内容

本发明的一方面公开了一种在维护缓存一致性时维护事务次序的处理器,所述处理器包括:家节点模块,包括目录和序列戳寄存器,所述目录用于记录各个数据块的状态信息,所述序列戳寄存器被配置为维护用于对所生成的响应消息或监听消息进行标记的序列戳;路由模块,被配置为维护待发送的一个或多个响应消息,并且为所述待发送的一个或多个响应消息中的每一个响应消息分配传输路由;以及控制单元,被配置为控制所述处理器执行以下操作:从第一模块接收到针对目标数据块的第一副本的第一请求;将维护的当前的序列戳加一以得到第一序列戳;基于所述第一序列戳生成用于在第二模块上更新所述目标数据块的第二副本的状态的监听消息;检查所述待发送的一个或多个响应消息中的每一个响应消息的序列戳;以及基于所述检查的结果向所述第二模块发送所述监听消息。

根据一个实施例,基于所述第一序列戳生成用于在第二模块上更新所述目标数据块的第二副本的状态的监听消息包括:根据所述第一请求和所述目录确定需要更新所述第二副本的状态,以及基于确定需要更新所述第二副本的状态,生成用于更新所述第二副本的状态的并且包括所述第一序列戳的监听消息。

根据一个实施例,其中,所述待发送的一个或多个响应消息中的每一个响应消息是针对接收到的相应的请求而生成的,并且所述待发送的一个或多个响应消息中的每一个响应消息的序列戳是在接收到所述相应的请求时被记录到相应的缓冲条目中的序列戳。

根据一个实施例,其中,基于所述检查的结果向所述第二模块发送所述监听消息包括:如果所述检查的结果指示所述待发送的一个或多个响应消息中不存在序列戳小于所述第一序列戳的响应消息,则向所述第二模块发送所述监听消息。

根据一个实施例,其中,基于所述检查的结果向所述第二模块发送所述监听消息包括:如果所述检查的结果指示所述待发送的一个或多个响应消息中存在序列戳小于所述第一序列戳的至少一个响应消息,则等待预定时段之后再次检查所述待发送的一个或多个响应消息中的每一个响应消息的序列戳;以及基于所述再次检查的结果向所述第二模块发送所述监听消息。

根据一个实施例,其中,根据所述第一请求和所述目录确定需要更新所述第二副本的状态包括,根据以下各种情况之一确定需要更新所述第二副本的状态:所述第一请求是读取所述第一副本的请求,并且所述目录指示所述第二模块上所述第二副本的状态是M状态或E状态;或者所述第一请求是写入所述第一副本的请求,并且所述目录指示所述第二模块上所述第二副本的状态是M状态或E状态或S状态。

根据一个实施例,所述路由模块还被配置为对于源和目的地相同的响应消息或监听消息分配相同的传输路由。

根据一个实施例,所述控制器还被配置为控制所述处理器基于所述第一序列戳生成针对所述第一请求的第一响应消息,并将所述第一响应消息发送到所述第一模块。

根据一个实施例,所述处理器还包括缓冲单元,所述缓冲单元被配置为维护用于处理每一个请求的缓冲条目,并且在完成发送相应的响应消息之后释放相应的缓冲条目。

根据一个实施例,所述第一模块和所述第二模块都在所述处理器内;或者所述第一模块和所述第二模块都在另一处理器内;或者所述第一模块和所述第二模块分别在不同的处理器内。

本发明的另一方面公开了一种用于由处理器在维护缓存一致性时维护事务次序的方法,所述方法包括:从第一模块接收到针对目标数据块的第一副本的第一请求;将维护的当前的序列戳加一以得到第一序列戳;基于所述第一序列戳生成用于在第二模块上更新所述目标数据块的第二副本的状态的监听消息;检查待发送的一个或多个响应消息中的每一个响应消息的序列戳;以及基于所述检查的结果向所述第二模块发送所述监听消息。

本发明的技术方案的有益效果在于,通过在处理用于维护缓存一致性的各个事务时引入序列戳来维护这些事务的次序,能够减小协议层为处理数据块请求而建立的缓冲条目的生命周期、降低对协议层缓冲区的尺寸要求、减小存在地址冲突的并发事务的挂起时长,同时还能够减小通信传输的负担。

要理解的是,前面的一般描述和下面的详细描述两者都是示例性的,并且意图在于提供要求保护的技术的进一步说明。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。

图1示出了根据本公开实施例的处理器的架构的示意图。

图2示出了根据本公开实施例的基于确认机制的维护事务次序的过程的示意图。

图3示出了根据本公开实施例的基于序列戳机制的维护事务次序的过程的示意图。

图4示出了根据本公开实施例的基于序列戳机制的维护事务次序的方法的流程图。

具体实施方式

下面将结合本公开的实施例中的附图,对本公开实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本公开的一部分实施例,而不是全部实施例。通常在附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。

应注意到,相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

图1示出了根据本公开实施例的处理器100的架构的示意图。

如图1所示的架构包括处理器100以及耦接到处理器100的第一模块10和第二模块20。根据本公开的各种实施例,第一模块10和第二模块20可以分别与一个管理各自缓存的处理器或核相关联,或者第一模块10和第二模块20可以是能够代表各自缓存与其他处理器或核交换数据等信息的代理模块。也就是说,第一模块10和第二模块20仅仅是示意性的,它们可以是能够管理缓存中的数据块的副本的任何实体,本公开不对它们的实施方式进行限制。根据本公开的各种实施例,第一模块10和第二模块20可以都在处理器内100,例如,作为处理器100内的两个核;或者,第一模块10和第二模块20可以都在另一处理器内,例如,作为另一处理器内的两个核;或者,第一模块10和第二模块20可以是不同于处理器100的另外两个不同的处理器;等等。也就是说,处理器100、第一模块10和第二模块20可以处于任何形式的多核或多处理器系统中。在下文中,假定第一模块10和第二模块20是不同于处理器100的两个处理器,即,第一模块10、第二模块20和处理器100构成多处理器系统,并基于这种假定来示出各种实施例。本领域技术人员应该理解,基于这种假定的实施例仅仅是示意性的,并不意味着将实施本发明的架构限制于此。

如图1所示,处理器100包括控制单元110、家节点120、路由模块130以及缓冲单元140,并且控制单元110、家节点120、路由模块130以及缓冲单元140彼此耦接。

控制单元110用于控制其他各个模块或单元以便实施各种与处理器100相关联的操作,例如,用于维护缓存一致性的各种操作。

家节点(Home Node,又可称为Home Agent)120是用于在多核或多处理器系统中处理接收到的请求以及用于维护缓存一致性的事务的模块。具体地,家节点120可以包括目录121和序列戳寄存器。

目录121用于记录各个数据块的状态信息(或目录信息),例如,目录121可以实施为一个表格。对于每个物理地址来说,与在该地址存储的数据块相关的目录信息存储在一个特定的家节点上。在本公开的各种实施例中,假定所有涉及的数据块的目录信息都存在于目录121中。

序列戳寄存器122维护用于对各种消息进行标记的序列戳,一般地,该序列戳用于标记针对接收到的请求而发送的响应消息或监听消息。序列戳寄存器122可以是16位或者32位,本公开不对其位数进行限制。在一种实施方式中,序列戳寄存器122的位数可以被设置为等于家节点120所能处理的并发事务的最大数量。

路由模块130用于调度待发送的各种消息(包括响应消息和监听消息),为这些消息分配传输路由,并按照传输路由发送这些消息以使其到达期望的目的地。

缓冲单元140用于为每个接收到的请求申请(或创建)一个相对应的缓冲条目(buffer entry),以用于存储在处理该请求的过程中所涉及的各种信息,包括数据块和/或其副本的内容信息、状态信息等。换句话说,一个缓冲条目对应于一个事务。

在确认(ACK)机制的情况下,缓冲条目在接收到请求时被创建,在接收到针对所发出的相应的响应消息的确认消息之后被释放。在序列戳机制的情况下,缓冲条目同样在接收到请求时被创建,但是在发出相应的响应消息和监听消息(如果有的话)之后即被释放。一个缓冲条目的生命周期(lifetime)是指从其被创建到被释放所持续的时长。可以理解的是,并发事务越多,同时存在的缓冲条目的越多。也就是说,缓冲单元140的尺寸(即,对应于能够容纳的缓冲条目的最大数量)在某种程度限制了处理器处理并发事务的能力。

根据本发明的实施例,处理器100可以通过家节点120来处理接收到的请求并维护系统的缓存一致性,例如,所述请求可以是针对数据块和/或其状态信息的请求。在一个实施例中,当处理器100从其他处理器接收到针对位于某一地址的数据块和/或其状态信息的请求时,可以查询目录121以获取当前持有该数据块的副本的处理器的列表,并且可以基于该列表进行针对该数据块的缓存一致性维护。

根据本发明的实施例,每当接收到一个可能会(但并不一定)引起监听的请求(例如,针对数据块的访存请求)时,处理器100可以将序列戳寄存器122所维护的序列戳加一,同时将这个更新后的序列戳记录在与该请求相对应的缓冲条目中,并且在生成与该请求相对应的响应消息或监听消息时用这个序列戳进行标记。

图2示出了根据本公开实施例的基于确认机制的维护事务次序的过程200的示意图。在过程200中,针对各个事务使用确认消息(ACK)来保证事务次序的正确性。

为了便于描述,在本公开的实施例中,第一请求是指来自第一模块10的请求,第二请求是指来自第二模块20的请求;并且,用“第一”来描述与第一请求相关联的各种消息,诸如第一请求、第一响应、第一确认等,并且用“第二”来描述与第二请求相关联的各种消息,诸如第二请求、第二响应、第二确认等。

在过程200中,处理器100接收到来自两个不同模块但针对同一数据块的请求(即第一请求和第二请求),并针对这两个请求分别发起两个事务过程(在图2中分别用浅灰色箭头和深灰色箭头表示)以响应相应的请求并维护缓存一致性。

在步骤S221,处理器100接收到来自第二模块20的针对特定数据块X的第二副本的第二请求(例如,访存请求)。在晚于步骤S221的步骤S211,即在还没有完成处理第二请求的情况下,处理器100又接收到来自第一模块10的针对同一数据块X的第一副本的第一请求。

与此同时,处理器100根据第一请求和第二请求的内容和类型来查询家节点120上的目录121,并且发现,与第二请求相同,较晚接受到的第一请求也是针对数据块X而发出的。因此,为了维护数据块X在各个缓存上的副本的一致性,处理器100需要按照接收请求的次序来处理这两个请求。也就是说,处理器100先处理第二请求,并且等待完成处理第二请求之后再处理第一请求。

具体地,在步骤S222,处理器100根据第二请求来更新目录121并向第二模块20发送针对第二请求的第二响应,例如,以提供所请求的第二副本的最新值和/或维护第二副本在第二模块20上的一致性状态。然后,第二模块20完成对第二响应的处理之后,在步骤S223向家节点120发回确认消息(即第二确认),以通知针对第二请求的处理已经完成。处理器100在接收到第二确认之后,释放在缓冲单元140中建立的用于处理第二请求的第二缓冲条目。

然后,处理器100开始处理第一请求。具体地,处理器100根据第一请求来查询和更新目录121。在步骤S213,处理器100向第一模块10发送针对第一请求的第一响应,例如,以提供所请求的第一副本的最新值和/或维护第一副本在第一模块10上的一致性状态。可选地,处理器100通过目录121可以确定,为了维护与数据块X相关的缓存一致性,需要在处理针对数据块X的第一副本的第一请求的同时,更改数据块X的第二副本的状态信息。因此,处理器100基于第一请求和目录121生成用于更新第二副本的状态的监听消息(即第一监听),并在步骤S212将其发送到第二模块20。通常,处理器100的路由模块130利用两个独立的通道(即资源)分别传输监听消息和响应消息,因此上述步骤S212和步骤S213可以是同时发生的,或者是不同时发生的,本公开对此不进行任何限制。

第二模块20在接收到第一监听之后,根据第一监听来维护第二副本的状态,并在步骤S214向第一模块10发送第一监听响应以进一步维护第一副本的状态。第一模块10在接收到第一监听响应之后对第一副本的状态进行维护,确认针对第一请求的缓存一致性维护已经完成,最后在步骤S215向处理器100发送第一确认以释放用于处理第一请求的第一缓冲条目。

简而言之,在过程200中为了发起用于处理并发的第一请求和第二请求的两个事务,处理器100需要在缓冲单元140中分别维护第一缓冲条目和第二缓冲条目。参考图2,可以看出,第一缓冲条目的生命周期为从接收到第一请求时到接收到第一确认时,第二缓冲条目的生命周期为从接收到第二请求时到接收到第二确认时,其中,图2中的阴影部分标识出第一缓冲条目和第二缓冲条目同时存在的时段,或者说是处理第一请求的延迟。在延迟期间,正在处理第二请求并等待第二确认,并且第一请求被挂起,直到接收到第二确认才被处理。因此,第一缓冲条目在延迟期间的存在显得有点资源浪费。在这种机制下,有可能同时挂起多个缓冲条目,这提高了对缓冲单元140的尺寸要求。

图3示出了根据本公开实施例的基于序列戳机制的维护事务次序的过程300的示意图。在过程300中,针对各个事务使用序列戳寄存器122来保证事务次序的正确性。

在过程300中,处理器100接收到来自两个不同模块但针对同一数据块的请求(即第一请求和第二请求),并针对这两个请求分别发起两个事务过程(在图3中分别用浅灰色箭头和深灰色箭头表示)以响应相应的请求并维护缓存一致性。

与过程200类似,在步骤S321,处理器100接收到来自第二模块20的针对特定数据块X的第二副本的第二请求(例如,访存请求)。在晚于步骤S321的步骤S311,即在还没有完成处理第二请求的情况下,处理器100又接收到来自第一模块10的针对同一数据块X的第一副本的第一请求。

具体地,当处理器100接收到第二请求时,基于第二请求的类型是可缓存的(cacheable),将序列戳寄存器122中维护的当前的序列戳加一以得到新的序列戳(即第二序列戳),并将该第二序列戳记录在用于处理第二请求的第二缓冲条目中。然后,处理器100基于第二请求和目录121生成针对第二请求的第二响应,例如,以提供所请求的第二副本的最新值和/或维护第二副本在第二模块20上的一致性状态。其中,第二响应包括第二序列戳。在向第二模块20发出第二响应之后,处理器100立刻释放第二缓冲条目。这里,第二模块20不需要向处理器100发送任何确认消息。

另一方面,当处理器100接收到第一请求时,基于第一请求的类型是可缓存的,将序列戳寄存器122中维护的当前的序列戳加一以得到新的序列戳(即第一序列戳),并将该第一序列戳记录在用于处理第一请求的第一缓冲条目中。此时,由于第一请求晚于第二请求,因此第一序列戳的值至少比第二序列戳的值大一。在查询目录121之后,处理器100发现第一请求同样是针对数据块X的,并且进而确定在处理第一请求的同时,为了维护数据块X的缓存一致性,还需要更新第二模块上数据块X的另一副本的状态。因此,处理器100基于第一请求和目录121生成第一响应和第一监听,并且第一响应和第一监听都包含第一序列戳。该第一响应用于提供所请求的第一副本的最新值和/或维护第一副本在第一模块10上的一致性状态,而该第一监听用于维护第二副本在第二模块20上的一致性状态。在这种情况下,仍然需要保证对第一请求的处理在对第二请求的处理之后进行。

随后,处理器100将第一响应和第一监听推送到路由模块130。所有需要往外发送的消息都在路由模块130中排队,并且,响应消息和监听消息使用不同的通道传输。在发送第一监听之前,处理器100首先检查所有待发送的响应消息的序列戳,并确认是否存在序列戳比第一监听的第一序列戳更小的响应消息。

如果响应消息队列中不存在序列戳比第一序列戳更小的响应消息,意味着此前的请求都已经处理了(已发出相应响应),则处理器控制路由模块130在步骤S312将第一监听发送到第二模块20。此外,路由模块130可以根据各个消息的源和目的地,为源和目的地相同的消息分配相同的传输路由。因此,这里的第一监听和之前的第二响应的传输路由是相同的,并且一般情况下,第一监听将在第二响应之后到达第二模块20。

如果响应消息队列中存在序列戳比第一序列戳更小的响应消息,意味着此前的请求尚未处理,则等待一预定时段之后再次进行检查。如果再次检查的结果指示响应消息队列中不存在序列戳比第一序列戳更小的响应消息,则在步骤S312发送第一监听;否则,再等待一预定时段,以此类推。该预定时段可以是任何合适的时长,本公开对此不进行任何限制。

另一方面,处理器100可以将队列中的响应消息的按次序(例如,按先进先出的次序或按序列戳大小的次序)逐一发出,即,处理器100按次序在步骤S313将第一响应发送到第一模块10。也就是说,不需要额外的操作,处理器100一般可以保证各个响应消息被发出的次序的正确性。在第一监听和第一响应都发出之后,即在包含第一序列戳的消息都发出之后,处理器100释放与第一序列戳相对应的用于处理第一请求的第一缓冲条目。

第二模块20根据第一监听完成对第二副本的缓存一致性维护之后,在步骤S314向第一模块10发送第一监听响应以进一步维护第一副本的缓存一致性。这里,第一模块10不需要向处理器100发送任何确认消息。

在过程300中,同样存在为了发起用于处理第一请求和第二请求的两个事务而建立的第一缓冲条目和第二缓冲条目。然而,与过程200相比而言,两个缓冲条目的生命周期短得多,因为它们在相应的响应消息和监听消息都发出之后被立即释放,并且出现地址冲突时也不用挂起(例如图2所示的阴影部分的情况)。此外,在这种机制下,每个事务的处理时间由于不必发送确认消息也大大缩短。相应地,同时存在多个缓冲条目的时间和几率也有所降低,从而降低了对缓冲单元140的尺寸要求,提高了处理器100处理并发任务的能力。总体上,各个模块或处理器之间的通信次数也得以减少,这不仅可以节省时间和资源,还可以提高系统的稳定性。

此外,在前文中,所提及的确定需要更新第二模块20上的副本的状态的情况可以理解为是基于监听协议而确定的。常见的监听协议包括MSI(Modified Shared OrInvalid)协议、MESI(Modified Exclusive Shared Or Invalid)协议、MOESI(ModifiedOwned Exclusive Shared Or Invalid)协议等等。

以MESI协议和过程300为例,可能存在如下情况:第一请求是读取第一模块上的第一副本的请求,并且目录121指示第二模块上第二副本的状态是M状态或E状态,则确定需要将第二副本的状态修改为S状态;或者,第一请求是写入(即修改)第一副本的请求,并且目录121指示第二模块上第二副本的状态是M状态或E状态或S状态,则确定需要将第二副本的状态修改为I状态;或者,第一请求是任何其他需要发起监听消息来修改副本状态或获取副本权限的请求。本领域技术人员应当理解如何基于监听协议来确定什么时候需要用监听消息来更新副本的状态。

图4示出了根据本公开实施例的基于序列戳机制的维护事务次序的方法400的流程图。根据本公开的实施例,方法400由处理器100实施。

在步骤S401,可以从第一模块接收到针对目标数据块的第一副本的第一请求。例如,第一请求是任何可缓存类型的请求。并且,可以在缓冲单元140中建立用于处理第一请求的第一缓冲条目。

在步骤S402,可以将序列戳寄存器122中维护的当前的序列戳加一以得到第一序列戳。同时,可以将第一序列戳记录到第一缓冲条目中。

在步骤S403,可以基于第一序列戳生成用于在第二模块上更新目标数据块的第二副本的状态的监听消息。具体地,可以根据第一请求和所维护的目录确定需要更新第二副本的状态,然后基于确定需要更新第二副本的状态,生成用于更新第二副本的状态的并且包括第一序列戳的监听消息(第一监听)。同时,还可以基于第一序列戳生成用于回应第一模块的第一请求的响应消息(第一响应)。

然后,所生成的第一监听和第一响应可以被推送到路由模块130,并且可以由路由模块130根据其源和目的地为其分配传输路由,并准备被发送。例如,路由模块130可以为源和目的地相同的响应消息或监听消息分配相同的传输路由。

根据本公开的实施例,可以根据以下各种情况之一确定需要更新第二副本的状态:第一请求是读取第一副本的请求,并且目录指示第二模块上第二副本的状态是M状态或E状态;或者第一请求是写入第一副本的请求,并且目录指示第二模块上第二副本的状态是M状态或E状态或S状态。

在步骤S404,可以检查路由模块130的响应消息队列中待发送的一个或多个响应消息中的每一个响应消息的序列戳。这些待发送的一个或多个响应消息中的每一个响应消息同样也是针对接收到的相应的请求而生成的,并且它们各自的序列戳也是在接收到相应的请求时被记录到相应的缓冲条目中的序列戳。在队列中,这些待发送的响应消息可以按照序列戳大小的次序(例如,由小到大,具有较大序列戳的消息排在靠后的位置)和/或简单地按照先进先出的次序被发送。相应地,所生成的第一响应按照队列中的次序被发送到第一模块10。

然后,可以基于检查的结果向第二模块发送监听消息。在步骤S405中,可以判断检查的结果是否指示待发送的一个或多个响应消息中存在序列戳小于第一序列戳的响应消息。

如果检查的结果指示待发送的一个或多个响应消息中不存在序列戳小于第一序列戳的响应消息,意味着之前的请求已经被处理(可能有地址冲突的请求当然也包括在其中),则可以转到步骤S407向第二模块发送第一监听。

如果检查的结果指示待发送的一个或多个响应消息中存在序列戳小于第一序列戳的至少一个响应消息,意味着之前的请求还没有被处理完(可能有地址冲突的请求有可能也包括在其中),则可以转到步骤S406等待预定时段,然后可以转到步骤S404再次检查待发送的一个或多个响应消息中的每一个响应消息的序列戳,并且随后可以基于再次检查的结果向第二模块发送第一监听。

以这种方式,可以预见,第一响应不会早于第一监听被发送。因此,用于处理每一个请求的缓冲条目可以在完成发送相应的响应消息之后立即被释放。

本发明采用序列戳机制解决在处理器的家节点端的响应消息和监听消息之间的保序问题,不再依赖确认消息来保序。以这种方式,不仅节约了处理各个事务的时间成本,还节约了所需的硬件资源,减轻了处理器级别的通信传输负担。此外,由于降低了对缓冲区的尺寸要求,也对减小处理器硬件尺寸有所贡献。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

在本申请所提供的几个实施例中,应该理解到,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,该模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的次序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的次序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

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

需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一实体或操作区分开,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者次序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且进一步包括没有明确列出的其他要素,或者是进一步包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

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

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号