具有第一协议域和第二协议域的数据处理装置及其方法转让专利

申请号 : CN201280071045.7

文献号 : CN104145251B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 威廉·亨瑞·佛兰德斯拉玛穆尔西·古鲁·普拉萨哈阿肖克·库玛尔·图马拉詹姆师德·加拉潘尼德拉·库玛·曼娜瓦

申请人 : ARM 有限公司

摘要 :

数据处理装置(2)包括被配置为操作于写进程协议下的第一协议域A以及被配置为操作于探听进程协议下的第二协议域B。如果从第一协议域A向第二协议域B发出的挂起的写请求的写目标地址和从第二协议域B向第一协议域A发出的挂起的探听请求的探听目标地址一样,则死锁状态被检测到。当死锁状态被检测到时,域间的桥(4)可以对死锁的写请求和探听请求中选定的一个做出早期响应而不需要等待选定请求被服务。早期响应对发出选定请求的域指示选定请求已经被服务,从而使其它请求可以被发出域服务。

权利要求 :

1.一种数据处理装置,包括:

第一协议域和第二协议域,各自包括至少一个被配置为发出用于将与写目标地址关联的数据的本地版本写入另一位置的写请求并接收用于访问与探听目标地址关联的数据的本地版本的探听请求的设备;以及桥,被配置为在所述第一协议域和所述第二协议域之间传送所述写请求和所述探听请求;

其中所述第一协议域被配置为在写进程协议下操作,其中,如果挂起的写请求的所述写目标地址和挂起的探听请求的所述探听目标地址一样,则所述挂起的探听请求被阻塞直到所述挂起的写请求被服务;

所述第二协议域被配置为在探听进程协议下操作,其中,如果挂起的写请求的所述写目标地址和挂起的探听请求的所述探听目标地址一样,所述挂起的写请求被阻塞直到所述挂起的探听请求被服务;

所述桥被配置为检测死锁状态,在所述死锁状态下,由所述第一协议域向所述第二协议域发出的挂起的写请求的所述写目标地址与由所述第二协议域向所述第一协议域发出的挂起的探听请求的所述探听目标地址一样;以及所述桥被配置为在检测到所述死锁状态时对选定请求做出早期响应,而不用等待所述选定请求被服务,所述选定请求包括所述挂起的写请求或所述挂起的探听请求,所述早期响应向发出所述选定请求的发出协议域指示所述选定请求已被服务。

2.如权利要求1中所述数据处理装置,其中所述写请求包括写回请求,发出写回请求的设备被配置为在与所述写目标地址关联的所述数据的所述本地版本写入到所述另一位置后使所述本地版本无效。

3.如权利要求1和2中任一权利要求所述数据处理装置,其中所述写请求包括写清请求,发出写清请求的设备被允许在与所述写目标地址相关的所述数据的所述本地版本写入到所述另一位置后保留对具有所述写目标地址的所述数据的独有访问。

4.如权利要求1所述数据处理装置,其中所述桥被配置为在对所述选定请求作出所述早期响应后检测所述发出协议域是否发出了另一选定请求,该另一选定请求与被发出所述早期响应的选定请求具有相同目标地址,并且如果是,则对所述发出协议域发出对所述另一选定请求的早期响应。

5.如权利要求4中所述数据处理装置,其中所述发出协议域被配置为发出最多M个连续的、以同样的目标地址为目标的选定请求,其中M是整数。

6.如权利要求1中所述数据处理装置,其中如果所述选定请求是所述第一协议域发出的所述挂起的写请求,则在对所述挂起的写请求发出所述早期响应后从所述第一协议域接收到对所述挂起的探听请求的探听响应时,所述桥被配置为将与所述探听响应相关联的探听数据和与所述挂起的写请求相关联的写数据合并,并且将合并后的数据传送给所述第二协议域。

7.如权利要求1中所述数据处理装置,其中所述选定请求包括所述挂起的写请求和所述挂起的探听请求中最迟被所述桥检测到的那个。

8.如权利要求1所述数据处理装置,其中所述选定请求包括所述挂起的写请求和所述挂起的探听请求中被预先确定的那个。

9.如权利要求1中所述数据处理装置,其中所述第一和第二协议域中的一个被配置为检测所述死锁状态并且在检测到所述死锁状态的情况下发出信号给所述桥,所述桥被配置为响应于所述信号的接收检测到所述死锁状态。

10.如权利要求1中所述数据处理装置,其中所述桥被配置为维持探听队列以使从所述第二协议域向所述第一协议域发出的挂起的探听请求排队。

11.如权利要求10中所述数据处理装置,其中如果所述探听队列包括多个挂起的探听请求,所述桥被配置为只有当对所述探听队列中最老的未被解决的探听请求检测到死锁状态时才对所述选定请求发出所述早期响应。

12.如权利要求1中所述数据处理装置,其中所述桥包括被配置为对从所述第一协议域向所述第二协议域发出的挂起的写请求进行缓冲的写缓冲器。

13.如权利要求12中所述数据处理装置,其中,在接收到来自所述第一协议域、与在所述写缓冲器中缓冲的挂起的写请求具有相同的目标写地址的另外的写请求时,所述桥被配置为将所述另外的写请求和所述挂起的写请求合并。

14.如权利要求12和13中任一权利要求所述数据处理装置,其中所述写缓冲器被配置为保留对其检测到所述死锁状态的所述挂起的写请求直到对所述探听请求的探听响应从所述第一协议域被接收。

15.如权利要求12所述数据处理装置,其中所述第一协议域被配置为处理最多N个挂起写请求,并且所述写缓冲器具有对至少N个来自所述第一协议域的挂起的写请求进行缓冲的容量,其中N是整数。

16.如权利要求12所述数据处理装置,包括被耦接于所述桥和所述第一协议域间的写分段缓冲器,其中所述写分段缓冲器被配置为如果在所述写缓冲器中存在空间缓冲所述写请求则接收由所述第一协议域发出的写请求并将所述写请求传送给所述桥。

17.如权利要求1中所述数据处理装置,其中所述选定请求是对其检测到所述死锁的所述挂起的写请求,并且所述桥被配置为在对所述挂起的写请求做出所述早期响应后取消所述挂起的写请求。

18.如权利要求17中所述数据处理装置,包括被配置为对从所述第一协议域向所述第二协议域发出的挂起的写请求进行缓冲的写缓冲器,其中所述写缓冲器被配置为保留被取消的挂起的写请求直到对所述挂起探听请求的探听响应从所述第一协议域被接收。

19.用于包括第一协议域和第二协议域的装置的方法,所述第一协议域和第二协议域各自包括至少一个被配置为发出用于将与写目标地址关联的数据的本地版本写入另一位置以及接收用于访问与探听目标地址关联的数据的本地版本的探听请求的设备,其中所述第一协议域在写进程协议下操作,其中,如果挂起的写请求的所述写目标地址和挂起的探听请求的所述探听目标地址一样,所述挂起的探听请求被阻塞直到所述挂起的写请求被服务,所述第二协议域在探听进程协议下操作,其中,如果挂起的写请求的所述写目标地址和挂起的探听请求的所述探听目标地址一样,所述挂起的写请求被阻塞直到所述挂起的探听请求被服务;

所述方法包括以下步骤:

检测死锁状态,在所述死锁状态下,所述第一协议域向所述第二协议域发出的所述挂起的写请求的写目标地址和所述第二协议域向所述第一协议域发出的所述挂起的探听请求的探听目标地址一样;以及检测到所述死锁状态时,对选定请求做出早期响应而无需等待所述选定请求被服务,所述选定请求包括所述挂起的写请求或所述挂起的探听请求,所述早期响应对发出所述选定请求的发出协议域指示所述选定请求已经被服务。

说明书 :

具有第一协议域和第二协议域的数据处理装置及其方法

技术领域

[0001] 本发明涉及数据处理领域,更特别地,本发明涉及包括具有不同协议用于处理写请求和探听请求的第一协议域和第二协议域的数据处理装置。

背景技术

[0002] 数据处理装置可以在多个位置储存同一数据的不同版本。例如,两个设备可以各自具有本地缓冲器,并且每个缓冲器可以同时保持与内存中同一地址关联的数据的多个版本。一致性协议(例如,MESI协议)可以被用于确保同一数据的多个版本的一致性。一致性协议可以使用写请求和探听请求来保持一致性。例如,储存有数据值的本地版本的设备可以发出写请求以请求将本地版本写入另一位置(比如内存)。然后其它设备可以从其它位置访问更新过的本地版本。或者,如果设备要求访问特定数据值,则它可以向其它设备发出探听请求以检查那些设备是否储存有该数据的本地版本,如果是,则要求访问本地版本。因此,使用写请求和探听请求数据的一致性可以被维持。

发明内容

[0003] 从一个方面来看,本发明提供一种数据处理装置,包括:
[0004] 第一协议域和第二协议域,各自包括至少一个被配置为发出用于将与写目标地址关联的数据的本地版本写入另一位置的写请求并接收用于访问与探听目标地址关联的数据的本地版本的探听请求的设备;以及
[0005] 桥,被配置为在所述第一协议域和所述第二协议域之间传送所述写请求和所述探听请求;
[0006] 其中所述第一协议域被配置为在写进程协议下操作,其中,如果挂起的写请求的所述写目标地址和挂起的探听请求的所述探听目标地址一样,则所述挂起的探听请求被阻塞直到所述挂起的写请求被服务;
[0007] 所述第二协议域被配置为在探听进程协议下操作,其中,如果挂起的写请求的所述写目标地址和挂起的探听请求的所述探听目标地址一样,所述挂起的写请求被阻塞直到所述挂起的探听请求被服务;
[0008] 所述桥被配置为检测死锁状态,在所述死锁状态下,由所述第一协议域向所述第二协议域发出的挂起的写请求的所述写目标地址与由所述第二协议域向所述第一协议域发出的挂起的探听请求的所述探听目标地址一样;以及
[0009] 所述桥被配置为在检测到所述死锁状态时对选定请求做出早期响应,而不用等待所述选定请求被服务,所述选定请求包括所述挂起的写请求或所述挂起的探听请求,所述早期写响应向发出所述选定请求的发出协议域指示所述选定请求已被服务。
[0010] 如果探听请求和写请求关于同一目标地址挂起,探听请求访问的数据的状态可以不同,取决于在服务探听请求时写请求是否已经被服务。因此,不同协议可以规定不同规则以决定写请求和探听请求中的哪一个被先服务。在探听进程协议中,挂起的写请求被拖延直到挂起的探听请求被服务,而在写进程协议中挂起的探听请求被拖延直到写请求被服务。
[0011] 本技术认识到在具有使用写进程协议的第一协议域和使用探听进程协议的第二协议域的装置中可能出现死锁状态。如果由第一协议域向第二协议域发出的挂起的写请求的写目标地址和由第二过程向第一协议域发出的挂起的探听请求的探听目标地址一样,则死锁状态发生。在这种状态中,根据写进程协议,第一协议域将拖延挂起的探听请求直到挂起的写请求已经被服务。然而,根据探听进程协议,挂起的写请求不会被服务因为第二协议域将拖延挂起的写请求直到挂起的探听请求已经被服务。
[0012] 为解决这个问题,连接第一协议域和第二协议域的桥可以检测死锁状态是否已发生。如果死锁状态被检测到,则桥将对挂起的写请求或挂起的探听请求做出早期响应,而不用等待该请求被服务(对其做出早起响应的请求被称为“选定请求”)。早期写响应向发出选定请求的发出协议域指示选定请求已被服务,即使选定请求实际上并没有被服务。由于从发出协议域的角度看选定请求显得已经被服务,因此挂起的写请求和挂起的探听请求中的另一个不再被阻塞,这样发出协议域现在则可以服务另一请求。因此,死锁被解决。
[0013] 写请求可以包括写回请求(write back request)或写清请求(write clean request)。发出写回请求的设备使它的被写回另一位置的数据的本地版本无效。因此,设备对数据不再具有独有访问,其它设备现在可以不需要与该设备协商即可访问数据。
[0014] 另一方面,发出写清请求的设备可以保留对被写回到其它位置的数据的独有访问。数据的本地版本将经常被发出写清请求的设备保留。然而,在一些场合设备可以使高速缓存中的数据无效,但是保留独有访问以允许数据被重新载入到高速缓存中而不需要发出探听请求去检查另一设备是否正在储存有相应版本的数据。设备保留独有访问时,如果另一设备希望储存数据的本地版本,则该另一设备将向该设备发出探听请求以请求访问数据。
[0015] 在桥做出早期响应以解除死锁后,发出协议域可以发出与对其作出早期响应的选定请求具有相同目标地址的另一选定请求。例如,如果选定请求是挂起的写请求,则第一协议域可以向同样的目标地址发出另一写请求,而如果选定请求是挂起的探听请求,则第二协议域可以向同样的目标地址发出另一探听请求。如果另一选定请求被发出,则新的选定请求会再次阻塞其它请求的处理,从而引起死锁状态再次发生。这特别的对写清请求和探听请求是个问题,因为发出写清请求或探听请求的设备比发出写回请求的设备更可能对同一目标地址发出更多的写请求。
[0016] 为解决这个问题,在对选定请求作出早期响应后,桥可以检测发出协议域是否发出了另一选定请求,而如果是,则可以对发出协议域作出另一早期响应。每次发出协议域对同一目标地址发出另一选定请求时,桥都可以保持发出早期响应以确保其它请求可以被其它协议域服务。
[0017] 发出协议域可以被配置为发出最多M个连续的、以同样的地址为目标的选定请求(其中M是整数)。因此,最终发出协议域将停止发出以同一目标地址为目标的另一选定请求,允许其它请求被其它协议域服务。
[0018] 如果选定请求是挂起的写请求,则响应于死锁被检测到,桥对第一协议域做出早期写响应,指示写请求已经在第二协议域被服务,以允许探听请求在第一协议域被服务。一旦探听请求被服务,第二协议域可以做出包括探听数据的探听响应。接收到探听响应时,桥可以将与探听响应相关联的探听数据和与挂起的写请求相关联的写数据合并,并将合并的数据传送到第二协议域。通过合并写数据和探听数据,探听响应可以被用于获取响应于写请求将被写的数据,因此第二协议域没必要分别处理引起死锁状态的挂起的写请求。这加速了第二协议域在死锁解决后的其他请求的处理。
[0019] 选定请求可以是对其检测到死锁的挂起的写请求或挂起的探听请求。在一些实施例中,每次死锁状态被检测到时,桥可以做出选定请求的新的选择。
[0020] 例如,桥可以选择挂起的写请求和挂起的探听请求中最迟被桥检测到的作为选定请求。这种方法意味着后来请求的发出不会影响先前请求的处理方式,因为对后来请求的早期响应推动后来请求为先前请求让路以允许先前请求被正常处理。
[0021] 在其它实施例中,选定请求可以是对其检测到死锁的挂起的探听请求和挂起的写请求中预先确定的一个。例如,桥可以总是对第一协议域做出早期写响应以解决死锁以及允许挂起的探听请求被第一协议域服务,或可以总是对第二协议域做出早期探听响应以允许挂起的写请求被第二协议域服务。
[0022] 死锁状态的检测可以通过多种方法实现。例如,桥本身可以通过监控由第二协议域发出的探听请求的目标地址和由第一协议域发出的写请求的目标地址检测死锁,并在匹配地址被发现时触发死锁状态。
[0023] 或者,第一协议域和第二协议域中的一个可以检测死锁状态并且在检测到死锁状态时给桥发信号。响应于该信号,桥可以检测到死锁状态并对选定请求作出早期响应。因此,桥本身实际上识别探听请求和写请求间的冲突并不不必要的——术语“检测”可以包含桥接收来自另一设备的指示死锁已经发生的信号。
[0024] 桥可以维持探听队列用于使由第二协议域向第一协议域发出的挂起的探听请求排队。在一些系统中,第一协议域和第二协议域中的至少一个可以按挂起的探听请求被发出的顺序对其服务。在这种系统中,如果探听队列中最老的未被解决的的探听请求被阻塞,则其它探听请求可能不能被服务,即使和后来的探听请求关联的目标地址没有被挂起的写请求死锁。因此,桥可以优先解决探听队列中和最老的未被解决的探听请求关联的死锁状态。例如,如果探听队列包含多个挂起的探听请求,则桥可以只响应于对探听队列中还没接收到探听响应的最老的探听请求检测死锁状态做出早期响应(响应于最老的探听请求或响应于与最老的探听请求相冲突的写请求做出早期响应将,取决于哪个请求是选定请求)。
[0025] 桥可以有写缓冲器以缓冲第一协议域向第二协议域发出的挂起的写请求(在一些实施例中缓冲器也可以缓冲相反方向的写请求)。在一些示例中,缓冲器可以实际储存挂起的写请求,而在其它示例中缓冲器可以储存数据以追踪挂起的写请求而不用实际储存请求。
[0026] 如果对挂起的写请求做出早期响应后,对同一写目标地址的更多的写请求被第一协议域发出并且写缓冲器没有足够的空间缓冲新的写请求,问题将会产生。例如,触发早期写响应的挂起的写请求可能已经占用了缓冲器中最后的可用空间。在这种情况下,缓冲器空间的不足可能会阻止更多的写请求被第一协议域接收,因而第一协议域的写进程协议可能使第一协议域继续阻塞挂起的探听请求直到更多的写请求被接收到写缓冲器上。
[0027] 为解决这个问题,桥可以将更多的写请求和同一目标地址的挂起的写请求进行合并,以允许两种写请求被缓冲。合并后的写请求可以是这样的,也即与合并后的请求相关联的数据和通过执行原始挂起的写请求和队列中更多的写请求得到的数据是一样的。通过合并以相同地址为目标的写请求,更多的写请求可以被桥接收,因而已经接收对更多的写请求的早期写响应的第一协议域现在可以服务于挂起的探听请求以解决死锁。
[0028] 写缓冲器可以被设置为保留检测到死锁状态的挂起的写请求直到对相互冲突的挂起的探听请求的探听响应已经从第一协议域被接收。这样,引起死锁的挂起的写请求与由第一协议域发出的后来的写请求的合并仍然是可用的直到探听请求被服务。
[0029] 写缓冲器还可以使用写请求的合并以解决对同样的目标写地址的重复的写请求,不论是否已识别出对目标地址的死锁状态。例如,如果第一协议域对同一写目标地址发出两个连续的写请求,则这些可以被合并以节省缓冲器空间。
[0030] 第一协议域可以被配置为处理最多N个向第二协议域发出的挂起写请求,并且写缓冲器可以有能力缓冲至少N个由第一协议域向第二协议域发出的挂起写请求,其中N是整数。通过提供对至少和第一协议域一次能处理的写请求一样多的写请求提供缓冲能力,缓冲器使桥对进入的探听请求的探听目标地址和第一协议域发出的每个挂起的写请求的写目标地址进行比较以检测死锁状态。
[0031] 在一些示例中,装置可以包括耦接于桥和第一协议域间的写分段缓冲器。写分段缓冲器可以接收第一协议域发出的写请求,并且如果写缓冲器上有空间缓冲写请求时将写请求传递到桥。这可以减少桥和第一协议域间需要的用于判定消息是否能在桥被接收的握手信号的数量。
[0032] 当死锁状态被检测到并且早期写响应被做出(比如,选定请求是挂起写请求)时,桥可以取消触发死锁的挂起写请求。第二协议域可以保留用于处理写请求的处理资源(比如,缓冲器入口),因而当死锁保持未被解决时取消写请求使这些资源能够被重新分配到另一请求。被取消的写请求通过合并写数据和探听响应仍然可以被有效地服务,如上所述。
[0033] 被取消的写请求可以被保留在写缓冲器中直到挂起的探听请求的探听响应从第一协议域被接收,从而允许与上述后来的写请求合并。
[0034] 需要领会的是,虽然在一些实施例中桥相对于第一协议域和第二协议域是单独的实体,在其它实施例中桥可以被实施作为第一协议域或第二协议域中的设备的一部分。
[0035] 从另一方面看,本发明提供一种数据处理装置,包括:
[0036] 用于执行数据处理的第一协议域装置和第二协议域装置,各自包括至少一个发出用于将与写目标地址关联的数据的本地版本写入另一位置的写请求并接收用于访问与探听目标地址关联的数据的本地版本的探听请求的设备;以及
[0037] 用于在所述第一协议域装置和所述第二协议域装置之间传送所述写请求和所述探听请求的桥装置;
[0038] 其中所述第一协议域装置被配置为在写进程协议下操作,其中,如果用于挂起的写请求的所述写目标地址和用于挂起的探听请求的所述探听目标地址一样,所述挂起的探听请求被阻塞直到所述挂起的写请求被服务;
[0039] 所述第二协议域装置被配置为在探听进程协议下操作,其中,如果用于挂起的写请求的所述写目标地址和用于挂起的探听请求的所述探听目标地址一样,所述挂起的写请求被阻塞直到所述挂起的探听请求被服务;
[0040] 所述桥装置被配置为检测死锁状态,在所述死锁状态下,由所述第一协议域装置向所述第二协议域装置发出的挂起的写请求的所述写目标地址与由所述第二协议域方法向所述第一协议域方法发出的挂起的探听请求的所述探听目标地址一样;以及[0041] 所述桥装置被配置为在检测到所述死锁状态时对选定请求做出早期响应而无需等待所述选定请求被服务,所述选定请求包括所述挂起的写请求或所述挂起的探听请求,所述早期写响应向发出所述选定请求的发出协议域指示所述选定请求已被服务。
[0042] 从再一方面看,本发明提供用于包括第一协议域和第二协议域的装置的方法,所述第一协议域和第二协议域各自包括至少一个被配置为发出用于将与写目标地址关联的数据的本地版本写入另一位置以及接收用于访问与探听目标地址关联的数据的本地版本的探听请求的设备,其中所述第一协议域在写进程协议下操作,其中,如果挂起的写请求的所述写目标地址和挂起的探听请求的所述探听目标地址一样,所述挂起的探听请求被阻塞直到所述挂起的写请求被服务,所述第二协议域在探听进程协议下操作,其中,如果挂起的写请求的所述写目标地址和挂起的探听请求的所述探听目标地址一样,所述挂起的写请求被阻塞直到所述挂起的探听请求被服务;
[0043] 所述方法包括以下步骤:
[0044] 检测死锁状态,在所述死锁状态下,所述第一协议域向所述第二协议域发出的所述挂起的写请求的写目标地址和所述第二协议域向所述第一协议域发出的所述挂起的探听请求的探听目标地址一样;以及
[0045] 检测到所述死锁状态时,对选定请求做出早期响应而无需等待所述选定请求被服务,所述选定请求包括所述挂起的写请求或所述挂起的探听请求,所述早期响应对发出所述选定请求的发出协议域指示所述选定请求已经被服务。
[0046] 本发明的更多特定和优选方面在所附独立权利要求和从属权利要求中被陈述。适当的时候独立权利要求的特征和从属权利要求的特征可以被结合,而且结合不同于那些在权利要求中被明确陈述的权利要求。

附图说明

[0047] 图1概略地示出具有第一协议域和第二协议域的数据处理装置;
[0048] 图2示出第一协议域的写进程协议的示例;
[0049] 图3示出第二协议域的探听进程协议的示例;
[0050] 图4示出死锁状态的示例;
[0051] 图5示出用于解决死锁状态的技术的示例;
[0052] 图6A和6B示出示例,其中死锁状态通过对挂起的写请求和挂起的探听请求中最迟被检测到的那个发出早期响应被解决;
[0053] 图7示出解决死锁状态的方法;
[0054] 图8示出当写缓冲器已经满时如果第一协议域发出与被检测到死锁状态的挂起的写请求具有同一目标地址的另一写请求时可能出现的问题。
[0055] 图9示出通过将对同一目标地址的另一写请求与挂起的写请求合并来解决图8中显示的问题的技术的示例;以及
[0056] 图10示出根据图9的示例解决死锁状态的方法。

具体实施方式

[0057] 图1示出包括第一协议域A、第二协议域B和连接这两个域的桥4的数据处理装置2。每个协议域A、B包括多个经由总线8相互通信的设备6。设备6可以包括任何种类的处理设备或存储设备并且可以包括主设备和从设备。每个协议域A、B可以包括至少一个能够发出写请求以将数据值的本地版本写入另一位置以及接收探听请求以请求访问数据的本地版本的设备。写请求和探听请求可以在在同一协议域A、B或不同协议域中的设备间被交换。
[0058] 桥4包括使一个协议域中的设备向另一个协议域中的设备发出的探听请求排队的探听队列10、缓冲由一个域中的设备向另一个域中的设备发出的写请求的写请求缓冲器12、以及储存与缓冲在写请求缓冲器12中的与写请求相关联的数据的写数据缓冲器14。写分段缓冲器16也被提供于域A、B中的至少一个和桥4间以在写请求被写请求缓冲器12接收之前对写请求进行分段。
[0059] 虽然在图1中桥4被示出为独立于处理域A和处理域B,需要领会的是在一些实施例中桥4的功能可以使用域A、B其中一个中的设备6被实施。
[0060] 第一协议域A操作于写进程协议下。在写进程协议中,如果写请求关于写目标地址挂起并且探听请求关于同一目标地址也挂起,则挂起的探听请求被阻塞直到写请求被服务。图2显示了域A的设备在写进程协议下操作的示例。该设备包括两个主设备(比如处理器)和可以是从设备(比如内存)的一致性点(POC)、经由其请求被路由到从设备的互连或总线(在一些系统中,互连或总线可以负责管理数据的一致性——在这种情况中互连/总线可以对主设备表现为从设备)。
[0061] 在图2中,主设备0向一致性点发出写回(WB)或写清(WC)请求以将与目标地址A相关联的本地数据值经由一致性点写入可访问的目标位置。同时,响应于来自另一主设备1的读请求,一致性点向主设备0发出有关同一目标地址A的探听请求。由于写请求对目标地址A已经挂起,因此探听请求被主设备0阻塞直到来自一致性点的、指示写已经被服务的写响应信号被接收。写被服务后,探听请求被消除阻塞并且对一致性点做出探听响应,一致性点随后向主设备1发送探听数据。
[0062] 与之相反,第二协议域B操作于探听进程下,其中,当探听请求挂起时,与探听请求具有相同的目标地址的写请求被拖延直到探听请求被服务。图3显示的是域B的设备在探听进程协议下操作的示例。探听请求被发出至主设备0以请求访问与目标地址B相关联的数据的本地版本。另外,主设备0对一致性点发出关于与同一目标地址B相关联的数据的写请求。根据探听进程协议,因为对地址B的探听请求是挂起的,所以写请求不可以被服务。因此,一致性点可以推迟写数据请求直到主设备0对主设备1做出探听响应。主设备0不可以发出写数据直到来自一致性点的数据请求已经被接收。因此,写请求不可以被服务直到探听请求被服务。
[0063] 需要领会的是不同协议规定处理写请求和探听请求的不同方法。例如,写响应、写就绪和探听响应信号的作用在不同协议中可以不同。为本发明的目的,每个协议处理写请求和探听请求的方式的准确细节不重要,只要一个域操作于写进程协议而另一个域操作于探听进程协议即可。
[0064] 同样,虽然一些协议总是担任写进程协议或探听进程协议,但是另一些协议可以不总是这样担任,而可以(比如)只在某些条件下操作为写进程协议或探听进程协议。在这种协议中,当一个协议担任写进程协议而另一协议担任探听进程协议时本技术可以被应用,而在其它时候本技术不可以被应用。因此,术语“被配置为操作于探听/写进程协议下”不意味着协议域需要总是操作于探听/写进程协议下。
[0065] 图4显示在操作于写进程协议下的第一协议域A中的设备和操作于探听进程协议下的第二协议域B中的设备之间进行通信期间发生的死锁状态示例。如图4所示,如果第一协议域A对第二协议域B发出写请求,并且第二协议域B对第一协议域A发出探听请求,则每个域都将阻塞接收到的请求。域A的设备将根据写进程协议阻塞接收到的对目标地址X的探听请求,因为对同一目标地址X发出的写请求还未被服务。域B的设备将根据探听进程协议阻塞接收到的对目标地址X的写请求,因为对同一目标地址X发出的探听请求还未被服务。因此,域A和B都将等待对方进行处理然后才进行它们本身的处理,由此引起死锁。
[0066] 图5显示死锁可以如何被解决的示例。通过检查探听请求和写请求的地址或通过接收来自协议域A、B其中一个的、指示存在死锁状态的信号,桥4可以检测死锁状态的存在。当检测到死锁时,桥4对挂起的写请求和挂起探听请求中的一个做出早期响应以指示相应的请求已经被服务。在图5的示例中,早期写响应被发送到第一协议域A以指示有关目标地址X的挂起的写请求已经被服务,尽管该写请求实际上没有被第二协议域B服务。从第一协议域的角度看,写现在已经被服务,因此对探听请求消除阻塞。探听请求现在可以被第一协议域A服务。探听响应被生成并经由桥4被发送到第二协议域B。由于探听响应通常将包含和目标地址X对应的最新数据(响应于引起死锁的挂起写请求其将被写回),因此执行写请求就不再必要。如果挂起的写请求的写数据包括探听响应没包括的数据,则桥在向第二协议域B发送响应前可以合并写数据和探听响应的探听数据。
[0067] 因此,对写请求做出早期响应允许死锁被解决,因而允许操作于相互冲突的一致性协议下的域间的兼容通信。
[0068] 类似地,死锁状态可以通过对第二协议域B发出指示探听请求已经在第一协议域A被服务的早期响应以使挂起的写请求能够在第二协议域B被处理而解决。
[0069] 在一些实施例中桥4可以总是对写请求发送早期写响应,或者总是对探听请求发送早期探听响应,以对死锁状态消除阻塞并允许另一个请求继续。在这种实施例中,哪个请求接收早期响应是预先确定的并且哪个请求先被桥接收并没有关系。
[0070] 然而,如图6A和6B所示,在其它实施例中桥4可以对挂起探听请求和挂起写请求中最迟被桥4检测到的一个做出早期响应。通过向对其检测到死锁的后来的请求发送早期响应,先前的请求被消除阻塞并且可以以正常的方式被处理。这种方法意味着后来的请求不会影响先前的请求被服务的方式。
[0071] 如图6A所示,如果来自协议域A的挂起的写请求WB先于来自第二协议域B的相冲突的探听请求Snp被桥4遇见,则对第二协议域B做出早期响应,指示探听请求在第一协议域A中已经被服务。这对写请求消除阻塞并使写请求能够被第二协议域B处理。
[0072] 然而,如图6A所示,第二协议域B可能发出另一个以同一地址为目标的探听请求Snp,这将再一次阻塞挂起写请求WB。为解决这个问题,每次第二协议域发出以同一地址为目标的另一探听请求时,桥4都可以做出另一早期探听响应。最终,第二协议域B停止发出以同一地址为目标的探听请求,因而现在准备好处理挂起的写请求。第二协议域B对桥4做出写响应以指示已经准备好接收与写请求相关联的写数据。桥4随后向第一协议域发送写响应B,而作为响应第一协议域A向桥4发送写确认信号WACK。响应于写确认信号WACK,桥4将写数据传送到第二协议域B。
[0073] 另一方面,图6B显示了来自第二协议域B的探听请求Snp先于来自第一协议域A的写请求WB被桥4检测到的示例。由于写请求WB是最迟被检测到的,桥4对第一协议域A做出早期响应,指示写请求WB在第二协议域B已经被服务(即使写请求WB还没有被服务)。这消除了对探听请求Snp的阻塞,因此第一协议域A随后对桥发送探听响应Rsp。同样,响应于早期写响应B,第一协议域A向桥4发出写确认信号WACK。当桥接收到对其已做出早期写响应B的写请求的写确认信号WACK时,桥4合并写数据缓冲器14中相应的写数据和与探听响应Rsp相关联的探听数据,以生成被传输到第二协议域B的被合并的写/探听数据。被合并的数据是如果写数据和探听数据相继被写入目标地址后将出现的数据。通过以这种方式合并数据,写请求和探听请求都可以被服务而不需要发出另一请求。
[0074] 图7示出解决根据图6A和6B的实施例所示的死锁状态的方法。在步骤20,对由第一协议域A向第二协议域B发出的写请求和由第二协议域B向第一协议域A发出的探听请求检测到死锁状态,两个请求以同一地址为目标。在步骤22,桥4判定探听请求和写请求中哪个先被检测到。第二个被检测到的请求是对其作出早期响应的选定请求。
[0075] 如果写请求先被检测到(图6A中显示的情况),则在步骤24对第二协议域B作出早期探听响应。在步骤26,桥4检测第二协议域B是否发出与对与对其做出早期响应的探听请求具有同一目标地址的另一探听请求。如果是,则方法返回到步骤24,对第二协议域B发出另一早期探听响应。
[0076] 每次第二协议域B对同一目标地址发出另一探听,另一早期探听响应就被做出,直到最终第二协议域不对同一地址发出另一探听请求。此时,挂起的写请求不再被阻塞并且第二协议域B对桥4发出指示第二协议域B准备好接收写数据的就绪信号。响应于就绪信号,在步骤28桥4对第一协议域A做出写响应。当从第一协议域A接收到写确认信号WACK时,则在步骤30桥4将与挂起的写请求相关联的来自写数据缓冲器14的写数据Data_I传送给第二协议域B。由于与目标地址相关联的数据现在已经被提供给第二协议域B,因此服务于对其做出了早期响应的探听请求现在就没必要了。
[0077] 另一方面,如果在步骤22判定探听请求在写请求前被检测到(图6B显示情况),则写请求是选定请求,在步骤32桥4对第一协议域A做出指示写请求已经在第二协议域B被服务(尽管事实上写请求没有被服务)的早期写响应。在步骤34,桥4判定是否接收到对同一地址的另一写请求。如果是,则在步骤36将新的写请求和旧的写请求在写请求缓冲器12中合并并且任何相关联的写数据也在写数据缓冲器14中合并,然后在步骤32对第一协议域A做出另一早期写响应,以允许对挂起的探听请求再次消除阻塞。
[0078] 最后,第一协议域A不发出以同一地址为目标的更多的写请求,并且对挂起的探听请求做出探听响应。响应于早期写响应第一协议域A也发出写确认信号WACK,指示写数据缓冲器14中与写请求相关联的数据现在可以被传输到第二协议域B中。当探听响应和写确认信号被接收,则在步骤38桥4合并探听响应数据和引起死锁的挂起的写请求的写数据。在步骤40,包括被合并数据的探听响应被发送到第二协议域B。通过以这种方式合并数据,服务于对其做出早期响应的写请求就没必要了,因为探听请求已经将要求的数据传达给第二协议域B。
[0079] 因此,通过对被检测到死锁的探听请求和写请求中的一个做出早期响应,死锁可以被解决以允许处理继续进行。
[0080] 图8示出桥4的写请求缓冲器12和写数据缓冲器14变满后可能出现的问题的示例。缓冲器12、14具有用于有限数量写请求的容量(图8显示示例中缓冲器可以容纳4个请求,但是需要领会的是事实上写缓冲器12、14可以更大)。如图8所示,在第一协议域A发出关于四个目标地址A、B、C、D的四个写请求WriteClean-A到WriteClean-D后,缓冲器就满了并且不能接收任何更多的写请求。地址A、B、C、D可以是相同的地址或不同的地址。
[0081] 如图8所示,域B随后可能发出关于探听目标地址A的探听请求Snp-A。因为存在以地址A为目标的挂起的写请求WriteClean-A,则死锁状态被检测到,桥4可以对第一协议域A做出早期写响应B-A以尝试解决死锁状态(在本例中,写请求是选定请求)。
[0082] 然而,可能的是,在接收到指示写请求WriteClean-A已经被服务的早期写响应B-A后,第一协议域A可能发出关于同一地址A的另一写请求WriteClean-A。在这种情况下,探听请求Snp-A仍然不能被服务,因为根据域A的写进程协议它被新的写请求阻塞。此外,由于桥4中的写缓冲器12已经满了,标号5指示的新的写请求将不会从写分段缓冲器16传送出。因此,协议域A将判定该请求没有被服务并且将继续阻塞以同一目标地址为目标的探听请求Snp-A。
[0083] 这个问题可以通过允许桥4合并同一地址的新的写请求和更老的写请求被解决。被合并的写可以被生成为具有与如果较老的写请求和较新的写请求接连被执行将在目标位置得到的数据等价的写数据。通过合并请求,较迟的写请求可以被接收到缓冲器中。随后桥4对第一协议域A做出另一早期写响应以指示更迟的写请求已经被服务(再次,尽管第二协议域B事实上没有服务这个写响应)。第一协议域A的设备可以只发出以同一写目标地址为目标的有限数量的连续写请求。因此,通过继续对第一协议域A发出早期响应消息,每次对同一目标地址的另一写响应被发出,以及通过合并缓冲器中同一地址的每个写请求和更早的请求,最终第一协议域A将对不同的目标地址发出新的写请求,因而消除对其死锁被检测到的探听请求的阻塞。于是探听请求可以被服务。
[0084] 图9显示可以解决图8显示的问题的方式的示例。图9显示多个在下文关于被圈起来的字母被指示和描述的操作。图9描述和示出的操作顺序不一定是操作实际上被实现的顺序——一些操作可以被并行执行或者以不同的顺序被执行。
[0085] H:第二协议域B中的设备发出两个分别指定目标地址A和E的读操作Rd-A、Rd-E。由于与地址A和E相关联的数据的版本可以被第一协议域中的设备储存,因此读操作Rd-A、Rd-E触发探听请求Snp-A、Snp-E从第二域B被发往第一域A。
[0086] I:第一协议域A发出四个分别指定目标地址A、B、C、D的写请求WriteClean-A到WriteClean-D。同样,地址A、B、C、D可以是同样的地址或不同的地址。如果地址B、C、D和地址A不同,则写请求WriteClean-B到WriteClean-D可以被第二域B服务,因为对这些请求没有检测到死锁。如果地址B、C、D中的任何地址和地址A一样,则相应写请求不可以被服务,因为有对地址A的挂起的探听请求。
[0087] J:第二协议域B检测到死锁状态将在指定同一目标地址的写请求WriteClean-A和探听请求Snp-A间出现,并且对桥4发出Cancel-A信号。
[0088] K:在接收到来自第二协议域B的Cancel-A信号之后,桥4检测死锁状态并且取消写请求WriteClean-A以使它不再被服务(虽然不必要,但是取消写请求可以释放第二协议域B中的资源以服务其它请求)。然而,被取消的写请求WriteClean-A被保留在缓冲器中以在必要时允许与随后的请求进行合并。
[0089] L:在检测到死锁状态后,桥4对写请求WriteClean-A发出早期写响应B-A。在接收到早期写响应B-A后,第一域A判定写已经在第二域B中被服务。
[0090] 在接收到早期写响应B-A后,第一协议域A可以发出指定同一目标地址A的另一写请求作为引起死锁的写请求(图9中的情况M)、发出指定不同目标地址的另一写请求(图9中的情况P)或服务挂起的探听请求(图9中的情况Q)。
[0091] M:如果,响应于早期写响应B-A,第一协议域A发出以其被检测到死锁的同一目标地址A为目标地址的另一写请求,那么:
[0092] N:桥4合并对同一目标地址的新的写请求和之前的写请求。写数据缓冲器14中被合并的数据对应于如果原始写请求和随后的写请求相继被执行将产生的数据。
[0093] O:桥4发送另一早期写响应B-A到第一协议域A。因此,第一协议域A判定写已经被服务并且可以再次选择是对同一目标地址发出另一写请求(图9中的情况M)、对不同目标地址(情况P)发出写请求还是处理探听请求(情况Q)。
[0094] P:如果域A发出写请求WriteClean-E,其指定的目标地址不同于引起死锁的挂起写请求WriteClean-A的目标地址,则对目标地址A的死锁被解决因为不再有任何以地址A为目标的挂起的写请求。因此,第一协议域A现在能够服务探听响应(图9中字母Q所示)。
[0095] Q:协议域A将最终响应于探听请求Snp-A发出探听响应CRDATA-A。探听响应包括与被维持在第一协议域A中的地址A相关联的数据的本地版本的值以及与该本地版本的一致性状态相关的信息。
[0096] R:桥4接收探听响应并且合并与探听响应相关联的探听数据和对目标地址A的与被合并的写请求相关联的数据。
[0097] S:桥4发送被合并的相应数据(被探听的data-A)到第二协议域B。
[0098] T:第二协议域B使用接收到的探听数据服务于读请求Rd-A。不再必要执行引起原始死锁的写请求WriteClean-E,或任何指定同一目标地址的中间的写请求WriteClean-A,因为与这些请求相关联的写数据已经与探听数据合并。
[0099] 需要领会的是,虽然图9显示了在死锁被解决前只有两个早期写响应B-A被要求的示例,但是在其它场合第一协议域A可以重复发出以同一目标地址为目标的更多的写请求作为引起死锁的写请求(例如,图9中的情况M连续出现多次)。在这种情况中,桥4将继续合并每个新的写请求和之前的对同一地址的(字母N)的写请求并且做出早期写响应(字母O)直到最终第一协议域A发出以不同地址(情况P)为目标的写请求或服务于探听请求(情况Q)。
[0100] 同样,在图9的示例中,在字母P处对目标地址E发出的写请求WriteClean-E阻塞了在字母H处对目标地址E的探听请求Snp-E的服务。因此,对地址E另一死锁状态将被检测,因而图9中显示的对地址A的同样的操作将被用于地址E。对多于一个地址被检测死锁状态,桥4可以一次解决一个死锁,从与位于探听队列10的头部的探听请求相关联的死锁开始。这是因为在一些协议中,阻塞探听队列10中最老的探听可能会使随后的探听请求也被阻塞。在这种情境下,桥4可以集中于解决识别出的探听队列头部的探听的死锁状态。因此,不管较迟的探听的状态以及对那些较迟的探听是否有死锁,桥4可以对位于探听队列10头部的探听检测死锁并且只有当对最老的探听请求的死锁被检测到时做出早期写响应。
[0101] 不同于图6A和6B显示的示例,图9显示的示例中选定请求被预先确定为挂起的写响应,因此响应于挂起的写请求对第一协议域做出早期写响应,而不考虑挂起的写请求和挂起的探听请求中的哪个先到达桥4。
[0102] 图9显示的示例中死锁状态被第二协议域B识别出并且响应于桥4发出的取消信号Cancel-A桥4检测到死锁状态。然而在另一实施例中,桥4本身可以检测死锁状态以及在检测到死锁状态时取消写请求WriteClean-A,而不用接收来自第二协议域B的信号。桥4随后可以对第二协议域B发出指示写将被取消的信号。
[0103] 图10显示了检测和解决根据图9的示例的死锁状态的方法。在步骤50,检测到对以目标地址X为目标的写请求和以同一目标地址X为目标探听请求的死锁状态,其中的写是从第一协议域A向第二协议域B发出的并且探听是从第二协议域B向第一协议域A发出的。死锁状态可以被桥4直接检测到或响应于来自协议域A、B的信号被桥4间接检测到。
[0104] 如果死锁状态被检测到,则在步骤60对目标地址X的写被桥4取消。同样,在步骤70向协议域A发出对目标地址X的写请求的早期写响应。
[0105] 在步骤80,桥4判定是否已经接收到对目标地址X的探听响应。如果没有,则在步骤90,桥判定是否已经接收到来自第一协议域A的另一写请求。如果已经接收到另一写请求,则在步骤100桥4判定另一写请求的目标地址是否和对其检测到死锁的目标地址X一样。如果目标地址和地址X不一样,或者在步骤90没接收到写,则桥4在步骤80继续等待探听请求。
[0106] 然而,如果在步骤100确定另一写请求的目标地址和对其检测到死锁的目标地址X一样,则在步骤110桥4合并该另一写请求和对目标地址X的挂起的写请求,以使新的写能够被缓冲器接收,即使缓冲器已经满了。在步骤120,桥4对目标地址X的该新的写请求发出另一早期写响应,以对第一协议域A指示写请求已经被服务(尽管它在第二协议域B中实际上没有被服务)。现在方法返回到步骤80,桥再次等待来自第一协议域A的探听响应。每次接收到对同一目标地址X的新的请求时(步骤90和100),新的请求被和更早的以同一地址为目标的写请求合并并且早期写响应被再次发送(步骤110和120)。
[0107] 如果在步骤100发现其他写请求没有指定与挂起的写请求相同的目标地址X,则死锁被打破因为不再有以与挂起的探听请求同样的地址为目标的挂起的写请求。因此,第一协议域A现在可以处理探听请求。
[0108] 当探听响应在步骤80被接收,则在步骤130桥4合并探听响应中接收到的探听数据和对目标地址X的挂起的写请求的被缓冲的写数据。在步骤140,被合并的数据被发送到第二协议域B。在步骤150,对挂起的写请求的缓冲器分配被释放以便由其他请求使用。
[0109] 虽然本文描述了特定的实施例,需要领会的是本发明不限于此并且在本发明的范围内可以对此作出许多修改和添加。例如,在不背离本发明的范围时可以对下列独立权利要求的特征和从属权利要求的特征作出各种组合。