CN106293637B - 数据移动、将数据设置为无效的方法、处理器及系统 - Google Patents
数据移动、将数据设置为无效的方法、处理器及系统 Download PDFInfo
- Publication number
- CN106293637B CN106293637B CN201510282442.4A CN201510282442A CN106293637B CN 106293637 B CN106293637 B CN 106293637B CN 201510282442 A CN201510282442 A CN 201510282442A CN 106293637 B CN106293637 B CN 106293637B
- Authority
- CN
- China
- Prior art keywords
- processor
- message queue
- new information
- data
- replacement
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明公开了一种数据移动方法,用于解决在多处理器系统中存在的资源浪费的技术问题。所述方法包括:当第一处理器的缓存中存储的第一数据待被移动到所述第一处理器的内存中时,所述第一处理器确定第二数据在第二处理器中的地址;所述第一处理器生成第一替换更新消息,所述第一替换更新消息中携带所述第二数据在所述第二处理器中的地址;所述第一处理器将所述第一替换更新消息发送给所述第二处理器。本发明还公开了一种将数据设置为无效的方法,及相应的处理器和多处理器系统。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种数据移动、将数据设置为无效的方法、处理器及系统。
背景技术
当今的计算机系统经常由多个处理器组成,并且一个处理器中也存在多个处理器核。在多处理器系统中,要让处理器协同工作,则各个处理器处理的正确性成为了首要的问题。这个问题可细分为两个子问题,即:存储一致性(memory consistency)和缓存一致性(cache coherence)。
其中,缓存一致性要求一个计算机系统内的多个缓存满足“单写者多读者”的要求,即在任何时间,若要对一个数据进行写操作,只有具有权限的处理器可以将该数据写到该具有权限的处理器的缓存中,但是若要对任一个数据进行读操作,多个处理器都可以同时将该数据读到各自的缓存中。在通用计算机系统中,正确高效的缓存一致性设计非常重要。
随着系统内集成的处理器核数的增加,如何更高效地维护各个处理器核之间的缓存一致性成为了学术界和工业界共同关心的一个课题。维护缓存一致性有两种基本的协议方式—侦听(snoop)协议和目录(directory)协议。由于目录协议在扩展性方面优于侦听协议,因此经常被使用在大规模/超大规模系统中。
在目录协议下,可能多个处理器共用一个目录,或者也可能每个处理器有自己单独的目录。
在目录协议下,可能会存在问题,具体介绍场景如下:
例如,处理器1的缓存中的数据1要被移动到处理器1的内存中,数据1是副本,数据1对应的原始数据2存储在处理器2的缓存中。例如,在数据1被移走之后,处理器2中的数据2也要被移动到处理器2的内存中,则处理器2会向存储有数据2对应的副本的其他处理器发送无效(invalidate)信息,相应的处理器接收到无效信息后,会将本地存储的数据2的副本设置为无效,以保持缓存一致性。在这种情况下,如果数据1已被移走的消息没有通知处理器2,处理器2也会向处理器1发送无效信息,而此时处理器1的缓存中已经没有数据1了,即,处理器2向处理器1发送无效信息是多余的开销,造成了资源的浪费。
发明内容
本发明实施例提供一种数据移动、将数据设置为无效的方法、处理器及系统,用于解决在多处理器系统中存在的资源浪费的技术问题。
第一方面,提供一种数据移动方法,包括:
当第一处理器的缓存中存储的第一数据待被移动到所述第一处理器的内存中时,所述第一处理器确定第二数据在第二处理器中的地址;
所述第一处理器生成第一替换更新消息,所述第一替换更新消息中携带所述第二数据在所述第二处理器中的地址;
所述第一处理器将所述第一替换更新消息发送给所述第二处理器;
其中,所述第一处理器和所述第二处理器属于同一多处理器系统,所述第一替换更新消息用于将所述第一数据已移动的信息通知所述第二处理器,所述第二处理器中存储有所述第二数据,所述第一数据为副本,所述第二数据为与所述第一数据对应的原始数据。
结合第一方面,在第一方面的第一种可能的实现方式中,在所述第一处理器生成第一替换更新消息之后,还包括:
所述第一处理器将所述第一替换更新消息添加到第一消息队列,所述第一消息队列为与所述第二处理器对应的消息队列;所述消息队列用于存放替换更新消息。
结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述第一处理器将所述第一替换更新消息添加到第一消息队列,包括:
所述第一处理器根据所述第二处理器的标识,查询与所述第二处理器对应的消息队列;
所述第一处理器确定所述第一消息队列为与所述第二处理器对应的消息队列,将所述第一替换更新消息添加到所述第一消息队列。
结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,在将所述第一替换更新消息添加到所述第一消息队列之前,还包括:
若所述第一消息队列中的剩余空间不够存储所述第一替换更新消息,则所述第一处理器将所述第一消息队列中的部分或全部替换更新消息合并为第二替换更新消息,并将所述第二替换更新消息发送给所述第二处理器。
结合第一方面的第二种可能的实现方式,在第一方面的第四种可能的实现方式中,所述第一处理器确定所述第一消息队列为与所述第二处理器对应的消息队列,包括:
若所述第一处理器确定没有与所述第二处理器对应的消息队列,则所述第一处理器查询存在的空消息队列;
所述第一处理器将查询到的一个空消息队列作为与所述第二处理器对应的第一消息队列。
结合第一方面的第二种可能的实现方式,在第一方面的第五种可能的实现方式中,所述第一处理器确定所述第一消息队列为与所述第二处理器对应的消息队列,包括:
若所述第一处理器确定没有与所述第二处理器对应的消息队列,则所述第一处理器查询存在的空消息队列;
若所述第一处理器确定没有空消息队列,则所述第一处理器将存在时长最长的消息队列中的全部替换更新消息合并为第三替换更新消息,将所述第三替换更新消息发送给所述存在时长最长的消息队列对应的处理器;
所述第一处理器将所述存在时长最长的消息队列作为与所述第二处理器对应的所述第一消息队列。
结合第一方面的第二种可能的实现方式,在第一方面的第六种可能的实现方式中,所述第一处理器确定所述第一消息队列为与所述第二处理器对应的消息队列,包括:
若所述第一处理器确定没有与所述第二处理器对应的消息队列,则所述第一处理器查询存在的空消息队列;
若所述第一处理器确定没有空消息队列,则所述第一处理器将包括的替换更新消息最多的消息队列中的全部替换更新消息合并为第四替换更新消息,并将所述第四替换更新消息发送给所述包括的替换更新消息最多的消息队列对应的处理器;
所述第一处理器将所述包括的替换更新消息最多的消息队列作为与所述第二处理器对应的所述第一消息队列。
结合第一方面或第一方面的第一种可能的实现方式至第六种可能的实现方式中的任一种可能的实现方式,在第一方面的第七种可能的实现方式中,所述第一处理器将所述第一替换更新消息发送给所述第二处理器,包括:
所述第一处理器将所述第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息,并将所述第五替换更新消息发送给所述第二处理器;其中,所述第一替换更新消息参与了合并。
结合第一方面的第七种可能的实现方式,在第一方面的第八种可能的实现方式中,所述第一处理器将所述第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息,包括:
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息时,所述第一处理器将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息,且有新的替换更新消息需要添加到所述第一消息队列中时,所述第一处理器将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一处理器接收到对应于所述第一消息队列的无效信息时,所述第一处理器将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;所述无效信息用于指示将所述第一消息队列中的一个替换更新消息对应的数据设置为无效;或
在所述第一消息队列存在的时长已达到预设时长阈值时,所述第一处理器将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息。
结合第一方面或第一方面的第一种可能的实现方式至第八种可能的实现方式中的任一种可能的实现方式,在第一方面的第九种可能的实现方式中,还包括:
所述第一处理器设定第一预设时长阈值作为至少一个消息队列中的每个的最大存在时长;所述消息队列用于存放替换更新消息。
结合第一方面的第九种可能的实现方式,在第一方面的第十种可能的实现方式中,在所述第一处理器设定第一预设时长阈值作为所述至少一个消息队列中的每个的最大存在时长之后,还包括:
若所述第一处理器在还未到达所述第一预设时长阈值时接收到对应于第二消息队列的无效信息,则所述第一处理器将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第二预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值大于所述第二预设时长阈值;或
若所述第一处理器在到达所述第一预设时长阈值时还未接收到对应于第二消息队列的无效信息,则所述第一处理器将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第三预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值小于所述第三预设时长阈值。
第二方面,提供一种将数据设置为无效的方法,包括:
第二处理器接收第一处理器发送的第一替换更新消息,所述第一替换更新消息用于将第一数据已从所述第一处理器的缓存移动到所述第一处理器的内存的信息通知所述第二处理器,所述第一替换更新消息中携带所述第二处理器中存储的第二数据在所述第二处理器中的地址;
所述第二处理器根据所述第二数据在所述第二处理器中的地址,将所述第一数据对应的信息设置为无效;
其中,所述第一处理器和所述第二处理器属于同一多处理器系统,所述第一数据为副本,所述第二数据为与所述第一数据对应的原始数据。
结合第二方面,在第二方面的第一种可能的实现方式中,第二处理器接收第一处理器发送的第一替换更新消息,包括:
所述第二处理器接收所述第一处理器发送的第五替换更新消息,所述第五替换更新消息为将第一消息队列中包括的部分或全部替换更新消息合并得到的,所述第一替换更新消息参与了合并;所述第一消息队列为用于存放替换更新消息的消息队列。
结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,在所述第二处理器接收所述第一处理器发送的第五替换更新消息之后,还包括:
所述第二处理器解析所述第五替换更新消息,以获取所述部分或全部替换更新消息的内容。
第三方面,提供一种处理器,包括:
确定模块,用于当所述处理器的缓存中存储的第一数据待被移动到所述处理器的内存中时,确定第二数据在第二处理器中的地址;
生成模块,用于生成第一替换更新消息,所述第一替换更新消息中携带所述第二数据在所述第二处理器中的地址;
发送模块,用于将所述第一替换更新消息发送给所述第二处理器;
其中,所述处理器和所述第二处理器属于同一多处理器系统,所述第一替换更新消息用于将所述第一数据已移动的信息通知所述第二处理器,所述第二处理器中存储有所述第二数据,所述第一数据为副本,所述第二数据为与所述第一数据对应的原始数据。
结合第三方面,在第三方面的第一种可能的实现方式中,所述处理器还包括添加模块,用于:
在所述生成模块生成第一替换更新消息之后,将所述第一替换更新消息添加到第一消息队列,所述第一消息队列为与所述第二处理器对应的消息队列;所述消息队列用于存放替换更新消息。
结合第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,所述添加模块具体用于:
根据所述第二处理器的标识,查询与所述第二处理器对应的消息队列;
确定所述第一消息队列为与所述第二处理器对应的消息队列,将所述第一替换更新消息添加到所述第一消息队列。
结合第三方面的第二种可能的实现方式,在第三方面的第三种可能的实现方式中,所述发送模块还用于:
在所述添加模块将所述第一替换更新消息添加到所述第一消息队列之前,若所述第一消息队列中的剩余空间不够存储所述第一替换更新消息,则将所述第一消息队列中的部分或全部替换更新消息合并为第二替换更新消息,并将所述第二替换更新消息发送给所述第二处理器。
结合第三方面的第二种可能的实现方式,在第三方面的第四种可能的实现方式中,所述添加模块具体用于:
若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
将查询到的一个空消息队列作为与所述第二处理器对应的第一消息队列。
结合第三方面的第二种可能的实现方式,在第三方面的第五种可能的实现方式中,
所述添加模块具体用于:若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
所述发送模块还用于:若所述添加模块确定没有空消息队列,则将存在时长最长的消息队列中的全部替换更新消息合并为第三替换更新消息,将所述第三替换更新消息发送给所述存在时长最长的消息队列对应的处理器;
所述添加模块具体用于:将所述存在时长最长的消息队列作为与所述第二处理器对应的所述第一消息队列。
结合第三方面的第二种可能的实现方式,在第三方面的第六种可能的实现方式中,
所述添加模块具体用于:若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
所述发送模块还用于:若所述添加模块确定没有空消息队列,则将包括的替换更新消息最多的消息队列中的全部替换更新消息合并为第四替换更新消息,并将所述第四替换更新消息发送给所述包括的替换更新消息最多的消息队列对应的处理器;
所述添加模块具体用于:将所述包括的替换更新消息最多的消息队列作为与所述第二处理器对应的所述第一消息队列。
结合第三方面或第三方面的第一种可能的实现方式至第六种可能的实现方式中的任一种可能的实现方式,在第三方面的第七种可能的实现方式中,所述发送模块具体用于:
将所述第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息,并将所述第五替换更新消息发送给所述第二处理器;其中,所述第一替换更新消息参与了合并。
结合第三方面的第七种可能的实现方式,在第三方面的第八种可能的实现方式中,所述发送模块具体用于:
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息,且有新的替换更新消息需要添加到所述第一消息队列中时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一处理器接收到对应于所述第一消息队列的无效信息时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;所述无效信息用于指示将所述第一消息队列中的一个替换更新消息对应的数据设置为无效;或
在所述第一消息队列存在的时长已达到预设时长阈值时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息。
结合第三方面或第三方面的第一种可能的实现方式至第八种可能的实现方式中的任一种可能的实现方式,在第三方面的第九种可能的实现方式中,所述处理器还包括设定模块,用于设定第一预设时长阈值作为至少一个消息队列中的每个的最大存在时长;所述消息队列用于存放替换更新消息。
结合第三方面的第九种可能的实现方式,在第三方面的第十种可能的实现方式中,所述处理器还包括更新模块,用于:
若所述处理器在还未到达所述第一预设时长阈值时接收到对应于第二消息队列的无效信息,则将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第二预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值大于所述第二预设时长阈值;或
若所述处理器在到达所述第一预设时长阈值时还未接收到对应于第二消息队列的无效信息,则将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第三预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值小于所述第三预设时长阈值。
第四方面,提供一种处理器,包括:
接收模块,用于接收第一处理器发送的第一替换更新消息,所述第一替换更新消息用于将第一数据已从所述第一处理器的缓存移动到所述第一处理器的内存的信息通知所述处理器,所述第一替换更新消息中携带所述处理器中存储的第二数据在所述处理器中的地址;
设置模块,用于根据所述第二数据在所述处理器中的地址,将所述第一数据对应的信息设置为无效;
其中,所述第一处理器和所述处理器属于同一多处理器系统,所述第一数据为副本,所述第二数据为与所述第一数据对应的原始数据。
结合第四方面,在第四方面的第一种可能的实现方式中,所述接收模块具体用于:
接收所述第一处理器发送的第五替换更新消息,所述第五替换更新消息为将第一消息队列中包括的部分或全部替换更新消息合并得到的,所述第一替换更新消息参与了合并;所述第一消息队列为用于存放替换更新消息的消息队列。
结合第四方面的第一种可能的实现方式,在第四方面的第二种可能的实现方式中,所述处理器还包括解析模块,用于:
在所述接收模块接收所述第一处理器发送的第五替换更新消息之后,解析所述第五替换更新消息,以获取所述部分或全部替换更新消息的内容。
第五方面,提供一种多处理器系统,包括第一处理器和第二处理器;
所述第一处理器用于:当所述第一处理器的缓存中存储的第一数据待被移动到所述第一处理器的内存中时,确定第二数据在第二处理器中的地址;生成第一替换更新消息,所述第一替换更新消息中携带所述第二数据在所述第二处理器中的地址;将所述第一替换更新消息发送给所述第二处理器;其中,所述第一替换更新消息用于将所述第一数据已移动的信息通知所述第二处理器,所述第二处理器中存储有所述第二数据,所述第一数据为副本,所述第二数据为与所述第一数据对应的原始数据;
所述第二处理器用于:接收所述第一处理器发送的所述第一替换更新消息,根据所述第二数据在所述第二处理器中的地址,将所述第一数据对应的信息设置为无效。
结合第五方面,在第五方面的第一种可能的实现方式中,所述第一处理器还用于:
在生成第一替换更新消息之后,将所述第一替换更新消息添加到第一消息队列,所述第一消息队列为与所述第二处理器对应的消息队列;所述消息队列用于存放替换更新消息。
结合第五方面的第一种可能的实现方式,在第五方面的第二种可能的实现方式中,所述第一处理器具体用于:
根据所述第二处理器的标识,查询与所述第二处理器对应的消息队列;
确定所述第一消息队列为与所述第二处理器对应的消息队列,将所述第一替换更新消息添加到所述第一消息队列。
结合第五方面的第二种可能的实现方式,在第五方面的第三种可能的实现方式中,所述第一处理器还用于:
在将所述第一替换更新消息添加到所述第一消息队列之前,若所述第一消息队列中的剩余空间不够存储所述第一替换更新消息,则将所述第一消息队列中的部分或全部替换更新消息合并为第二替换更新消息,并将所述第二替换更新消息发送给所述第二处理器。
结合第五方面的第二种可能的实现方式,在第五方面的第四种可能的实现方式中,所述第一处理器具体用于:
若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
将查询到的一个空消息队列作为与所述第二处理器对应的第一消息队列。
结合第五方面的第二种可能的实现方式,在第五方面的第五种可能的实现方式中,所述第一处理器具体用于:
若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
若确定没有空消息队列,则将存在时长最长的消息队列中的全部替换更新消息合并为第三替换更新消息,将所述第三替换更新消息发送给所述存在时长最长的消息队列对应的处理器;
将所述存在时长最长的消息队列作为与所述第二处理器对应的所述第一消息队列。
结合第五方面的第二种可能的实现方式,在第五方面的第六种可能的实现方式中,所述第一处理器具体用于:
若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
若确定没有空消息队列,则将包括的替换更新消息最多的消息队列中的全部替换更新消息合并为第四替换更新消息,并将所述第四替换更新消息发送给所述包括的替换更新消息最多的消息队列对应的处理器;
将所述包括的替换更新消息最多的消息队列作为与所述第二处理器对应的所述第一消息队列。
结合第五方面或第五方面的第一种可能的实现方式至第六种可能的实现方式中的任一种可能的实现方式,在第五方面的第七种可能的实现方式中,所述第一处理器具体用于:
将所述第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息,并将所述第五替换更新消息发送给所述第二处理器;其中,所述第一替换更新消息参与了合并。
结合第五方面的第七种可能的实现方式,在第五方面的第八种可能的实现方式中,所述第一处理器具体用于:
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息,且有新的替换更新消息需要添加到所述第一消息队列中时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一处理器接收到对应于所述第一消息队列的无效信息时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;所述无效信息用于指示将所述第一消息队列中的一个替换更新消息对应的数据设置为无效;或
在所述第一消息队列存在的时长已达到预设时长阈值时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息。
结合第五方面或第五方面的第一种可能的实现方式至第八种可能的实现方式中的任一种可能的实现方式,在第五方面的第九种可能的实现方式中,所述第一处理器还用于:
设定第一预设时长阈值作为至少一个消息队列中的每个的最大存在时长;所述消息队列用于存放替换更新消息。
结合第五方面的第九种可能的实现方式,在第五方面的第十种可能的实现方式中,所述第一处理器还用于:
在设定第一预设时长阈值作为所述至少一个消息队列中的每个的最大存在时长之后,若所述第一处理器在还未到达所述第一预设时长阈值时接收到对应于第二消息队列的无效信息,则将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第二预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值大于所述第二预设时长阈值;或
在设定第一预设时长阈值作为所述至少一个消息队列中的每个的最大存在时长之后,若所述第一处理器在到达所述第一预设时长阈值时还未接收到对应于第二消息队列的无效信息,则将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第三预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值小于所述第三预设时长阈值。
结合第五方面或第五方面的第一种可能的实现方式至第十种可能的实现方式中的任一种可能的实现方式,在第五方面的第十一种可能的实现方式中,所述第二处理器具体用于:
接收所述第一处理器发送的第五替换更新消息,所述第五替换更新消息为将第一消息队列中包括的部分或全部替换更新消息合并得到的,所述第一替换更新消息参与了合并;所述第一消息队列为用于存放替换更新消息的消息队列。
结合第五方面的第十一种可能的实现方式,在第五方面的第十二种可能的实现方式中,所述第二处理器还用于:
在接收所述第一处理器发送的第五替换更新消息之后,解析所述第五替换更新消息,以获取所述部分或全部替换更新消息的内容。
本发明实施例中,当多处理器系统中第一处理器的缓存中存储的第一数据待被移动到第一处理器的内存中时,第一处理器生成待发送给第二处理器的第一替换更新消息,第一替换更新消息中携带第二数据在第二处理器中的地址,其中,第一数据是副本,第二处理器中存储有与第一数据对应的原始数据(即第二数据),即,如果副本被移动到内存中,那么第一处理器会通知第二处理器,这样第二处理器就知道第一处理器中的副本已经被移走,如果第二处理器中存储的原本也要被移动到内存,则第二处理器无需再通知第一处理器,减少了开销,节省了系统资源。
另外,在第一替换更新消息中携带的是第二数据在第二处理器中的地址,则第二处理器在接收到第一替换更新消息后直接就可以知道第二数据的存放位置,从而可以直接根据第二数据的存放位置知晓第一数据对应的信息的位置,无需再去确定第二数据的存放位置,减少了第二处理器的查找开销,减小处理器的功耗,以及减少了处理时间,提高处理效率。
附图说明
图1为本发明实施例中多处理器系统第一种可能的硬件架构;
图2为本发明实施例中多处理器系统第二种可能的硬件架构;
图3为本发明实施例中数据移动方法的流程图;
图4为本发明实施例中消息队列的一种可能的示意图;
图5为本发明实施例中将数据设置为无效的方法的流程图;
图6为本发明实施例中第一处理器的结构框图;
图7为本发明实施例中第二处理器的结构框图;
图8为本发明实施例中多处理器系统的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
首先介绍两种可能的多处理器系统的硬件架构,这两种硬件架构均是基于目录协议所提出的。
请参见图1,为多处理器系统第一种可能的硬件架构,在这种硬件架构下,多个处理器共用一个目录。图1中以三个处理器为例,分别为处理器A、处理器B和处理器C,其中每个处理器都有对应的缓存,分别为缓存A、缓存B和缓存C,以及,各处理器共用一个内存。其中,缓存和目录都有对应的控制器,即每个缓存和目录都可以独立进行相应的操作。
在这种架构下,对于每个缓存中存储的数据,都能在目录中查找到存储在其他缓存中的对应数据的地址。例如,数据1为原始数据,存储在缓存C中,数据1有两个副本,分别为数据11和数据12,其中数据11存储在缓存B中,数据12存储在缓存A中,则在目录中分别记录有数据1的地址、数据11的信息和数据12的地址,且较佳的,数据1的信息、数据11的信息和数据12的地址在目录中具有对应关系,知道其中一个就能知道另外两个,同时,通过查询目录,也能够知道数据1、数据11和数据12之间,哪个是原始数据,哪个是副本。
请参见图2,为多处理器系统的第二种可能的硬件架构,在这种硬件架构下,多个处理器都有自己的目录。图1中以三个处理器为例,分别为处理器A、处理器B和处理器C,其中每个处理器都有对应的缓存,分别为缓存A、缓存B和缓存C,以及,每个处理器都有对应的目录,分别为目录A、目录B和目录C,多个处理器共用一个内存。其中,缓存和目录都有对应的控制器,即每个缓存和目录都可以独立进行相应的操作。
在这种架构下,对于一个目录来说,记录了该目录对应的处理器的缓存中存储的各个数据的地址,以及相应的原本或副本的地址。例如,数据1为原始数据,存储在缓存C中,数据1有两个副本,分别为数据11和数据12,其中数据11存储在缓存B中,数据12存储在缓存A中,则,目录A中记录有数据1在缓存C中的地址、数据11在缓存B中的地址、以及数据12在缓存A中的地址,且较佳的,数据1的地址、数据11的地址和数据12的地址在目录中具有对应关系,知道其中一个就能知道另外两个,且通过目录A可知数据1为原始数据,数据11和数据12为副本,同样的,目录B中记录有数据1在缓存C中的地址、数据11在缓存B中的地址、以及数据12在缓存A中的地址,且较佳的,数据1的地址、数据11的地址和数据12的地址在目录中具有对应关系,知道其中一个就能知道另外两个,且通过目录B可知数据1为原始数据,数据11和数据12为副本,以及,目录C中记录有数据1在缓存C中的地址、数据11在缓存B中的地址、以及数据12在缓存A中的地址,且较佳的,数据1的地址、数据11的地址和数据12的地址在目录中具有对应关系,知道其中一个就能知道另外两个,且通过目录C可知数据1为原始数据,数据11和数据12为副本。
一般来说,在处理器的数量较少时可以优先选用图1的架构,较为节省硬件及软件资源,在处理器的数量较多时可以优先选用图2的架构,减少出错率。
本发明实施例中的各个实施例,既可以依托于图1所示的硬件架构,也可以依托于图2所示的硬件架构,本发明对此不作限制。较佳的,可以依托于图2所示的硬件架构。
例如,将存储有副本的处理器称为请求节点(Request Node),将存储有相应的原始数据的处理器称为本地节点(Home Node)。
本地节点中存储有原始数据,例如为数据1,请求节点1、请求节点2和请求节点3中分别存储有数据1的副本,例如分别为数据11、数据12和数据13。以下举例说明两种维护缓存一致性的场景:
第一种场景:当请求节点1需要修改数据11时,请求节点1向本地节点发送修改请求,本地节点需要向请求节点2和请求节点3均发送无效(invalidate)信息,请求节点2和请求节点3接收到无效信息后,分别将本地的数据12和数据13无效掉,以避免各个节点存储的同一个数据的值不同。
第二种场景:例如,本地节点中的数据1要被移动到内存中,本地节点需要向请求节点1、请求节点2和请求节点3分别发送无效信息,请求节点1、请求节点2和请求节点3接收到无效信息后,分别将本地的数据11、数据12和数据13无效掉,以避免各个节点存储的同一个数据的值不同(第二种场景与第一种场景为两个不同的例子,在第二种场景下,请求节点1未修改数据11)。
这里说的本地节点中存储的数据,指的是本地节点的缓存中存储的数据,请求节点中存储的数据,指的是请求节点的缓存中存储的数据。即,本发明实施例中所述的,处理器中存储的数据,指的都是处理器的缓存中存储的数据。
例如,请求节点1中存储的数据11要被移动到内存中,在移动后,请求节点1没有将数据11已移动的消息通知本地节点。在数据11被移走之后,例如本地节点中的数据1也要被移动到内存中,则本地节点会向请求节点1、请求节点2和请求节点3分别发送无效信息,请求节点2和请求节点3接收到无效信息后,分别将本地存储的数据12和数据13设置为无效,以保持缓存一致性。而此时,请求节点1中已经没有数据11了,那么,本地节点向请求节点1发送无效信息就是多余的开销,造成了资源的浪费。本发明就是要解决这个问题。
另外,本文中术语“系统”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
下面结合说明书附图对本发明实施例作进一步详细描述。
请参见图3,本发明实施例提供一种数据移动方法,所述方法的主要流程描述如下。
步骤301:当第一处理器的缓存中存储的第一数据待被移动到第一处理器的内存中时,第一处理器确定第二数据在第二处理器中的地址。
本发明实施例中所述的,数据在处理器中的地址,指的是数据在处理器的缓存中的地址。
本发明实施例中,第一处理器和第二处理器属于同一多处理器系统,第二处理器中存储有第二数据,第一数据为副本,第二数据为与第一数据对应的原始数据。
本发明实施例中,无论是图1所示的硬件架构还是图2所示的硬件架构,各个处理器都是共用一个内存,因此,所述的处理器的内存,指的就是各个处理器共用的内存,例如,第一处理器的内存,就是指各个处理器共用的内存。在其他的硬件架构中,如果各个处理器都有自己的内存,那么处理器的内存就是指相应的处理器所对应的内存。
例如,第一数据存储在第一处理器的缓存中,当第一处理器的缓存中需要存储另外一个数据(例如称为第三数据)时,可能第一处理器的缓存中没有剩余的空间了,则第一处理器需要将第一数据移动到内存中,用空出来的空间存放第三数据,这时,第一数据就相当于被替换到了第一处理器的内存中。
对于第一处理器来说,通过查询目录,可以知道第一数据究竟是原始数据还是副本,以及可以知道与第一数据相应的各个数据的地址。
例如第一数据是副本,第二数据为第一数据的原始数据,那么第一处理器可知第一数据在第一处理器的缓存中的地址,以及,通过查询目录,可知与第一数据对应第二数据在第二处理器的缓存中的地址,以及,若第二数据还有其他副本的话,第一处理器也可以通过目录知道其他副本在相应的缓存中的地址。
步骤302:第一处理器生成第一替换更新消息,第一替换更新消息中携带第二数据在第二处理器中的地址。
第一处理器在确定第二数据在第二处理器的缓存中的地址后,可以生成替换更新(Replace Update)消息,并将第二数据在第二处理器的缓存中的地址携带在该替换更新消息中。本发明实施例中为了区分,将第一处理器此时生成的替换更新消息称为第一替换更新消息。
其中,第一替换更新消息用于将第一数据已移动的信息通知第二处理器。
步骤303:第一处理器将第一替换更新消息发送给第二处理器。
在生成第一替换更新消息后,第一处理器可以将第一替换更新消息发送给处理器,第二处理器接收到第一替换更新消息后,直接可以知道第二数据在第二处理器的缓存中的地址,第二处理器知道一个数据在第二处理器的缓存中的地址,也就相当于知道了这个数据究竟是什么数据,即第二处理器根据第一替换更新消息直接可以知道第一替换更新消息究竟指示的是哪个数据,从而可以在目录中确定第二数据(目录中存储的不是第二数据,而是第二数据的地址,即第二处理器在目录中确定第二数据,可能是在目录中确定第二数据的地址),从而在目录中确定与第二数据对应的第一数据对应的信息,并将第一数据对应的信息设置为无效。其中,在目录中,每个数据,或者说每个数据的地址对应有一个信息,也就可以看做每个数据对应有一个信息,该信息可以是标识位,或者也可以是其他类型的信息,通过对该信息进行设置,就能够将一个数据设置为有效或无效。
如果图3流程所依托的硬件架构为图1所示的硬件架构,则这里的目录可以是指图1中的公用目录,或者,如果图3流程所依托的硬件架构为图2所示的硬件架构,则这里的目录也可以是指第二处理器单独对应的目录。
如果在第一替换更新消息中携带的是第一数据在第一处理器的缓存中的地址,那么第二处理器在接收到第一替换更新消息后,还需要根据第一数据在第一处理器的缓存中的地址进行查询,以查找第二数据在第二处理器的缓存中的地址,即根据第一数据在第一处理器的缓存中的地址,查找该数据究竟是第二处理器的缓存中存储的哪个数据,在找到后才能在目录中将第一数据对应的信息设置为无效,而本发明实施例中是直接将第二数据在第二处理器的缓存中的地址携带在第一替换更新消息中,第二处理器接收到第一替换更新消息后可以直接确定第二数据的位置,无需再进行查找,节省了查找所需的开销,提高了处理效率。
可选的,本发明实施例中,第一处理器在生成第一替换更新消息后,可以直接将第一替换更新消息发送给第二处理器,或者也可以先不将第一替换更新消息发送给第二处理器。以下介绍第一处理器先不将第一替换更新消息发送给第二处理器的方案。
可选的,本发明实施例中,所述方法还包括:
第一处理器生成至少一个消息队列,消息队列用于存放替换更新消息。
该步骤可以发生在步骤301之前、步骤301之后、步骤302之前或步骤303之前。
本发明实施例中,每个消息队列都可以用于存放至少一个替换更新消息,较佳的,可以将对应于同一处理器的替换更新消息添加到一个消息队列中,这样便于同时发送。对应于同一处理器,是指这些替换更新消息要发送到同一个处理器,即,这些替换更新消息的目的地址相同。本发明实施例中,可以认为一个消息队列对应于同一个处理器,一个处理器可以对应一个或多个消息队列。
可选的,本发明实施例中,在第一处理器生成第一替换更新消息之后,还包括:
第一处理器将第一替换更新消息添加到第一消息队列,第一消息队列为与第二处理器对应的消息队列;消息队列用于存放替换更新消息。
可选的,本发明实施例中,第一处理器将第一替换更新消息添加到第一消息队列,包括:
第一处理器根据第二处理器的标识,查询与第二处理器对应的消息队列;
第一处理器确定第一消息队列为与第二处理器对应的消息队列,将第一替换更新消息添加到第一消息队列。
第一处理器在生成第一替换更新消息后,可以先不发送第一替换更新消息,而是在本地查找与第一替换更新消息的目的地址(即第二处理器)对应的消息队列,本发明实施例中将与第二处理器对应的消息队列称为第一消息队列,若查找到存在第一消息队列,则第一处理器将第一替换更新消息添加到第一消息队列中。
本发明实施例中,第二处理器的标识,可以是指第二处理器的ID(Identity,身份标识号),或者也可以是指其他通信标识。
可选的,本发明实施例中,在将第一替换更新消息添加到第一消息队列之前,还包括:
若第一消息队列中的剩余空间不够存储第一替换更新消息,则第一处理器将第一消息队列中的部分或全部替换更新消息合并为第二替换更新消息,并将第二替换更新消息发送给第二处理器。
本发明实施例中,第一处理器在生成第一替换更新消息后,在本地查找是否存在与第二处理器对应的消息队列(即第一消息队列),若存在第一消息队列,则第一处理器确定第一消息队列中的剩余空间是否足够存储第一替换更新消息,如果第一消息队列中的剩余空间足够存储第一替换更新消息,那么第一处理器可以直接将第一替换更新消息添加到第一消息队列中,如果第一消息队列中的剩余空间不够存储第一替换更新消息,那么第一处理器可以先将第一消息队列中原来存储的部分或者全部替换更新消息合并为一条替换更新消息,例如将这里合并的替换更新消息称为第二替换更新消息,并将第二替换更新消息发送给第二处理器。
可选的,本发明实施例中,第一处理器确定所述第一消息队列为与所述第二处理器对应的消息队列,包括:
若所述第一处理器确定没有与所述第二处理器对应的消息队列,则所述第一处理器查询存在的空消息队列;
所述第一处理器将查询到的一个空消息队列作为与所述第二处理器对应的第一消息队列。
本发明实施例中,第一处理器在生成第一替换更新消息后,在本地查找是否存在与第二处理器对应的消息队列(即第一消息队列),若不存在第一消息队列,则第一处理器继续查找其他消息队列,第一处理器优先查找的是,是否存在空消息队列,所述的空消息队列,是指没有存放任何替换更新消息的消息队列。如果第一处理器查找到本地存在一个空消息队列,则第一处理器将该空消息队列作为第一消息队列,如果第一处理器查找到本地存在多个空消息队列,则第一处理器可以从中任意选择一个空消息队列作为第一消息队列。
可选的,本发明实施例中,第一处理器确定第一消息队列为与第二处理器对应的消息队列,包括:
若第一处理器确定没有与第二处理器对应的消息队列,则第一处理器查询存在的空消息队列;
若第一处理器确定没有空消息队列,则第一处理器将存在时长最长的消息队列中的全部替换更新消息合并为第三替换更新消息,将第三替换更新消息发送给存在时长最长的消息队列对应的处理器;
第一处理器将存在时长最长的消息队列作为与第二处理器对应的第一消息队列。
可选的,本发明实施例中,第一处理器确定第一消息队列为与第二处理器对应的消息队列,包括:
若第一处理器确定没有与第二处理器对应的消息队列,则第一处理器查询存在的空消息队列;
若第一处理器确定没有空消息队列,则第一处理器将包括的替换更新消息最多的消息队列中的全部替换更新消息合并为第四替换更新消息,并将第四替换更新消息发送给包括的替换更新消息最多的消息队列对应的处理器;
第一处理器将包括的替换更新消息最多的消息队列作为与第二处理器对应的第一消息队列。
本发明实施例中,第一处理器在生成第一替换更新消息后,在本地查找是否存在与第二处理器对应的消息队列(即第一消息队列),若不存在第一消息队列,则第一处理器继续查找其他消息队列,第一处理器优先查找的是,是否存在空消息队列,如果不存在空消息队列,那么第一处理器可以找其他的消息队列作为第一消息队列。例如第一处理器可以按照设定规则来确定可以作为第一消息队列的其他消息队列,该设定规则可以是将任意一个消息队列拿来作为第一消息队列,或者可以是将存在时长最长的消息队列作为第一消息队列,或者可以是将所包括的替换更新消息最多的消息队列作为第一消息队列,等等。
例如,第一处理器要将存在时长最长的消息队列作为第一消息队列,那么,该存在时长最长的消息队列中原来包括有其他的替换更新消息,而这些替换更新消息不是要发送到第二处理器的,即不是对应于第二处理器的。因此,为了避免混乱,第一处理器在将第一替换更新消息添加到该存在时长最长的消息队列之前,首先要将该存在时长最长的消息队列中已有的全部替换更新消息先发送给该存在时长最长的消息队列原本对应的处理器,发送方式依然可以是先将该存在时长最长的消息队列中已有的全部替换更新消息合并为一条替换更新消息之后再发送,例如将这里合并的替换更新消息称为第三替换更新消息。在将第三替换更新消息发送给该存在时长最长的消息队列原本对应的处理器后,第一处理器可以将该存在时长最长的消息队列确定为第一消息队列,并将第一替换更新消息添加到第一消息队列中。
再例如,第一处理器要将包括的替换更新消息最多的消息队列作为第一消息队列,那么,该包括的替换更新消息最多的消息队列中原来包括有其他的替换更新消息,而这些替换更新消息不是要发送到第二处理器的,即不是对应于第二处理器的。因此,为了避免混乱,第一处理器在将第一替换更新消息添加到该包括的替换更新消息最多的消息队列之前,首先要将该包括的替换更新消息最多的消息队列中已有的全部替换更新消息先发送给该包括的替换更新消息最多的消息队列原本对应的处理器,发送方式依然可以是先将该包括的替换更新消息最多的消息队列中已有的全部替换更新消息合并为一条替换更新消息之后再发送,例如将这里合并的替换更新消息称为第四替换更新消息。在将第四替换更新消息发送给该包括的替换更新消息最多的消息队列原本对应的处理器后,第一处理器可以将该包括的替换更新消息最多的消息队列确定为第一消息队列,并将第一替换更新消息添加到第一消息队列中。
可选的,本发明实施例中,如果第一处理器将第一替换更新消息添加到了第一消息队列中,那么,第一处理器将第一替换更新消息发送给第二处理器,包括:
第一处理器将第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息,并将第五替换更新消息发送给第二处理器。
即,如果第一处理器将第一替换更新消息添加到了第一消息队列中,那么第一处理器在发送时,也可以是将第一消息队列中包括的全部或部分替换更新消息合并为一条替换更新消息,例如将这里合并的替换更新消息称为第五替换更新消息,并将第五替换更新消息发送给第二处理器。
现有技术中发送的是多条替换更新消息,那么每条替换更新消息都有各自的消息头等结构,而本发明实施例中第一处理器可以将多条替换更新消息合并为一条替换更新消息来发送,那么一条替换更新消息可以只用一个消息头,而信息内容并没有减少,即合并的替换更新消息中携带了原来参与合并的每条替换更新消息的内容。这样,在不减少信息内容的前提下,减少了信息的数据量,从而减少了片上信息传输量。
请参见图4,为一种可能的消息队列的示意图。图4左边的部分表示消息队列(即图4中的Replace Update Queue(替换更新队列)),左边的部分的每一个框可以代表存放了一个替换更新消息,其中,左边部分的框的数量,并不代表实际情况下一个消息队列中能够存放的替换更新消息的数量,图4只是举例,在实际应用时可根据需要设定一个消息队列能够存放的替换更新消息的数量。图4右边的部分,表示将图4左边的部分包括的全部或部分替换更新消息合并为一条替换更新消息后,该合并得到的替换更新消息的格式。右边的部分中的第一个Valid,表示该合并得到的替换更新消息为有效信息,Node ID(节点ID),表示该消息队列所对应的处理器的ID,0-N,每个编号代表一个参与合并的替换更新消息,Valid0-Valid N,表示相应编号的替换更新消息的内容有效,set0-set N,以及Way0-Way N,表示相应编号的替换更新消息所对应的数据的原始数据在Node ID所对应的处理器中的地址。可以看到,合并得到的替换更新消息中包括了参与合并的每条替换更新消息的消息内容。
可选的,本发明实施例中,第一处理器将第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息,包括:
在第一消息队列中没有剩余空间用于存储新的替换更新消息时,第一处理器将第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息;或
在第一消息队列中没有剩余空间用于存储新的替换更新消息,且有新的替换更新消息需要添加到第一消息队列中时,第一处理器将第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息;或
在第一处理器接收到对应于第一消息队列的无效信息时,第一处理器将第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息;无效信息用于指示将第一消息队列中的一个替换更新消息对应的数据设置为无效;或
在第一消息队列存在的时长已达到预设时长阈值时,第一处理器将第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息。
即,第一处理器可以在不同的时机下合并得到第五替换更新消息。
例如在第一消息队列中没有剩余空间用于存储新的替换更新消息时,第一处理器可以合并得到第五替换更新消息,并将第五替换更新消息发送给第二处理器,以在第一消息队列中留出空间来存放新的替换更新消息。
或者例如,在第一消息队列中没有剩余空间用于存储新的替换更新消息时第一处理器可以暂时不处理,而等到有新的替换更新消息需要添加到第一消息队列中时第一处理器再合并得到第五替换更新消息,这样可以等待更长的时间,可以合并更多的替换更新消息,同时也不耽误新的替换更新消息的存储。
或者例如,在第一处理器接收到对应于第一消息队列的无效信息时,即第二处理器向第一处理器发送了无效信息,该无效信息是针对第一消息队列中存储的其中一个替换更新消息的(每个替换更新消息对应于一个数据,对应于一个替换更新消息,即对应于一个数据,也就是说,第二处理器指示第一处理器将该数据设置为无效),既然一个无效信息会对应于一个替换更新消息,就表明这个无效信息所对应的数据已经移动到了内存中,即这个无效信息已经浪费了传输资源,那么第一处理器需要尽快将第一消息队列中的替换更新消息发送给第二处理器,以避免第二处理器可能后续会发送更多的、针对已经移动到内存中的数据的无效信息。
或者例如,在第一消息队列存在的时长已达到预设时长阈值时,第一处理器可以合并得到第五替换更新消息。本发明实施例中,第一处理器在生成至少一个消息队列后,就可以为生成的每个消息队列设置一个最大存在时长,例如为每个消息队列设置的最大存在时长可以是相同的,将其称为第一预设时长阈值。也就是说,对于一个消息队列来说,最多能够在第一处理器中存在的时长为第一预设时长阈值,因此,如果一个消息队列在第一处理器中存在的时长达到了第一时长阈值,第一处理器就要将其中包括的替换更新消息合并为一条替换更新消息后发送给对应的处理器,而后该消息队列就将被丢弃。
可选的,本发明实施例中,在第一处理器设定第一预设时长阈值作为至少一个消息队列中的每个的最大存在时长之后,还包括:
若第一处理器在还未到达第一预设时长阈值时接收到对应于第二消息队列的无效信息,则第一处理器将所述第二消息队列的最大存在时长由第一预设时长阈值更新为第二预设时长阈值;其中,第二消息队列为至少一个消息队列中的任意一个,无效信息用于指示将第二消息队列中的一个替换更新消息对应的数据设置为无效,第一预设时长阈值大于第二预设时长阈值;或
若第一处理器在到达第一预设时长阈值时还未接收到对应于第二消息队列的无效信息,则第一处理器将第二消息队列的最大存在时长由第一预设时长阈值更新为第三预设时长阈值;其中,第二消息队列为至少一个消息队列中的任意一个,无效信息用于指示将第二消息队列中的一个替换更新消息对应的数据设置为无效,第一预设时长阈值小于第三预设时长阈值。
即,本发明实施例中,第一处理器可以在消息队列生成时为每个消息队列设置相同的最大存在时长(即第一预设时长阈值),而后根据每个消息队列的不同情况,可以对各个消息队列的最大存在时长进行不同的调整。
例如对于第一处理器生成的任意一个消息队列(将其称为第二消息队列),如果第一处理器在还未到达第一预设时长阈值时就接收到对应于第二消息队列的无效信息,那可能说明第一预设时长阈值设置的过长,因此第一处理器可以将第二消息队列的最大存在时长由第一预设时长阈值调整为第二预设时长阈值,缩短了第二消息队列的最大存在时长。
例如还是对于第二消息队列,如果第一处理器在到达第一预设时长阈值时还未接收到对应于第二消息队列的无效信息,那可能说明第一预设时长阈值设置的过短,因此第一处理器可以将第二消息队列的最大存在时长由第一预设时长阈值调整为第三预设时长阈值,增加了第二消息队列的最大存在时长。
这样,根据每个消息队列的不同情况可以动态调整各个消息队列的最大存在时长,使得消息队列能够更好地为存放替换更新消息而服务。
本发明实施例中,合并的替换更新消息中所包括的原替换更新消息越多,则节省的片上信息传输量就越多,节省系统资源的效果就更为明显。
请参见图5,基于同一发明构思,本发明实施例提供一种将数据设置为无效的方法,所述方法的流程描述如下。
步骤501:第二处理器接收第一处理器发送的第一替换更新消息,第一替换更新消息用于将第一数据已从第一处理器的缓存移动到第一处理器的内存的信息通知第二处理器,第一替换更新消息中携带第二处理器中存储的第二数据在第二处理器中的地址;
步骤502:第二处理器根据第二数据在所述第二处理器中的地址,将第一数据对应的信息设置为无效。
第二处理器根据第二数据在第二处理器的缓存中的地址确定第二数据,从而在目录中确定第一数据对应的信息,则可以在目录中将第一数据对应的信息设置为无效。
其中,第一处理器和第二处理器属于同一多处理器系统,第一数据为副本,第二数据为与所述第一数据对应的原始数据。
可选的,本发明实施例中,第二处理器接收第一处理器发送的第一替换更新消息,包括:
第二处理器接收第一处理器发送的第五替换更新消息,第五替换更新消息为将第一消息队列中包括的部分或全部替换更新消息合并得到的,第一替换更新消息参与了合并;第一消息队列为用于存放替换更新消息的消息队列。
可选的,本发明实施例中,在第二处理器接收第一处理器发送的第五替换更新消息之后,还包括:
第二处理器解析第五替换更新消息,以获取部分或全部替换更新消息的内容。
图5流程为与图3流程所相应的方法流程,两个流程中的内容可相互参考。例如,在图3流程中,第一处理器还可能向第二处理器发送了第二替换更新消息、第三替换更新消息或第四替换更新消息,则第二处理器也会相应的接收并解析这些替换更新消息,并从解析的结果中获取参与合并的各个替换更新消息的内容,以将第二处理器的缓存存储的相应的数据设置为无效。
以下结合附图介绍本发明实施例中的装置。
请参见图6,基于同一发明构思,本发明实施例提供一种处理器,所述处理器可以是如前所述的第一处理器。所述处理器可以包括确定模块601、生成模块602和发送模块603。
确定模块601,用于当所述处理器的缓存中存储的第一数据待被移动到所述处理器的内存中时,确定第二数据在第二处理器中的地址;
生成模块602,用于生成第一替换更新消息,所述第一替换更新消息中携带所述第二数据在所述第二处理器中的地址;
发送模块603,用于将所述第一替换更新消息发送给所述第二处理器;
其中,所述处理器和所述第二处理器属于同一多处理器系统,所述第一替换更新消息用于将所述第一数据已移动的信息通知所述第二处理器,所述第二处理器中存储有所述第二数据,所述第一数据为副本,所述第二数据为与所述第一数据对应的原始数据。
可选的,本发明实施例中,所述处理器还包括添加模块,用于:
在生成模块602生成第一替换更新消息之后,将所述第一替换更新消息添加到第一消息队列,所述第一消息队列为与所述第二处理器对应的消息队列;所述消息队列用于存放替换更新消息。
可选的,本发明实施例中,所述添加模块具体用于:
根据所述第二处理器的标识,查询与所述第二处理器对应的消息队列;
确定所述第一消息队列为与所述第二处理器对应的消息队列,将所述第一替换更新消息添加到所述第一消息队列。
可选的,本发明实施例中,发送模块603还用于:
在所述添加模块将所述第一替换更新消息添加到所述第一消息队列之前,若所述第一消息队列中的剩余空间不够存储所述第一替换更新消息,则将所述第一消息队列中的部分或全部替换更新消息合并为第二替换更新消息,并将所述第二替换更新消息发送给所述第二处理器。
可选的,本发明实施例中,所述添加模块具体用于:
若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
将查询到的一个空消息队列作为与所述第二处理器对应的第一消息队列。
可选的,本发明实施例中,
所述添加模块具体用于:若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
发送模块603还用于:若所述添加模块确定没有空消息队列,则将存在时长最长的消息队列中的全部替换更新消息合并为第三替换更新消息,将所述第三替换更新消息发送给所述存在时长最长的消息队列对应的处理器;
所述添加模块具体用于:将所述存在时长最长的消息队列作为与所述第二处理器对应的所述第一消息队列。
可选的,本发明实施例中,
所述添加模块具体用于:若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
发送模块603还用于:若所述添加模块确定没有空消息队列,则将包括的替换更新消息最多的消息队列中的全部替换更新消息合并为第四替换更新消息,并将所述第四替换更新消息发送给所述包括的替换更新消息最多的消息队列对应的处理器;
所述添加模块具体用于:将所述包括的替换更新消息最多的消息队列作为与所述第二处理器对应的所述第一消息队列。
可选的,本发明实施例中,发送模块603具体用于:
将所述第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息,并将所述第五替换更新消息发送给所述第二处理器;其中,所述第一替换更新消息参与了合并。
可选的,本发明实施例中,发送模块603具体用于:
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息,且有新的替换更新消息需要添加到所述第一消息队列中时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一处理器接收到对应于所述第一消息队列的无效信息时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;所述无效信息用于指示将所述第一消息队列中的一个替换更新消息对应的数据设置为无效;或
在所述第一消息队列存在的时长已达到预设时长阈值时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息。
可选的,本发明实施例中,所述处理器还包括设定模块,用于设定第一预设时长阈值作为至少一个消息队列中的每个的最大存在时长;所述消息队列用于存放替换更新消息。
可选的,本发明实施例中,所述处理器还包括更新模块,用于:
若所述处理器在还未到达所述第一预设时长阈值时接收到对应于第二消息队列的无效信息,则将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第二预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值大于所述第二预设时长阈值;或
若所述处理器在到达所述第一预设时长阈值时还未接收到对应于第二消息队列的无效信息,则将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第三预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值小于所述第三预设时长阈值。
请参见图7,基于同一发明构思,本发明实施例提供另一种处理器,所述处理器可以是如前所述的第二处理器。所述处理器可以包括接收模块701和设置模块702。
接收模块701,用于接收第一处理器发送的第一替换更新消息,所述第一替换更新消息用于将第一数据已从所述第一处理器的缓存移动到所述第一处理器的内存的信息通知所述处理器,所述第一替换更新消息中携带所述处理器中存储的第二数据在所述处理器中的地址;
设置模块702,用于根据所述第二数据在所述处理器中的地址,将所述第一数据对应的信息设置为无效;
其中,所述第一处理器和所述处理器属于同一多处理器系统,所述第一数据为副本,所述第二数据为与所述第一数据对应的原始数据。
可选的,本发明实施例中,接收模块701具体用于:
接收所述第一处理器发送的第五替换更新消息,所述第五替换更新消息为将第一消息队列中包括的部分或全部替换更新消息合并得到的,所述第一替换更新消息参与了合并;所述第一消息队列为用于存放替换更新消息的消息队列。
可选的,本发明实施例中,所述处理器还包括解析模块,用于:
在接收模块701接收所述第一处理器发送的第五替换更新消息之后,解析所述第五替换更新消息,以获取所述部分或全部替换更新消息的内容。
请参见图8,基于同一发明构思,本发明实施例还提供一种多处理器系统,所述多处理器系统中可以包括第一处理器801和第二处理器802。
第一处理器801,用于当第一处理器801的缓存中存储的第一数据待被移动到第一处理器801的内存中时,确定第二数据在第二处理器中的地址;生成第一替换更新消息,所述第一替换更新消息中携带所述第二数据在第二处理器802中的地址;将所述第一替换更新消息发送给第二处理器802;其中,所述第一替换更新消息用于将所述第一数据已移动的信息通知第二处理器802,第二处理器802中存储有所述第二数据,所述第一数据为副本,所述第二数据为与所述第一数据对应的原始数据;
第二处理器802用于:接收第一处理器801发送的所述第一替换更新消息,根据所述第二数据在所述第二处理器中的地址,将所述第一数据对应的信息设置为无效。
可选的,本发明实施例中,第一处理器801还用于:
在生成第一替换更新消息之后,将所述第一替换更新消息添加到第一消息队列,所述第一消息队列为与所述第二处理器对应的消息队列;所述消息队列用于存放替换更新消息。
可选的,本发明实施例中,第一处理器801具体用于:
根据第二处理器802的标识,查询与第二处理器802对应的消息队列;
确定所述第一消息队列为与第二处理器802对应的消息队列,将所述第一替换更新消息添加到所述第一消息队列。
可选的,本发明实施例中,第一处理器801还用于:
在将所述第一替换更新消息添加到所述第一消息队列之前,若所述第一消息队列中的剩余空间不够存储所述第一替换更新消息,则将所述第一消息队列中的部分或全部替换更新消息合并为第二替换更新消息,并将所述第二替换更新消息发送给所述第二处理器。
可选的,本发明实施例中,第一处理器801具体用于:
若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
将查询到的一个空消息队列作为与所述第二处理器对应的第一消息队列。
可选的,本发明实施例中,第一处理器801具体用于:
若确定没有与第二处理器802对应的消息队列,则查询存在的空消息队列;
若确定没有空消息队列,则将存在时长最长的消息队列中的全部替换更新消息合并为第三替换更新消息,将所述第三替换更新消息发送给所述存在时长最长的消息队列对应的处理器;
将所述存在时长最长的消息队列作为与第二处理器802对应的所述第一消息队列。
可选的,本发明实施例中,第一处理器801具体用于:
若确定没有与第二处理器802对应的消息队列,则查询存在的空消息队列;
若确定没有空消息队列,则将包括的替换更新消息最多的消息队列中的全部替换更新消息合并为第四替换更新消息,并将所述第四替换更新消息发送给所述包括的替换更新消息最多的消息队列对应的处理器;
将所述包括的替换更新消息最多的消息队列作为与第二处理器802对应的所述第一消息队列。
可选的,本发明实施例中,第一处理器801具体用于:
将所述第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息,并将所述第五替换更新消息发送给第二处理器802;其中,所述第一替换更新消息参与了合并。
可选的,本发明实施例中,第一处理器801具体用于:
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息,且有新的替换更新消息需要添加到所述第一消息队列中时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一处理器接收到对应于所述第一消息队列的无效信息时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;所述无效信息用于指示将所述第一消息队列中的一个替换更新消息对应的数据设置为无效;或
在所述第一消息队列存在的时长已达到预设时长阈值时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息。
可选的,本发明实施例中,第一处理器801还用于:
设定第一预设时长阈值作为至少一个消息队列中的每个的最大存在时长;所述消息队列用于存放替换更新消息。
可选的,本发明实施例中,第一处理器801还用于:
在设定第一预设时长阈值作为所述至少一个消息队列中的每个的最大存在时长之后,若第一处理器801在还未到达所述第一预设时长阈值时接收到对应于第二消息队列的无效信息,则将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第二预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值大于所述第二预设时长阈值;或
在设定第一预设时长阈值作为所述至少一个消息队列中的每个的最大存在时长之后,若第一处理器801在到达所述第一预设时长阈值时还未接收到对应于第二消息队列的无效信息,则将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第三预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值小于所述第三预设时长阈值。
可选的,本发明实施例中,第二处理器802具体用于:
接收第一处理器801发送的第五替换更新消息,所述第五替换更新消息为将第一消息队列中包括的部分或全部替换更新消息合并得到的,所述第一替换更新消息参与了合并;所述第一消息队列为用于存放替换更新消息的消息队列。
可选的,本发明实施例中,第二处理器802还用于:
在接收第一处理器801发送的第五替换更新消息之后,解析所述第五替换更新消息,以获取所述部分或全部替换更新消息的内容。
图8所示的多处理器系统的具体架构可参考图1或图2,例如,第一处理器801和第二处理器802可以是通过片上网络进行通信,以及第一处理器801与第二处理器802还可以有自己的缓存等,只是在图8中未示出。
本发明实施例中,装置是用来实现图3、图5流程中的方法的,凡是在装置部分没有详细介绍的内容,均可参照相应的方法流程中的描述。
本发明实施例中,当多处理器系统中第一处理器的缓存中存储的第一数据待被移动到第一处理器的内存中时,第一处理器生成待发送给第二处理器的第一替换更新消息,第一替换更新消息中携带第二数据在第二处理器中的地址,其中,第一数据是副本,第二处理器中存储有与第一数据对应的原始数据(即第二数据),即,如果副本被移动到内存中,那么第一处理器会通知第二处理器,这样第二处理器就知道第一处理器中的副本已经被移走,如果第二处理器中存储的原本也要被移动到内存,则第二处理器无需再通知第一处理器,减少了开销,节省了系统资源。
另外,在第一替换更新消息中携带的是第二数据在第二处理器中的地址,则第二处理器在接收到第一替换更新消息后直接就可以知道第二数据的存放位置,无需再去确定第二数据的存放位置,减少了第二处理器的查找开销,减小处理器的功耗,以及减少了处理时间,提高处理效率。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能单元的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元完成,即将装置的内部结构划分成不同的功能单元,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以对本申请的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明的方法及其核心思想,不应理解为对本发明的限制。本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
Claims (41)
1.一种数据移动方法,其特征在于,包括:
当第一处理器的缓存中存储的第一数据待被移动到所述第一处理器的内存中时,所述第一处理器确定第二数据在第二处理器中的地址;
所述第一处理器生成第一替换更新消息,所述第一替换更新消息中携带所述第二数据在所述第二处理器中的地址;
所述第一处理器将所述第一替换更新消息发送给所述第二处理器;
其中,所述第一处理器和所述第二处理器属于同一多处理器系统,所述第一替换更新消息用于将所述第一数据已移动的信息通知所述第二处理器,所述第二处理器中存储有所述第二数据,所述第一数据为副本,所述第二数据为与所述第一数据对应的原始数据。
2.如权利要求1所述的方法,其特征在于,在所述第一处理器生成第一替换更新消息之后,还包括:
所述第一处理器将所述第一替换更新消息添加到第一消息队列,所述第一消息队列为与所述第二处理器对应的消息队列;所述第一消息队列用于存放替换更新消息。
3.如权利要求2所述的方法,其特征在于,所述第一处理器将所述第一替换更新消息添加到第一消息队列,包括:
所述第一处理器根据所述第二处理器的标识,查询与所述第二处理器对应的消息队列;
所述第一处理器确定所述第一消息队列为与所述第二处理器对应的消息队列,将所述第一替换更新消息添加到所述第一消息队列。
4.如权利要求3所述的方法,其特征在于,在将所述第一替换更新消息添加到所述第一消息队列之前,还包括:
若所述第一消息队列中的剩余空间不够存储所述第一替换更新消息,则所述第一处理器将所述第一消息队列中的部分或全部替换更新消息合并为第二替换更新消息,并将所述第二替换更新消息发送给所述第二处理器。
5.如权利要求3所述的方法,其特征在于,所述第一处理器确定所述第一消息队列为与所述第二处理器对应的消息队列,包括:
若所述第一处理器确定没有与所述第二处理器对应的消息队列,则所述第一处理器查询存在的空消息队列;
所述第一处理器将查询到的一个空消息队列作为与所述第二处理器对应的第一消息队列。
6.如权利要求3所述的方法,其特征在于,所述第一处理器确定所述第一消息队列为与所述第二处理器对应的消息队列,包括:
若所述第一处理器确定没有与所述第二处理器对应的消息队列,则所述第一处理器查询存在的空消息队列;
若所述第一处理器确定没有空消息队列,则所述第一处理器将存在时长最长的消息队列中的全部替换更新消息合并为第三替换更新消息,将所述第三替换更新消息发送给所述存在时长最长的消息队列对应的处理器;
所述第一处理器将所述存在时长最长的消息队列作为与所述第二处理器对应的所述第一消息队列。
7.如权利要求3所述的方法,其特征在于,所述第一处理器确定所述第一消息队列为与所述第二处理器对应的消息队列,包括:
若所述第一处理器确定没有与所述第二处理器对应的消息队列,则所述第一处理器查询存在的空消息队列;
若所述第一处理器确定没有空消息队列,则所述第一处理器将包括的替换更新消息最多的消息队列中的全部替换更新消息合并为第四替换更新消息,并将所述第四替换更新消息发送给所述包括的替换更新消息最多的消息队列对应的处理器;
所述第一处理器将所述包括的替换更新消息最多的消息队列作为与所述第二处理器对应的所述第一消息队列。
8.如权利要求2-7任一所述的方法,其特征在于,所述第一处理器将所述第一替换更新消息发送给所述第二处理器,包括:
所述第一处理器将所述第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息,并将所述第五替换更新消息发送给所述第二处理器;其中,所述第一替换更新消息参与了合并。
9.如权利要求8所述的方法,其特征在于,所述第一处理器将所述第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息,包括:
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息时,所述第一处理器将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息,且有新的替换更新消息需要添加到所述第一消息队列中时,所述第一处理器将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一处理器接收到对应于所述第一消息队列的无效信息时,所述第一处理器将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;所述无效信息用于指示将所述第一消息队列中的一个替换更新消息对应的数据设置为无效;或
在所述第一消息队列存在的时长已达到预设时长阈值时,所述第一处理器将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息。
10.如权利要求1-7任一所述的方法,其特征在于,还包括:
所述第一处理器设定第一预设时长阈值作为至少一个消息队列中的每个的最大存在时长;所述至少一个消息队列中的每个消息队列用于存放替换更新消息。
11.如权利要求10所述的方法,其特征在于,在所述第一处理器设定第一预设时长阈值作为所述至少一个消息队列中的每个的最大存在时长之后,还包括:
若所述第一处理器在还未到达所述第一预设时长阈值时接收到对应于第二消息队列的无效信息,则所述第一处理器将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第二预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值大于所述第二预设时长阈值;或
若所述第一处理器在到达所述第一预设时长阈值时还未接收到对应于第二消息队列的无效信息,则所述第一处理器将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第三预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值小于所述第三预设时长阈值。
12.一种将数据设置为无效的方法,其特征在于,包括:
第二处理器接收第一处理器发送的第一替换更新消息,所述第一替换更新消息用于将第一数据已从所述第一处理器的缓存移动到所述第一处理器的内存的信息通知所述第二处理器,所述第一替换更新消息中携带所述第二处理器中存储的第二数据在所述第二处理器中的地址;
所述第二处理器根据所述第二数据在所述第二处理器中的地址,将所述第一数据对应的信息设置为无效;
其中,所述第一处理器和所述第二处理器属于同一多处理器系统,所述第一数据为副本,所述第二数据为与所述第一数据对应的原始数据。
13.如权利要求12所述的方法,其特征在于,第二处理器接收第一处理器发送的第一替换更新消息,包括:
所述第二处理器接收所述第一处理器发送的第五替换更新消息,所述第五替换更新消息为将第一消息队列中包括的部分或全部替换更新消息合并得到的,所述第一替换更新消息参与了合并;所述第一消息队列为用于存放替换更新消息的消息队列。
14.如权利要求13所述的方法,其特征在于,在所述第二处理器接收所述第一处理器发送的第五替换更新消息之后,还包括:
所述第二处理器解析所述第五替换更新消息,以获取所述部分或全部替换更新消息的内容。
15.一种处理器,其特征在于,包括:
确定模块,用于当所述处理器的缓存中存储的第一数据待被移动到所述处理器的内存中时,确定第二数据在第二处理器中的地址;
生成模块,用于生成第一替换更新消息,所述第一替换更新消息中携带所述第二数据在所述第二处理器中的地址;
发送模块,用于将所述第一替换更新消息发送给所述第二处理器;
其中,所述处理器和所述第二处理器属于同一多处理器系统,所述第一替换更新消息用于将所述第一数据已移动的信息通知所述第二处理器,所述第二处理器中存储有所述第二数据,所述第一数据为副本,所述第二数据为与所述第一数据对应的原始数据。
16.如权利要求15所述的处理器,其特征在于,所述处理器还包括添加模块,用于:
在所述生成模块生成第一替换更新消息之后,将所述第一替换更新消息添加到第一消息队列,所述第一消息队列为与所述第二处理器对应的消息队列;所述第一消息队列用于存放替换更新消息。
17.如权利要求16所述的处理器,其特征在于,所述添加模块具体用于:
根据所述第二处理器的标识,查询与所述第二处理器对应的消息队列;
确定所述第一消息队列为与所述第二处理器对应的消息队列,将所述第一替换更新消息添加到所述第一消息队列。
18.如权利要求17所述的处理器,其特征在于,所述发送模块还用于:
在所述添加模块将所述第一替换更新消息添加到所述第一消息队列之前,若所述第一消息队列中的剩余空间不够存储所述第一替换更新消息,则将所述第一消息队列中的部分或全部替换更新消息合并为第二替换更新消息,并将所述第二替换更新消息发送给所述第二处理器。
19.如权利要求17所述的处理器,其特征在于,所述添加模块具体用于:
若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
将查询到的一个空消息队列作为与所述第二处理器对应的第一消息队列。
20.如权利要求17所述的处理器,其特征在于,
所述添加模块具体用于:若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
所述发送模块还用于:若所述添加模块确定没有空消息队列,则将存在时长最长的消息队列中的全部替换更新消息合并为第三替换更新消息,将所述第三替换更新消息发送给所述存在时长最长的消息队列对应的处理器;
所述添加模块具体用于:将所述存在时长最长的消息队列作为与所述第二处理器对应的所述第一消息队列。
21.如权利要求17所述的处理器,其特征在于,
所述添加模块具体用于:若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
所述发送模块还用于:若所述添加模块确定没有空消息队列,则将包括的替换更新消息最多的消息队列中的全部替换更新消息合并为第四替换更新消息,并将所述第四替换更新消息发送给所述包括的替换更新消息最多的消息队列对应的处理器;
所述添加模块具体用于:将所述包括的替换更新消息最多的消息队列作为与所述第二处理器对应的所述第一消息队列。
22.如权利要求16-21任一所述的处理器,其特征在于,所述发送模块具体用于:
将所述第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息,并将所述第五替换更新消息发送给所述第二处理器;其中,所述第一替换更新消息参与了合并。
23.如权利要求22所述的处理器,其特征在于,所述发送模块具体用于:
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息,且有新的替换更新消息需要添加到所述第一消息队列中时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述处理器接收到对应于所述第一消息队列的无效信息时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;所述无效信息用于指示将所述第一消息队列中的一个替换更新消息对应的数据设置为无效;或
在所述第一消息队列存在的时长已达到预设时长阈值时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息。
24.如权利要求15-21任一所述的处理器,其特征在于,所述处理器还包括设定模块,用于设定第一预设时长阈值作为至少一个消息队列中的每个的最大存在时长;所述至少一个消息队列中的每个消息队列用于存放替换更新消息。
25.如权利要求24所述的处理器,其特征在于,所述处理器还包括更新模块,用于:
若所述处理器在还未到达所述第一预设时长阈值时接收到对应于第二消息队列的无效信息,则将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第二预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值大于所述第二预设时长阈值;或
若所述处理器在到达所述第一预设时长阈值时还未接收到对应于第二消息队列的无效信息,则将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第三预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值小于所述第三预设时长阈值。
26.一种处理器,其特征在于,包括:
接收模块,用于接收第一处理器发送的第一替换更新消息,所述第一替换更新消息用于将第一数据已从所述第一处理器的缓存移动到所述第一处理器的内存的信息通知所述处理器,所述第一替换更新消息中携带所述处理器中存储的第二数据在所述处理器中的地址;
设置模块,用于根据所述第二数据在所述处理器中的地址,将所述第一数据对应的信息设置为无效;
其中,所述第一处理器和所述处理器属于同一多处理器系统,所述第一数据为副本,所述第二数据为与所述第一数据对应的原始数据。
27.如权利要求26所述的处理器,其特征在于,所述接收模块具体用于:
接收所述第一处理器发送的第五替换更新消息,所述第五替换更新消息为将第一消息队列中包括的部分或全部替换更新消息合并得到的,所述第一替换更新消息参与了合并;所述第一消息队列为用于存放替换更新消息的消息队列。
28.如权利要求27所述的处理器,其特征在于,所述处理器还包括解析模块,用于:
在所述接收模块接收所述第一处理器发送的第五替换更新消息之后,解析所述第五替换更新消息,以获取所述部分或全部替换更新消息的内容。
29.一种多处理器系统,其特征在于,包括第一处理器和第二处理器;
所述第一处理器用于:当所述第一处理器的缓存中存储的第一数据待被移动到所述第一处理器的内存中时,确定第二数据在第二处理器中的地址;生成第一替换更新消息,所述第一替换更新消息中携带所述第二数据在所述第二处理器中的地址;将所述第一替换更新消息发送给所述第二处理器;其中,所述第一替换更新消息用于将所述第一数据已移动的信息通知所述第二处理器,所述第二处理器中存储有所述第二数据,所述第一数据为副本,所述第二数据为与所述第一数据对应的原始数据;
所述第二处理器用于:接收所述第一处理器发送的所述第一替换更新消息,根据所述第二数据在所述第二处理器中的地址,将所述第一数据对应的信息设置为无效。
30.如权利要求29所述的系统,其特征在于,所述第一处理器还用于:
在生成第一替换更新消息之后,将所述第一替换更新消息添加到第一消息队列,所述第一消息队列为与所述第二处理器对应的消息队列;所述第一消息队列用于存放替换更新消息。
31.如权利要求30所述的系统,其特征在于,所述第一处理器具体用于:
根据所述第二处理器的标识,查询与所述第二处理器对应的消息队列;
确定所述第一消息队列为与所述第二处理器对应的消息队列,将所述第一替换更新消息添加到所述第一消息队列。
32.如权利要求31所述的系统,其特征在于,所述第一处理器还用于:
在将所述第一替换更新消息添加到所述第一消息队列之前,若所述第一消息队列中的剩余空间不够存储所述第一替换更新消息,则将所述第一消息队列中的部分或全部替换更新消息合并为第二替换更新消息,并将所述第二替换更新消息发送给所述第二处理器。
33.如权利要求31所述的系统,其特征在于,所述第一处理器具体用于:
若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
将查询到的一个空消息队列作为与所述第二处理器对应的第一消息队列。
34.如权利要求31所述的系统,其特征在于,所述第一处理器具体用于:
若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
若确定没有空消息队列,则将存在时长最长的消息队列中的全部替换更新消息合并为第三替换更新消息,将所述第三替换更新消息发送给所述存在时长最长的消息队列对应的处理器;
将所述存在时长最长的消息队列作为与所述第二处理器对应的所述第一消息队列。
35.如权利要求31所述的系统,其特征在于,所述第一处理器具体用于:
若确定没有与所述第二处理器对应的消息队列,则查询存在的空消息队列;
若确定没有空消息队列,则将包括的替换更新消息最多的消息队列中的全部替换更新消息合并为第四替换更新消息,并将所述第四替换更新消息发送给所述包括的替换更新消息最多的消息队列对应的处理器;
将所述包括的替换更新消息最多的消息队列作为与所述第二处理器对应的所述第一消息队列。
36.如权利要求30-35任一所述的系统,其特征在于,所述第一处理器具体用于:
将所述第一消息队列中包括的部分或全部替换更新消息合并为第五替换更新消息,并将所述第五替换更新消息发送给所述第二处理器;其中,所述第一替换更新消息参与了合并。
37.如权利要求36所述的系统,其特征在于,所述第一处理器具体用于:
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一消息队列中没有剩余空间用于存储新的替换更新消息,且有新的替换更新消息需要添加到所述第一消息队列中时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;或
在所述第一处理器接收到对应于所述第一消息队列的无效信息时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息;所述无效信息用于指示将所述第一消息队列中的一个替换更新消息对应的数据设置为无效;或
在所述第一消息队列存在的时长已达到预设时长阈值时,将所述第一消息队列中包括的部分或全部替换更新消息合并为所述第五替换更新消息。
38.如权利要求29-35任一所述的系统,其特征在于,所述第一处理器还用于:
设定第一预设时长阈值作为至少一个消息队列中的每个的最大存在时长;所述至少一个消息队列中的每个消息队列用于存放替换更新消息。
39.如权利要求38所述的系统,其特征在于,所述第一处理器还用于:
在设定第一预设时长阈值作为所述至少一个消息队列中的每个的最大存在时长之后,若所述第一处理器在还未到达所述第一预设时长阈值时接收到对应于第二消息队列的无效信息,则将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第二预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值大于所述第二预设时长阈值;或
在设定第一预设时长阈值作为所述至少一个消息队列中的每个的最大存在时长之后,若所述第一处理器在到达所述第一预设时长阈值时还未接收到对应于第二消息队列的无效信息,则将所述第二消息队列的最大存在时长由所述第一预设时长阈值更新为第三预设时长阈值;其中,所述第二消息队列为所述至少一个消息队列中的任意一个,所述无效信息用于指示将所述第二消息队列中的一个替换更新消息对应的数据设置为无效,所述第一预设时长阈值小于所述第三预设时长阈值。
40.如权利要求29-35任一所述的系统,其特征在于,所述第二处理器具体用于:
接收所述第一处理器发送的第五替换更新消息,所述第五替换更新消息为将第一消息队列中包括的部分或全部替换更新消息合并得到的,所述第一替换更新消息参与了合并;所述第一消息队列为用于存放替换更新消息的消息队列。
41.如权利要求40所述的系统,其特征在于,所述第二处理器还用于:
在接收所述第一处理器发送的第五替换更新消息之后,解析所述第五替换更新消息,以获取所述部分或全部替换更新消息的内容。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510282442.4A CN106293637B (zh) | 2015-05-28 | 2015-05-28 | 数据移动、将数据设置为无效的方法、处理器及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510282442.4A CN106293637B (zh) | 2015-05-28 | 2015-05-28 | 数据移动、将数据设置为无效的方法、处理器及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106293637A CN106293637A (zh) | 2017-01-04 |
CN106293637B true CN106293637B (zh) | 2018-10-30 |
Family
ID=57635799
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510282442.4A Active CN106293637B (zh) | 2015-05-28 | 2015-05-28 | 数据移动、将数据设置为无效的方法、处理器及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106293637B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5136691A (en) * | 1988-01-20 | 1992-08-04 | Advanced Micro Devices, Inc. | Methods and apparatus for caching interlock variables in an integrated cache memory |
US5960461A (en) * | 1987-12-22 | 1999-09-28 | Sun Microsystems, Inc. | Multiprocessor digital data processing system/shared memory multiprocessor system and method of operation |
US6526480B1 (en) * | 1998-12-10 | 2003-02-25 | Fujitsu Limited | Cache apparatus and control method allowing speculative processing of data |
CN101042679A (zh) * | 2006-03-23 | 2007-09-26 | 国际商业机器公司 | 维护存储器一致性的方法和系统 |
CN102346714A (zh) * | 2011-10-09 | 2012-02-08 | 西安交通大学 | 用于多核处理器的一致性维护装置及一致性交互方法 |
CN102929800A (zh) * | 2012-10-17 | 2013-02-13 | 无锡江南计算技术研究所 | Cache一致性协议派生处理方法 |
CN104246726A (zh) * | 2012-04-18 | 2014-12-24 | 高通股份有限公司 | 用于维持高速缓存一致性的只写无数据状态 |
-
2015
- 2015-05-28 CN CN201510282442.4A patent/CN106293637B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5960461A (en) * | 1987-12-22 | 1999-09-28 | Sun Microsystems, Inc. | Multiprocessor digital data processing system/shared memory multiprocessor system and method of operation |
US5136691A (en) * | 1988-01-20 | 1992-08-04 | Advanced Micro Devices, Inc. | Methods and apparatus for caching interlock variables in an integrated cache memory |
US6526480B1 (en) * | 1998-12-10 | 2003-02-25 | Fujitsu Limited | Cache apparatus and control method allowing speculative processing of data |
CN101042679A (zh) * | 2006-03-23 | 2007-09-26 | 国际商业机器公司 | 维护存储器一致性的方法和系统 |
CN102346714A (zh) * | 2011-10-09 | 2012-02-08 | 西安交通大学 | 用于多核处理器的一致性维护装置及一致性交互方法 |
CN104246726A (zh) * | 2012-04-18 | 2014-12-24 | 高通股份有限公司 | 用于维持高速缓存一致性的只写无数据状态 |
CN102929800A (zh) * | 2012-10-17 | 2013-02-13 | 无锡江南计算技术研究所 | Cache一致性协议派生处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106293637A (zh) | 2017-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107612840B (zh) | 一种四层负载均衡设备的数据处理方法及装置 | |
CN105939335B (zh) | 发布-订阅数据处理环境中管理通道所有权的方法和系统 | |
US10097466B2 (en) | Data distribution method and splitter | |
CN105607954B (zh) | 一种有状态容器在线迁移的方法和装置 | |
US9703610B2 (en) | Extensible centralized dynamic resource distribution in a clustered data grid | |
DE112017001762T5 (de) | Technologien für den einsatz dynamischer underlay-netzwerke in cloud-computing-infrastrukturen | |
EP3380937A1 (en) | Techniques for analytics-driven hybrid concurrency control in clouds | |
US9990306B2 (en) | Inter-manycore communications method and system | |
CN107079046A (zh) | 用于为动态云提供子网经管(sa)查询高速缓存的系统和方法 | |
CN112953982B (zh) | 一种服务处理的方法、服务配置的方法以及相关装置 | |
CN110830574B (zh) | 一种基于docker容器实现内网负载均衡的方法 | |
CN104780232B (zh) | 一种资源分配方法、控制器及系统 | |
US8606908B2 (en) | Wake-up server | |
CN112333017B (zh) | 一种服务配置方法、装置、设备及存储介质 | |
CN108989399A (zh) | 一种集群公共数据查询方法、系统、装置及可读存储介质 | |
CN105847352B (zh) | 基于分布式缓存系统的扩容方法、装置及分布式缓存系统 | |
CN106250228A (zh) | 虚拟机实体热迁移网路平滑切换的方法及装置 | |
CN109462511B (zh) | 网络的建立方法及装置 | |
CN109873839A (zh) | 数据访问的方法、服务器与分布式系统 | |
US11146464B2 (en) | Systems and methods for enabling inter-agent multicast domain name system client roaming in wide area network | |
CN109587235A (zh) | 一种基于网络库的数据访问方法、客户端、系统及介质 | |
CN113031874A (zh) | 基于Kubernetes集群的缓存处理方法、装置、设备及存储介质 | |
JP2020502941A (ja) | リソーススケジューリング | |
CN104571934B (zh) | 一种内存访问的方法、设备和系统 | |
EP3360295A1 (en) | State-efficient network function support |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |