CN110083548B - 数据处理方法及相关网元、设备、*** - Google Patents

数据处理方法及相关网元、设备、*** Download PDF

Info

Publication number
CN110083548B
CN110083548B CN201810081760.8A CN201810081760A CN110083548B CN 110083548 B CN110083548 B CN 110083548B CN 201810081760 A CN201810081760 A CN 201810081760A CN 110083548 B CN110083548 B CN 110083548B
Authority
CN
China
Prior art keywords
request
instruction
processor
memory controller
data
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
Application number
CN201810081760.8A
Other languages
English (en)
Other versions
CN110083548A (zh
Inventor
程永波
贺成洪
兰可嘉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201810081760.8A priority Critical patent/CN110083548B/zh
Publication of CN110083548A publication Critical patent/CN110083548A/zh
Application granted granted Critical
Publication of CN110083548B publication Critical patent/CN110083548B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0822Copy directories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请实施例提供了一种数据处理方法及相关元件、设备、***,其中,该数据处理方法包括:第一处理器向内存控制器发送第一请求,所述第一请求中携带有请求地址;所述第一处理器在未确认所述第一请求已完成的情况下,若接收到侦听指令,则在接收到来自所述内存控制器的指示指令后,处理所述侦听指令;其中,所述侦听指令中携带有所述请求地址;所述指示指令用于指示所述第一请求不能被处理,或者所述指示指令用于指示已完成所述第一请求。实施本申请实施例,在多个缓存控制器对同一数据发起请求时避免数据的冲突,进而避免***出错,提高***运行的稳定性。

Description

数据处理方法及相关网元、设备、***
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种数据处理方法及相关网元、设备、***。
背景技术
由于单个处理器(Central Processing Unit,CPU)核的性能提升在多年前已经达到了瓶颈,因此目前在大多数高性能处理器设计中都采用了增加处理器核数的方法,以增加处理器性能。在多个处理器核***中,为了提升性能处理器核中可以包括一或两级缓冲存储器(Cache,也称缓存),这些缓冲存储器可以通过总线访问***中的主存。通常多处理器核***都是具有缓存一致性的***,一个常见的一致性多核处理器(Coherence Multi-Processor,CMP)***可如图1所示。
其中,CMP***中的缓存控制器(Cache Agent,简称CA),如缓存Cache0~Cachen可以访问***中统一编码的主存***。假设初始状态为Cache0缓存了数据A的共享态副本,目录指向Cache0共享该数据A。Cache1请求数据A的独占态副本,Cache1的请求到达内存控制器(Home Agent,HA),内存控制器向Cache0发起侦听;该情况下,若Cache0也发起对数据A的独占态副本的请求,那么该Cache0的请求与该Cache1的请求会存在冲突,如果不处理该冲突,很可能会导致***出错。
因此,在处理同一数据时,如何有效解决冲突是本领域技术人员正在研究的问题。
发明内容
本申请实施例所要解决的技术问题在于,提供一种数据处理方法及相关元件、设备、***,在多个缓存控制器对同一数据发起请求时避免数据的冲突,进而避免***出错,提高***运行的稳定性。
第一方面,本申请实施例提供了一种数据处理方法,应用于第一处理器,包括:
所述第一处理器向内存控制器发送第一请求,所述第一请求中携带有请求地址;
所述第一处理器在未确认所述第一请求已完成的情况下,若接收到侦听指令,则在接收到来自所述内存控制器的指示指令后,处理所述侦听指令;其中,所述侦听指令中携带有所述请求地址;所述指示指令用于指示所述第一请求不能被处理,或者所述指示指令用于指示已完成所述第一请求。
在一种可选的实现方式中,所述接收到侦听指令之后,以及接收来自所述内存控制器的指示指令之前,所述方法还包括:
所述第一处理器确定所述侦听指令处于阻塞状态。
在一种可选的实现方式中,在所述指示指令用于指示所述第一请求不能被处理的情况下,所述方法还包括:
所述第一处理器接收来自所述内存控制器的重新请求指令后,重新向所述内存控制器发送所述第一请求。
在一种可选的实现方式中,在所述第一请求为写请求的情况下,所述指示指令用于指示已完成所述第一请求。
通过执行上述方法,在第一处理器所发出的第一请求与该第一处理器所接收到的侦听指令冲突的情况下,该第一处理器可以暂停处理该侦听指令,直到接收到内存控制器发送的指示指令后,处理该侦听指令,实施本申请实施例,可以有效解决数据冲突,维护了数据的一致性,避免***出错,提高***运行的稳定性。
而且本申请实施例中,若第一处理器接收到的指示指令用于指示该第一请求不能被处理,则可以确定内存控制器在处理第二请求,从而该第一处理器可以处理接收到的侦听指令;而若该第一处理器接收到的指示指令用于指示已完成该第一请求,则在该第一请求不为写请求的情况下,可以确定该内存控制器已处理完第一请求,只不过由于报文乱序等原因导致侦听指令先到达第一处理器,通过实施本身实施例,还可以解决由于报文乱序而导致的数据冲突。
第二方面,本申请实施例还提供了一种数据处理方法,应用于内存控制器,包括:
内存控制器接收第二处理器发送的第二请求,所述第二请求中携带有请求地址;
在所述内存控制器未完成所述第二请求的情况下,若接收到第一处理器发送的第一请求,则向所述第一处理器发送指示指令;其中,所述第一请求中携带有所述请求地址;所述指示指令用于指示所述第一请求不能被处理,或者所述指示指令用于指示已完成所述第一请求。
在一个可选的实现方式中,在所述指示指令用于指示所述第一请求不能被处理的情况下,所述方法还包括:
在所述内存控制器已完成所述第二请求后,向所述第一处理器发送重新请求指令,所述重新请求指令用于指示重新发送所述第一请求。
在一个可选的实现方式中,在所述第一请求为写请求的情况下,所述指示指令用于指示已完成所述第一请求。
在一个可选的实现方式中,所述方法还包括:
在所述内存控制器已完成所述第二请求的情况下,若接收到所述第一处理器发送的第一请求,则处理所述第一请求。
通过执行上述方法,内存控制器接收第二处理器发送的第二请求,并在未完成该第二请求的情况下,若接收到第一处理器发送的第一请求,则通过向第一处理器发送指示指令,可以明确告知该第一处理器该第一请求的处理状态,使得该第一处理器可以得知该第一请求是否被处理等,从而可以避免第一请求和第二请求的数据冲突情况,有效解决了数据冲突,维护了数据的一致性,进而避免了***出错,提高了***运行的稳定性。
第三方面,本申请实施例还提供了一种数据处理方法,应用于多处理器设备或***,包括:
第二处理器向内存控制器发送第二请求,所述第二请求中携带有请求地址;
第一处理器向所述内存控制器发送第一请求,所述第一请求中携带有所述请求地址;
所述内存控制器接收所述第二请求,以及在所述内存控制器未完成所述第二请求的情况下,若接收到所述第一请求,则向所述第一处理器发送指示指令;其中,所述指示指令用于指示所述第一请求不能被处理,或者所述指示指令用于指示已完成所述第一请求;
所述第一处理器在未确认所述第一请求已完成的情况下,若接收到针对所述第二请求的侦听指令,则在接收到所述指示指令后,处理所述侦听指令。
在一个可选的实现方式中,在所述指示指令用于指示所述第一请求不能被处理的情况下,所述方法还包括:
在所述内存控制器已完成所述第二请求后,向所述第一处理器发送重新请求指令,所述重新请求指令用于指示重新发送所述第一请求;
所述第一处理器接收到所述重新请求指令后,重新向所述内存控制器发送所述第一请求。
在一个可选的实现方式中,所述接收到针对所述第二请求的侦听指令之后,以及接收所述指示指令之前,所述方法还包括:
所述第一处理器确定所述侦听指令处于阻塞状态。
在一个可选的实现方式中,在所述第一请求为写请求的情况下,所述指示指令用于指示已完成所述第一请求。
在一个可选的实现方式中,所述方法还包括:
在所述内存控制器已完成所述第二请求的情况下,若接收到所述第一请求,则处理所述第一请求。
执行上述方法,可以避免第一请求和第二请求的数据冲突情况,有效解决了数据冲突,维护了数据的一致性,进而避免了***出错,提高了***运行的稳定性。
第四方面,本申请实施例还提供了一种处理器,包括:
发送单元,用于向内存控制器发送第一请求,所述第一请求中携带有请求地址;
处理单元,用于在未确认所述第一请求已完成的情况下,若接收到侦听指令,则在接收到指示指令后,处理所述侦听指令;其中,所述侦听指令中携带有所述请求地址,所述指示指令用于指示所述第一请求不能被处理,或者所述指示指令用于指示已完成所述第一请求。
在一个可选的实现方式中,所述处理器还包括:
确定单元,用于确定所述侦听指令处于阻塞状态。
在一个可选的实现方式中,所述处理器还包括:
接收单元,用于接收来自所述内存控制器的重新请求指令;
所述发送单元,还用于在所述接收单元接收到所述重新请求指令后,重新向所述内存控制器发送所述第一请求。
在一个可选的实现方式中,在所述第一请求为写请求的情况下,所述指示指令用于指示已完成所述第一请求。
第五方面,本申请实施例还提供了一种内存控制器,包括:
接收单元,用于接收第二处理器发送的第二请求,所述第二请求中携带有请求地址;
发送单元,用于在未完成所述第二请求的情况下,若接收到第一处理器发送的第一请求,则向所述第一处理器发送指示指令;其中,所述第一请求中携带有所述请求地址;所述指示指令用于指示所述第一请求不能被处理,或者所述指示指令用于指示已完成所述第一请求。
在一个可选的实现方式中,在所述指示指令用于指示所述第一请求不能被处理的情况下,
所述发送单元,还用于在已完成所述第二请求后,向所述第一处理器发送重新请求指令,所述重新请求指令用于指示重新发送所述第一请求。
在一个可选的实现方式中,在所述第一请求为写请求的情况下,所述指示指令用于指示已完成所述第一请求。
在一个可选的实现方式中,所述内存控制器还包括:
处理单元,用于在已完成所述第二请求的情况下,若接收到所述第一处理器发送的第一请求,则处理所述第一请求。
第六方面,本申请实施例还提供了一种多处理器设备或***,包括:第一处理器、第二处理器和内存控制器,其中,
所述第二处理器,用于向所述内存控制器发送第二请求,所述第二请求中携带有请求地址;
所述内存控制器,用于接收所述第二请求,以及在所述内存控制器未完成所述第二请求的情况下,若接收到所述第一处理器发送的第一请求,则向所述第一处理器发送指示指令;其中,所述第一请求中携带有所述请求地址,所述指示指令用于指示所述第一请求不能被处理,或者所述指示指令用于指示已完成所述第一请求;
所述第一处理器,用于向所述内存控制器发送所述第一请求;以及在未确认所述第一请求已完成的情况下,若接收到侦听指令,则在接收到所述指示指令后,处理所述侦听指令,其中,所述侦听指令为所述第二请求的侦听指令。
在一个可选的实现方式中,在所述指示指令用于指示所述第一请求不能被处理的情况下,
所述内存控制器,还用于在已完成所述第二请求后,向所述第一处理器发送重新请求指令,所述重新请求指令用于指示重新发送所述第一请求;
所述第一处理器,用于在接收到重新请求指令后,重新向所述内存控制器发送所述第一请求。
在一个可选的实现方式中,在所述第一请求为写请求的情况下,所述指示指令用于指示已完成所述第一请求。
在一个可选的实现方式中,所述内存控制器,还用于在已完成所述第二请求的情况下,若接收到所述第一请求,则处理所述第一请求。
第七方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被多处理器设备或***的处理器执行时,使所述多处理器设备或***的处理器执行上述第一方面或者第一方面的任意一种可能实现方式所描述的方法。
第八方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被多处理器设备或***的内存控制器执行时,使所述多处理器设备或***的内存控制器执行上述第二方面或第二方面任意一种可能实现方式所描述的方法。
第九方面,本申请实施例还提供了一种计算机程序产品,当所述计算机程序产品在多处理器设备或***上运行时,使第一方面或第一方面的任意一种可能的实现方式得以实现,和/或者使第二方面或第二方面的任意一种可能的实现方式得以实现。
附图说明
为了更清楚地说明本申请实施例或背景技术中的技术方案,下面将对本申请实施例或背景技术中所需要使用的附图进行说明。
图1是本申请涉及的一致性多核处理器***;
图2是本申请实施例提供的一种多处理器设备的示意性框图;
图3是本申请实施例提供的一种MESI协议中状态转变的第一示意性说明图;
图4是本申请实施例提供的一种MESI协议中状态转变的第二示意性说明图;
图5是本申请实施例提供的一种MESI协议中状态转变的第三示意性说明图;
图6是本申请实施例提供的一种MESI协议中状态转变的第四示意性说明图;
图7是本申请实施例提供的一种内存控制器中数据处理方法的流程示意图;
图8是本申请实施例提供的另一种内存控制器中数据处理方法的流程示意图;
图9是本申请实施例提供的又一种内存控制器中数据处理方法的流程示意图;
图10是本申请实施例提供的一种处理器中数据处理方法的流程示意图;
图11是本申请实施例提供的另一种处理器中数据处理方法的流程示意图;
图12是本申请实施例提供的一种数据处理方法的流程示意图;
图13是本申请实施例提供的一种数据处理方法的具体流程示意图;
图14是本申请实施例提供的另一种数据处理方法的具体流程示意图;
图15是本申请实施例提供的又一种数据处理方法的具体流程示意图;
图16A是本申请实施例提供的一种处理器的结构示意图;
图16B是本申请实施例提供的另一种处理器的结构示意图;
图17A是本申请实施例提供的一种内存控制器的结构示意图;
图17B是本申请实施例提供的另一种内存控制器的结构示意图;
图18是本申请实施例提供的一种多处理器设备的结构示意图;
图19是本申请实施例提供的一种多处理器***的结构示意图。
具体实施方式
下面结合本申请实施例中的附图对本申请实施例进行描述。
在多处理器设备或***中,每个处理器可以包括一或两级缓存存储器(Cache,本申请中也称高速缓存),同一个数据的多个副本可以同时存在于不同的缓存存储器中。若各处理器自由修改其本地的副本,会导致不同处理器对同一个数据观察到的结果不一致,另外处理器对主存的修改也会导致数据的不一致,为解决不一致的问题引入一致性协议,例如MESI(Modified Exclusive Shared Or Invalid)协议。
其中,MESI协议定义了缓存行(Cache line)的四种状态,包括修改态(Modified,简称M态)、独占态(Exclusive,简称E态)、共享态(Shared,简称S态)、无效态(Invalid,简称I态),以说明缓存行中数据的状态(具体可参见具体实施方式中相关描述)。当处理器针对请求地址对应的数据发起读/写请求时,包含该数据的缓存行的状态或被分配的无效态缓存行的状态可能会发生转变。
基于此,本申请实施例提供了一种数据处理方法,能够有效维护协议的一致性。
下面对本申请实施例涉及的多处理器设备进行概述:
请参阅图2,图2是本申请实施例提供的一种多处理器设备的示意性框架图。一种多处理器设备包括多个处理器、存储器***以及总线,各个处理器通过总线连接到存储器***。各个处理器可以包括缓存存储器(Cache)和缓存控制器。存储器***包括内存(也称主存(main memory))和内存控制器。
可以理解,该存储器***还可以包括硬盘等,本申请不作限定。
其中,缓存存储器(Cache),本申请中也可称缓冲存储器,或者也可称为高速缓冲存储器,是介于CPU核心与内存之间的小容量的存储器,由静态存储芯片(Static RandomAccess Memory,SRAM)组成,存在多级的分层架构。Cache被分为多个缓存行(Cache line),每个缓存行可以是64比特(byte)、128比特等,缓存行是Cache与下级Cache,或Cache与内存数据交换的最小单位。缓存行可以包括数据区以及标志区;数据区可以包括数据字段用于存储数据,标志区可以包括地址字段、状态字段等。地址字段用于指示数据的内存地址。状态字段用于指示数据的一致性状态,也称缓存行的一致性状态。
各个处理器可以包括多个级别的缓存存储器,比如三级,分别为一级缓存存储器(也称L1Cache)、二级缓存存储器(也称L2Cache)和三级缓存存储器(也称L3Cache)。其中,L1Cache由指令Cache和数据Cache组成,L2Cache或L3Cache可以包括数据和指令,L1Cache和L2Cache为每个CPU独有,L3Cache可以为多个CPU中共享。
缓存控制器用于管理本Cache中缓存行的数据和状态,以及向内存控制器发送请求以及接收数据、指令等。可以理解,Cache的缓存控制器除负责响应自己CPU的读/写请求外,还负责监听总线上其他Cache的读写操作并对自己的Cache予以相应处理。可以理解的是,在具体实现中,该缓存控制器可以用于统一管理一级缓存存储器、二级缓存存储器和三级缓存存储器;或者,一级缓存存储器、二级缓存存储器和三级缓存存储器也可以分别对应一个缓存控制器等,本申请实施例对该缓存控制器的具体实现方式不作唯一性限定。
可以理解的是,本申请实施例中第一处理器所执行的实现方式具体可以理解为由第一处理器中的缓存控制器来执行,以及第二处理器所执行的实现方式可以理解为由第二处理器中的缓存控制器来执行。
内存控制器用于管理所有Cache中缓存行的数据和状态,以及向缓存控制器发送请求、数据、指令等,以及接收请求、数据、指令。可以理解,内存控制器除负责响应所有Cache的控制器发送的请求,还向总线发送侦听指令,以使所有的Cache的缓存控制器监听其他Cache的读写操作并对自己的Cache予以相应处理。缓存控制器或内存控制器所有的处理过程都要维护Cache一致性协议,以及符合一致性协议的转换规则。可以理解的是,本申请实施例中称HA为内存控制器,该HA也可以称为内存代理,或共享缓存等等,对于该HA的名称本申请实施例不作唯一性限定,同时,本申请实施例中的内存控制器也不应理解为具有限定意义。
可以理解的是,本申请实施例可以应用于单独的多处理器设备,也可以应用于多个设备组成的多处理器***。该多处理器***可以包括至少一个处理设备以及存储器***,该处理设备包括至少一个处理器,该处理器包括至少一个Cache,存储器***包括内存以及内存控制器。
下面对本申请实施例涉及的一致性协议进行概述:
MESI协议定义了缓存行(Cache line)的至少以下四种状态:
修改态(Modified):也称M态,缓存行的数据有效,数据被修改,与内存中的数据不一致,数据只存在于本Cache中。也就是说,本Cache中的数据有效,而内存中的数据无效。
独占态(Exclusive):也称E态,缓存行的数据有效,数据和内存中的数据一致,数据只存在于本Cache中。也就是说,本Cache独占该数据的权限,且该数据未修改过,与内存中的数据相同。
共享态(Shared):也称S态,缓存行的数据有效,数据和内存中的数据一致,数据可以存在于多个Cache中。也就是说,多个Cache都缓存了该数据,且内存中的数据有效。
无效态(Invalid):也称I态,缓存行不含有效数据。或者说,Cache中无该数据。
需要说明的是,本申请实施例仅是以MESI协议为例来说明,本申请实施例所述的Cache冲突处理方法还可以应用于其他的Cache一致性协议,比如由MESI演化的MOESI(Modified Owned Exclusive Shared Or Invalid)协议、MESIF(Modified ExclusiveShared Invalid and Forwarding)协议等,对此,本申请实施例不作限定。
下面介绍本申请实施例涉及的请求、侦听指令、侦听响应、数据响应以及数据完成响应等:
缓存控制器发起的请求:
独占请求(Read Exclusive,简称RdE):携带请求地址,用于请求对内存中该请求地址对应的数据独占,独占请求完成后,缓存行读入该请求地址对应的数据且状态为E态或M态。
共享请求(Read Shared,简称RdS):携带请求地址,用于请求对内存中该请求地址对应的数据共享,共享请求完成后,缓存行读入该请求地址对应的数据且状态为S态。
可以理解,MESI协议中若做虚通道划分,则可以划分为读、写、侦听、响应四个虚通道;也就是说读可以通过读虚通道发出去,写通过写虚通道发出去,每种报文类型都有各自确定的虚通道。更形象地来说,就像每个报文是一辆车,虚通道的作用就是让不同类型的车走在不同的车道上。因此,独占请求和共享请求可以通过读虚通道从CA发到HA。
回写请求(Write Back Invalid,简称WbI):携带数据和请求地址,用于请求将携带数据写入到内存中该请求地址对应的存储空间,回写请求完成后,释放该缓存行,缓存行的状态为I态。可以理解,缓存控制器可以代理M态缓存行发出WbI。
其中,该回写请求可以通过写虚通道从CA发到HA,具体发起回写操作的场景可以包括:上级Cache溢出导致Dirty数据回写,或Clean数据丢弃时通知HA刷新目录信息等。其中,Clean数据可以理解为还没被修改的数据,且缓存中和内存中保持一致的数据。
其中,缓存控制器发起的请求,也可以理解为缓存控制器针对其Cache中的数据所发起的请求。
可以理解的是,在具体实现中还可以包括其他请求,如RdI、RdX、WbS、WbE等等,本申请实施例不作一一介绍。其中未详细介绍的请求也可以应用于本申请实施例所描述的数据处理方法。
内存控制器发起的侦听指令:
独占侦听指令(Snoop Exclusive,简称SnpE):用于响应独占请求,携带请求地址,侦听请求地址对应的缓存行,被侦听后,该缓存行为I态。
共享侦听指令(Snoop Shared,简称SnpS):用于响应共享请求,携带请求地址,侦听请求地址对应的缓存行,被侦听后,该缓存行为I态或S态。
具体地,侦听指令由内存控制器发起,通知其他Cache根据侦听类型的要求改变其Cache内数据的状态。可以理解的是,在具体实现中还可以包括其他侦听指令,这里不再一一详述。
缓存控制器针对被侦听的缓存行的侦听指令向内存控制器返回的侦听响应:
I态侦听响应(Response Invalid,简称SnpRspI):用于响应侦听指令,指示被侦听后缓存行处于I态。也可以理解为指示被侦听的Cache保留I态。
S态侦听响应(Response Shared,简称SnpRspS):用于响应侦听指令,指示被侦听后缓存行处于S态。也可以理解为指示被侦听的Cache保留S态。
E态侦听响应(Response Exclusive,简称SnpRspE):用于响应侦听指令,指示被侦听后缓存行处于E态。也可以理解为指示被侦听的Cache保留E态。
I态数据回写响应(Response Invalid Write Back,简称SnpRspIWb):用于响应侦听指令,携带被侦听的缓存行存储的数据,指示内存控制器将携带的数据写回内存,且指示被侦听后缓存行处于I态。也可以理解为侦听响应,被侦听的Cache保留I态,同时回写数据到内存。
E态数据回写响应(Response Exclusive Write Back,简称SnpRspEWb):用于响应侦听指令,携带被侦听的缓存行存储的数据,指示内存控制器将携带的数据写回内存,且指示被侦听后缓存行处于E态。也可以理解为侦听响应,被侦听的Cache保留E态,同时回写数据到内存。
S态数据回写响应(Response Shared Write Back,简称SnpRspSWb):用于响应侦听指令,携带被侦听的缓存行存储的数据,指示内存控制器将携带的数据写回内存,且指示被侦听后缓存行处于S态。也可以理解为侦听响应,被侦听的Cache保留S态,同时回写数据到内存。
需要说明的是,侦听指令与侦听响应消息具有对应关系,缓存控制器响应SnpE的侦听响应消息为SnpRspI或SnpRspIWb;缓存控制器响应SnpS的侦听响应消息为SnpRspS、SnpRspI或SnpRspIWb。
可以理解的是,本申请实施例中回写数据到内存也可以称为回写数据到内存控制器(HA)。
缓存控制器针对发起请求的缓存控制器返回的数据响应:
E态数据响应(Date Response Exclusive,简称RspDateE):用于响应独占请求,携带请求地址,还可以携带内存中请求地址对应的数据,指示缓存控制器将请求地址对应的数据转变为E态。或者也可以理解为指示缓存控制器将被代理发出该独占请求的缓存行读取携带的数据并转变为E态。
S态数据响应(Date Response Shared,简称RspDateS):用于响应共享请求,携带请求地址,还可以携带内存中请求地址对应的数据,指示缓存控制器将请求地址对应的数据转变为S态。或者也可以理解为指示缓存控制器被代理发出该共享请求的缓存行读取携带的数据并转变为S态。
内存控制器针对请求返回的完成响应:
E态数据完成响应(Date Response Exclusive Complete,简称RspDateE_Comp):用于响应独占请求,携带请求地址,还可以携带内存中请求地址对应的数据,指示缓存控制器已完成独占请求。
S态数据完成响应(Date Response Shared Complete,简称RspDateS_Comp):用于响应共享请求,携带请求地址,还可以携带内存中请求地址对应的数据,指示缓存控制器已完成共享请求。
完成响应(Response Complete,简称Rsp_Comp):用于指示完成响应,可以不携带请求地址,以及不携带内存中请求地址对应的数据。
内存控制器向缓存控制器发送的其他指令:
ReqBlock:指示缓存控制器请求不能被处理。
ReqRetry:指示缓存控制器对收到过ReqBlock的请求进行重新发送。
本申请实施例中请求、侦听指令、侦听响应以及数据响应等还可以包括其他形式的请求、侦听指令、侦听响应消息以及数据响应等,本申请实施例不作唯一性限定。可以理解的是,本申请实施例中的请求、侦听指令、侦听响应以及数据响应等不限于上述所介绍的请求、侦听指令、侦听响应以及数据响应。
M、E、S、I状态之间可以转换,下面介绍MESI协议中,各个状态之间转变的实现方式:
处理器向本Cache发送携带请求地址的写/读请求。
在读请求命中的情况下,本缓存控制器将命中的缓存行中的数据返回给CPU,该命中的缓存行的状态不变。
在写请求命中的情况下,本缓存控制器在命中的缓存行写入写请求携带的数据,并修改该命中的缓存行的状态为M态,此时,该命中的缓存行内原数据被替换为写请求携带的数据,若其他Cache中存在该原数据,则该原数据所在的缓存行的状态转变为I态。
在读/写请求未命中的情况下,即本Cache中不存在与请求地址对应的缓存行,也就是说写/读请求的数据不在本Cache中,本缓存控制器分配I态的缓存行,并向内存控制器发送请求,请求读取内存中的数据到该缓存行。
在读请求未命中的情况下,本缓存控制器分配I态的缓存行(比如第一缓存行),并向内存控制器发送请求,请求读取内存中该请求地址对应的数据,并将请求的数据读入到第一缓存行中,且修改该第一缓存行的状态。此时,若其他Cache中存在该数据的副本,则调整该数据所在的缓存行(比如第二缓存行)的状态。
例如,当第二缓存行初始态为M态时,第一缓存行在读入内存中该请求地址对应的数据之前,第二缓存行的缓存控制器需要向内存控制器发送回写请求,以更新内存中请求地址对应的数据,并释放第二缓存行,第二缓存行转变为I态,进而第一缓存读入内存中该请求地址对应的数据,并将转变为E态或S态。
又例如,当第二缓存行初始态为E或S态时,第一缓存行读入内存中该请求地址对应的数据后,第一缓存行和第二缓存行的状态都转变为S态。
其中,第一缓存行(对应CA1)和第二缓存行(对应CA2)的状态都转变为S态,也可以理解为CA1中缓存了请求地址对应的数据的S态,以及CA2缓存了请求地址对应的数据的S态。又如第二缓存行出初始态为E或S态,也可以理解为CA2初始缓存了请求地址对应的数据的E态或S态。
在写请求未命中的情况下,本缓存控制器分配I态的缓存行(比如第一缓存行),并将写请求携带的数据读入到第一缓存行中,且修改该第一缓存行的状态。此时,若其他Cache中存在该请求地址对应的内存中数据的副本,则调整该数据所在的缓存行(比如第二缓存行)的状态。
例如,若第二缓存行的状态为M态、E态和S态中的一种,第一缓存行将写请求携带的数据读入到第一缓存行中,修改该第一缓存行的状态为M态,第二缓存行的状态转变为I态。
可以理解,状态的转变的实现还可以是其他的实现方式,本申请实施例仅仅以上述描述的实现方式为例来说明,对此,本申请实施例不在赘述。
以下将以CA1和CA2为例通过具体实施场景介绍状态转变的过程:
实施例一:
请参阅图3所示的MESI协议中状态转变的第一示意性说明图。
CA2向HA发送携带请求地址的独占请求RdE,如CA2发起对地址A的RdE请求独占数据;HA当前目录无效,即无其他Cache缓存该数据,则HA从共享缓存(Last Level Cache,LLC)或内存读取该数据并向CA2返回E态数据完成响应RspDataE_Comp,并记录目录信息为CA2处于独占状态E@CA2;CA2收到独占权限的数据响应,即获取该数据及其独占权限;其中,CA2可能进一步修改该数据则变为M态,因此CA2中该数据的状态可能为E态也可能为M态。可以理解的是,上述LLC也可以理解为L3Cache。
基于上述状态转变,以CA2中请求地址对应的数据的状态为E态,以及CA1中请求地址对应的数据的状态为I态的场景来说明状态转变。
CA1对地址A发起RdE请求独占数据,HA查询目录发现CA2拥有地址A对应的数据的独占副本,则向CA2发起携带请求地址的侦听指令SnpE;CA2接收到该侦听指令SnpE后,由于CA1请求独占,所以CA2根据侦听的状态转移表,将本Cache中地址A对应的数据的状态改为无效I,并向HA返回侦听响应SnpRspIWb,表示数据回写到HA;HA将数据回写主存,向CA1返回E态数据完成响应RspDataE_Comp,并修改目录为CA1独占该数据E@CA1。其中,HA向CA1返回的E态数据完成响应RspDataE_Comp可以携带数据。
或者,CA1对地址A发起RdE请求独占数据,CA1向HA发送携带请求地址的独占请求;HA接收到该独占请求后,发起携带请求地址的SnpE;各个缓存控制器侦听到该SnpE,根据各自缓存目录,查找是否存在命中该SnpE的缓存行。若第二缓存行命中,则CA2响应该SnpE。其中第二缓存行的状态E态,则CA2可以释放该第二缓存行,将第二缓存行的状态修改为I态,并向HA发送侦听响应SnpRspIWb;HA接收侦听响应SnpRspIWb,将数据回写主存,向CA1返回独占数据响应RspDataE_Comp;CA1在接收到RspDataE_Comp后将RspDataE_Comp携带的数据读入到第一缓存行,并修改该第一缓存行的状态为E态。其中,本申请实施例中第一缓存行与CA1对应,第二缓存行与CA2对应。可以理解的是,上述提供了两种处理请求的方式,以及两种描述方式,在具体实现中,也可能包含其他请求处理方法,以及其他描述方式等,本申请实施例不作限定。
可以理解的是,在CA1中数据的状态为I态,CA2中数据的状态为S态的情况下,状态转变的实现方式也可以参考上述所描述的实现方式,这里不再赘述。
可以理解的是,若第一缓存行的状态为S态,CA1向HA发起独占请求,则HA向CA1返回RspDataE_Comp时,可以不携带内存中请求地址对应的数据。CA1在接收到RspDataE_Comp后修改该第一缓存行的状态为E态。
可以理解的是,具体实现中HA向其他缓存控制器发送侦听指令时,可以以广播的形式广播该侦听指令,也可以定向地发送该侦听指令给其他缓存控制器等,本申请实施例不作限定。
请参阅图4所示的MESI协议中状态转变的第二示意性说明图。
第一缓存行的状态为I态。CA1向HA发送携带请求地址的RdE;HA接收到RdE后,发起携带请求地址的SnpE;各个缓存控制器侦听到该SnpE,根据各自缓存目录,查找是否存在命中该SnpE的缓存行。若第二缓存行命中,则CA2响应该SnpE。若第二缓存行为M态,则CA2向HA返回携带第二缓存行内存储的数据的SnpRspIWb(表示被侦听的Cache处于I态,同时数据回写到HA),再释放该第二缓存行,将第二缓存行的状态修改为I态;HA接收到该SnpRspIWb后,将SnpRspIWb中携带的数据回写到内存,向CA1返回携带请求地址对应的数据的RspDataE_Comp,并修改目录为CA1独占该数据E@CA1;CA1在接收到RspDataE_Comp后将RspDataE_Comp携带的数据读入到第一缓存行,并修改该第一缓存行的状态为E态。
可以理解的是,若第一缓存行的状态为S态,CA1向HA发起独占请求,则HA向CA1返回RspDataE_Comp时,可以不携带内存中请求地址对应的数据。CA1在接收到RspDataE_Comp后修改该第一缓存行的状态为E态。
实施例二:
请参阅图5所示的MESI协议中状态转变的第三示意性说明图。
假设初始状态为CA2缓存了数据A的M态副本,目录指向CA2独占该数据。此时,CA1发起数据A的共享请求RdS;HA接收到该RdS后,根据目录指示需要侦听CA2,向CA2发送侦听指令SnpS;CA2收到侦听指令后,根据侦听状态转移表,向请求者CA1转发共享态数据RspDataS,并向HA返回侦听响应SnpRspFwdSWb,同时将Dirty的数据写回HA;HA收到侦听响应后结束CA1的请求,向CA1发送完成响应RspComp,并将数据写回主存。
又如第一缓存行的初始状态为I态(图5未示出该情况),CA1向HA发送携带请求地址的RdS;HA接收到RdS后,发起携带请求地址的SnpS;各个缓存控制器侦听到该SnpS,根据各自缓存目录,查找是否存在命中该SnpS的缓存行。若第二缓存行命中,则CA2响应该SnpS。若第二缓存行为S态或E态,则CA2可以将第二缓存行的状态修改为S态,并向HA发送SnpRspS;HA在接收到SnpRspS后,向CA1返回携带内存中请求地址对应数据的RspDataS;CA1在接收到RspDataS后将RspDataS携带的数据读入到第一缓存行,并修改该第一缓存行的状态为S态。
可以理解,若第一缓存行的状态为E态(图5中未示出该情况),CA1可以向HA发送携带请求地址的RdS。由于第一缓存行为E态,故不会出现其他Cache中缓存行命中SnpS的情况;HA可以在进行SnpS侦听后,向CA1发送RspDateS_Comp,HA也可以直接向CA1发送RspDateS_Comp等。
实施例三:
请参阅图6所示的MESI协议中状态转变的第四示意性说明图。
假设初始状态为CA2缓存了数据A的M态副本,目录指向CA2独占该数据。由于Cache溢出等原因,CA2需要将数据A从Cache中清除,数据要回写到HA,发起WbI,HA收到回写请求,完成数据回写操作,并向CA2返回完成响应Rsp_comp结束写请求。
可以理解的是,图3至图6所示的状态转变过程中所传输的指令以及指示的形式仅为一种示例,不应理解为对本申请实施例具有限定意义。
下面介绍内存控制器中数据处理方法:
第一场景:
内存控制器接收到第二请求,在发送针对第二请求的完成响应之前接收到与第二请求相冲突的第一请求,且该第一请求为读请求,内存控制器的数据处理方法如下:
请参阅图7,图7是本申请实施例提供的一种内存控制器中数据处理方法的流程示意图,该数据处理方法至少可包括:
701、内存控制器接收第二处理器发送的第二请求,上述第二请求中携带有请求地址;
本申请实施例中,第二请求可以为读请求,也可以为写请求。其中,在该第二请求为读请求的情况下,该第二请求的请求类型可以为共享请求RdS或独占请求RdE等等。具体地,该第二请求中携带有请求地址,其中,该第二处理器中与该请求地址对应的数据的初始状态可以为M态、E态、S态或I态等中的一种。该初始状态可以理解为第二处理器发送第二请求时,该请求地址中的数据的状态。
其中,在第二请求为读请求的情况下,在内存控制器接收到该第二请求后,可以发送与该第二请求对应的侦听指令。该侦听指令携带有与该第二请求相一致的请求地址,且该侦听指令与该第二请求的请求类型相一致,如第二请求为共享请求RdS,则该侦听指令为共享侦听指令SnpS;若该第二请求为独占请求RdE,则该侦听指令为独占侦听指令SnpE。
其中,内存控制器发送与该第二请求对应的侦听指令包括:内存控制器广播与该第二请求对应的侦听指令。这样多处理器设备中所有Cache的缓存控制器都可以监听到该侦听指令,并根据请求地址以及缓存目录Cache查找是否存在命中该侦听指令的缓存行,若存在则缓存控制器(也即命中的缓存行的代理)可以根据该侦听指令对该缓存行进行相应处理,并在处理完后向内存控制器发送针对该侦听指令的侦听响应消息;若Cache中不存在命中的缓存行,则该Cache的缓存控制器向内存控制器发送针对该侦听指令的侦听响应消息,具体可参见图3至图6中的相关描述,本申请不再赘述。
可选的,该内存控制器也可以不广播该侦听指令,该内存控制器在接收到第二请求后,该内存控制器可以查询目录中与该请求地址对应的数据的缓存,如内存控制器查询目标发现第一处理器中拥有与该请求地址对应的数据,则可以向第一处理器发送该侦听指令,然后该第一胡处理器根据该侦听指令进行相应处理,具体地可参见图3至图6中的相关描述,本申请不再赘述。
702、在上述内存控制器未完成上述第二请求的情况下,若接收到第一处理器发送的第一请求,则向上述第一处理器发送指示指令;其中,上述第一请求中携带有上述请求地址;上述指示指令用于指示上述第一请求不能被处理;
本申请实施例中,在第二请求为读请求的情况下,内存控制器未完成该第二请求的情况至少可以包括该内存控制器未接收到其他处理器(不包括第二处理器)发送的侦听响应,以及包括该内存控制器未向该第二处理器发送数据完成响应等等,本申请实施例不作限定。举例来说,第二请求为独占请求,则内存控制器未完成该第二请求的情况可以包括:该内存控制器未接收到其他处理器发送的侦听响应SnpRspFwdI或SnpRspIWb等;又可以包括:该内存控制器未向第二处理器发送数据完成响应Rsp_Comp或RspDataEWb等。
而在该第二请求为写请求的情况下,该内存控制器未完成该第二请求的情况可以包括该内存控制器未向该第二处理器发送完成响应,如Rsp_Comp等。
其中,第一请求为读请求。在该第一请求为读请求的情况下,该第一请求的请求类型可以为独占请求RdE或者共享请求RdS等等。具体地,该第一请求中携带有请求地址,其中,该第一处理器中与该请求地址对应的数据的初始状态可以为M态、E态、S态或I态等中的一种。该初始状态可以理解为第一处理器发送第一请求时,该请求地址中的数据的状态。
本申请实施例中,在内存控制器未完成第二请求的情况下,又接收到第一请求,则该内存控制器就可以向第一处理器发送指示指令,该指示指令可以指示该第一处理器该第一请求不能被处理,也就是说,该在内存控制器未完成第二请求的情况下,若接收到第一请求,则该内存控制器暂停处理该第一请求,并向第一处理器发送指示指令,还可以避免第一处理器接收到针对第二请求的侦听指令后,第一处理器再重复向内存控制器发送冲突报文等等。具体地,该内存控制器可以通过向第一处理器发送控制报文如ReqBlock,该ReqBlock可以表示第一请求暂时不能处理。
703、在上述内存控制器已完成上述第二请求后,向上述第一处理器发送重新请求指令,上述重新请求指令用于指示重新发送上述第一请求。
本申请实施例中,在内存控制器处理完成第二请求后,便可以处理第一请求,从而该内存控制器通过向第一处理器发送重新请求指令,请求第一处理器对收到指示指令的请求进行重新发送。具体地,该内存控制器可以向第一处理器发送控制报文如ReqRetry,从而使得该第一处理器重新向内存控制器发送第一请求。
实施本申请实施例,一方面,在发生冲突时,有效避免了数据冲突;而且内存控制器通过向第一处理器发送一个指示指令,有效避免了其他的指令交互,减少了报文的处理过程;另一方面,本申请实施例中所有的虚通道不需要保序,便可以正常运行,不会产生死锁,简化了硬件要求,以及简化了***存在动态路由时的设计难度。
第二场景:
内存控制器接收到第二请求,在发送针对第二请求的完成响应之前接收到与第二请求相冲突的第一请求,且该第一请求为写请求,内存控制器的处理方法如下:
801、内存控制器接收第二处理器发送的第二请求,上述第二请求中携带有请求地址;
本申请实施例中,第二请求可以为读请求。该第二请求的请求类型可以为共享请求RdS或独占请求RdE等等。具体地,该第二请求中携带有请求地址,其中,该第二处理器中与该请求地址对应的数据的初始状态可以为M态、E态、S态或I态等中的一种。该初始状态可以理解为第二处理器发送第二请求时,该请求地址中的数据的状态。
其中,在第二请求为读请求的情况下,在内存控制器接收到该第二请求后,可以发送与该第二请求对应的侦听指令。该侦听指令携带有与该第二请求相一致的请求地址,且该侦听指令与该第二请求的请求类型相一致,如第二请求为共享请求RdS,则该侦听指令为共享侦听指令SnpS;若该第二请求为独占请求RdE,则该侦听指令为独占侦听指令SnpE。
其中,内存控制器发送与该第二请求对应的侦听指令包括:内存控制器广播与该第二请求对应的侦听指令。这样多处理器设备中所有Cache的缓存控制器都可以监听到该侦听指令,并根据请求地址以及缓存目录Cache查找是否存在命中该侦听指令的缓存行,若存在则缓存控制器(即命中的缓存行的代理)可以根据该侦听指令对该缓存行进行相应处理,并在处理完后向内存控制器发送针对该侦听指令的侦听响应消息;若Cache中不存在命中的缓存行,则该Cache的缓存控制器向内存控制器发送针对该侦听指令的侦听响应消息,具体可参见图3至图6中的相关描述,本申请不再赘述。
可选的,该内存控制器也可以不广播该侦听指令,该内存控制器在接收到第二请求后,该内存控制器可以查询目录中与该请求地址对应的数据的缓存,如内存控制器查询目标发现第一处理器中拥有与该请求地址对应的数据,则可以向第一处理器发送该侦听指令,然后该第一处理器根据该侦听指令进行相应处理;以及内存控制器查询目录中无其他Cache缓存该数据的情况,具体可参见图3至图6中的相关描述,本申请不再赘述。
802、在上述内存控制器未完成上述第二请求的情况下,若接收到第一处理器发送的第一请求,则向上述第一处理器发送指示指令;其中,上述第一请求中携带有上述请求地址;上述指示指令用于指示已完成上述第一请求。
本申请实施例中,在第二请求为读请求的情况下,内存控制器未完成该第二请求的情况至少可以包括该内存控制器未接收到其他处理器(不包括第二处理器)发送的侦听响应,以及包括该内存控制器未向该第二处理器发送数据完成响应等等,本申请实施例不作限定。举例来说,第二请求为独占请求,则内存控制器未完成该第二请求的情况可以包括:该内存控制器未接收到其他处理器发送的侦听响应SnpRspFwdI或SnpRspIWb等;又可以包括:该内存控制器未向第二处理器发送数据完成响应Rsp_Comp或RspDataEWb等。
其中,第一请求可以为回写请求等,该情况下,该内存控制器可以优先处理该第一请求,从而在处理完成该第一请求后,向第一处理器发送指示指令,该指示指令用于指示该第一处理器已完成该第一请求。也就是说,在内存控制器未完成第二请求的情况下,若接收到第一请求(写请求),则内存控制器可以暂停处理该第二请求,并在第一请求处理完成后向第一处理器发送指示第一请求已完成的指令。具体地,该指示指令可以为完成响应如Rsp_Comp等。从而在该内存控制器完成该第一请求后,处理第二请求。其中,在内存控制器暂停处理第二请求的情况下,该内存控制器还可以向第二处理器发送指示第二请求不能被处理的指令。
本申请实施例中,保证有专门的资源能够处理写请求,避免所有的资源都被读请求占用,而导致回写请求无法处理的情况。
本申请实施例中,若第二请求为写请求,而第一请求也为写请求,则由于有专门的资源处理写请求,因此内存控制器可以按照到达顺序处理第二请求,然后第二请求处理完成后,再处理第一请求;或者,该内存控制器可以在接收到第一请求后,立即处理第一请求等,本申请实施例不作限定。
实施本申请实施例,不仅可以保证回写请求能够被处理,而且还能够处理数据之间的冲突,提高了***性能。
第三场景:
内存控制器接收到第二请求,在发送针对第二请求的数据完成响应之后接收到与第二请求相冲突的第一请求,且第一请求也可以为读请求,也可以为写请求。内存控制器的处理方法如下:
请参阅图9,图9是本申请实施例提供的又一种内存控制器中数据处理方法的流程示意图,该数据处理方法至少可包括:
901、内存控制器接收第二处理器发送的第二请求,上述第二请求中携带有请求地址;
本申请实施例中,第二请求可以为读请求,也可以为写请求。其中,在该第二请求为读请求的情况下,该第二请求的请求类型可以为共享请求RdS或独占请求RdE等等。具体地,该第二请求中携带有请求地址,其中,该第二处理器中与该请求地址对应的数据的初始状态可以为M态、E态、S态或I态等中的一种。该初始状态可以理解为第二处理器发送第二请求时,该请求地址中的数据的状态。
其中,在第二请求为读请求的情况下,在内存控制器接收到该第二请求后,可以发送与该第二请求对应的侦听指令。该侦听指令携带有与该第二请求相一致的请求地址,且该侦听指令与该第二请求的请求类型相一致,如第二请求为共享请求RdS,则该侦听指令为共享侦听指令SnpS;若该第二请求为独占请求RdE,则该侦听指令为独占侦听指令SnpE。
902、在上述内存控制器已完成上述第二请求的情况下,若接收到上述第一处理器发送的第一请求,则处理上述第一请求,上述第一请求中携带有上述请求地址。
本申请实施例中,内存控制器已完成第二请求,可以理解为该内存控制器已向第二处理器发送数据完成响应或完成响应等等。具体可参见前述实施例中的相关描述,这里不再赘述。
其中,在该第一请求为读请求的情况下,内存控制器接收第一请求,然后该内存控制器发送侦听指令,若该内存控制器向第二处理器发送侦听指令后,在第二处理器未接收到内存控制器发送的数据完成响应或完成响应的情况下,先接收到了该侦听指令,则也会导致数据发生冲突,该情况下,第二处理器可以暂停处理该侦听指令,等待接收来自内存控制器的指示该第二请求已完成的指令,从而在接收到该指示第二请求已完成的指令后,处理侦听指令。
下面介绍处理器中数据处理方法:
针对第一场景的数据处理方法,图10所示的场景为第一处理器已发送第一请求,但未接收到内存控制器发送的数据完成响应(或完成响应等)之前接收到与第一请求相冲突的第二请求,且该第一请求为读请求,第一处理器的数据处理方法如下:
请参阅图10,图10是本申请实施例提供的一种处理器中数据处理方法的流程示意图,该数据处理方法至少可包括:
1001、第一处理器向内存控制器发送第一请求,上述第一请求中携带有请求地址;
本申请实施例为与图7对应,因此以第一请求为读请求来说明处理器中的数据处理方法。其中,第一请求的请求类型可以为共享请求RdS或独占请求RdE等等。具体地,该第一请求中携带有请求地址,其中,该第一处理器中与该请求地址对应的数据的初始状态可以为M态、E态、S态或I态等中的一种。该初始状态可以理解为第一处理器发送第一请求时,该请求地址中的数据的状态。
可以理解的是,内存控制器在接收到第一请求后,该内存控制器处理该第一请求的方法还请参见图3至图6以及图7至图9所示的实施例,这里不再赘述。
1002、上述第一处理器在未确认上述第一请求已完成的情况下,若接收到侦听指令,则在接收到来自上述内存控制器的指示指令后,处理上述侦听指令;其中,上述侦听指令中携带有上述请求地址;上述指示指令用于指示上述第一请求不能被处理;
本申请实施例中,侦听指令为与第二请求对应的侦听指令,且该侦听指令中携带有第一请求中所携带的请求地址。也就是说,本申请实施例中,第二请求为读请求,且该读请求命中了第一处理器,该情况下,由于第一处理器已经将第一请求发送出去,且未接收到确认第一请求已完成的指令,因此,该第一处理器可以暂停处理侦听指令,直到接收到来自内存控制器的指示指令后,处理该侦听指令。具体地,该第一处理器可以接收内存控制器发送控制报文如ReqBlock,该ReqBlock可以表示第一请求暂时不能处理。
可选的,上述接收到侦听指令之后,以及接收来自上述内存控制器的指示指令之前,上述方法还包括:
上述第一处理器确定上述侦听指令处于阻塞状态。
本申请实施例中,第一处理器接收到侦听指令后,可以确定该侦听指令处于阻塞状态,即不能处理。其中,第一处理器确定侦听指令处于阻塞状态,以及在该第一处理器接收到来自内存控制器的指示指令后,并可以解除对该侦听指令的阻塞,实施本申请实施例,使得在数据发生冲突时,不需要虚通道保序便可以解决冲突,简化硬件设计。
1003、上述第一处理器接收到来自上述内存控制器的重新请求指令后,重新向上述内存控制器发送上述第一请求。
本申请实施例中,该第一处理器可以接收来自内存控制器的控制报文如ReqRetry,从而该第一处理器重新向内存控制器发送第一请求。
实施本申请实施例,一方面,在发生冲突时,有效避免了数据冲突;而且内存控制器通过向第一处理器发送一个指示指令,有效避免了其他的指令交互,减少了报文的处理过程;另一方面,本申请实施例中所有的虚通道不需要保序,便可以正常运行,不会产生死锁,简化了硬件要求,以及简化了***存在动态路由时的设计难度。
可以理解的是,图10所示的数据处理方法与图7所示的数据处理方法中,第二请求的请求类型有所变化,但是不应理解具有限定意义。
针对第二场景的数据处理方法,图11所示的场景为第一处理器已发送第一请求,但未接收到内存控制器发送的完成响应之前接收到与第一请求相冲突的第二请求,且该第一请求为写请求,第一处理器的数据处理方法如下:
请参阅图11,图11是本申请实施例提供的另一种处理器中数据处理方法的流程示意图,该数据处理方法至少可包括:
1101、第一处理器向内存控制器发送第一请求,上述第一请求中携带有请求地址;
1102、上述第一处理器在未确认上述第一请求已完成的情况下,若接收到侦听指令,则在接收到来自上述内存控制器的指示指令后,处理上述侦听指令;其中,上述侦听指令中携带有上述请求地址;上述指示指令用于指示已完成上述第一请求。
本申请实施例中,在第一处理器发送的请求为写请求的情况下,若该第一处理器未接收到内存控制器发送的指示指令,则该第一处理器可以暂停处理侦听指令,等待接收该指示指令;从而在接收到指示第一请求已完成的指令后,处理该侦听指令。
可选的,上述接收到侦听指令之后,以及接收来自上述内存控制器的指示指令之前,上述方法还包括:
上述第一处理器确定上述侦听指令处于阻塞状态。
本申请实施例中,第一处理器接收到侦听指令后,可以确定该侦听指令处于阻塞状态,即不能处理。其中,第一处理器确定侦听指令处于阻塞状态,以及在该第一处理器接收到来自内存控制器的指示指令后,并可以解除对该侦听指令的阻塞,实施本申请实施例,使得在数据发生冲突时,不需要虚通道保序便可以解决冲突,简化硬件设计。
可以理解的是,本申请实施例中的具体实现方式可以参考前述实施例的相关描述,这里不再赘述。
可以理解的是,图11所示的数据处理方法也可以应用于第一处理器已发送第一请求,但未接收到内存控制器发送的完成响应之前接收到与第一请求相冲突的第二请求,且内存控制器已完成该第一请求,可能由于虚通道不同,导致报文乱序等其他原因,而使得与第二请求对应的侦听指令先到达该第一处理器的场景。
即在第一请求为读请求的情况下,也可以应用图11所示的数据处理方法。具体可以参见图9所示的数据处理方法,这里不再赘述。
下面从多个缓存控制器和内存控制器交互的角度介绍本申请实施例涉及的针对Cache的数据处理方法:
请参见图12,图12是本申请实施例提供的一种数据处理方法的流程示意图,该方法包括但不限于如下步骤:
1201、第二处理器向内存控制器发送第二请求,上述第二请求中携带有请求地址;
1202、内存控制器接收到该第二请求后,向第一处理器发送侦听指令;
其中,本申请实施例在内存控制器接收到该第二请求后,可以广播侦听指令或者根据目录查询与请求地址对应的数据所在的Cache,从而向相应的处理器发送侦听指令,本申请不作限定。
可以理解的是,本申请实施例是在第二请求命中第一处理器的场景下示出的数据处理方法。而在该第二请求命中其他处理器的情况,也可以执行本申请实施例所提供的数据处理方法,这里不再一一详述。
本申请实施例中,第二请求可以为读请求,该第二请求的请求类型可以为共享请求RdS或独占请求RdE等等。具体地,该第二请求中携带有请求地址,其中,该第二处理器中与该请求地址对应的数据的初始状态可以为M态、E态、S态或I态等中的一种。该初始状态可以理解为第二处理器发送第二请求时,该请求地址中的数据的状态。
其中,在内存控制器接收到该第二请求后,可以发送与该第二请求对应的侦听指令。该侦听指令携带有与该第二请求相一致的请求地址,且该侦听指令与该第二请求的请求类型相一致,如第二请求为共享请求RdS,则该侦听指令为共享侦听指令SnpS;若该第二请求为独占请求RdE,则该侦听指令为独占侦听指令SnpE。
1203、第一处理器向上述内存控制器发送第一请求,上述第一请求中携带有上述请求地址;
本申请实施例中,第一请求可以为读请求,且该第一请求的请求类型可以为独占请求RdE或者共享请求RdS等等。具体地,该第一请求中携带有请求地址,其中,该第一处理器中与该请求地址对应的数据的初始状态可以为M态、E态、S态或I态等中的一种。该初始状态可以理解为第一处理器发送第一请求时,该请求地址中的数据的状态。
1204、第一处理器已发送第一请求后,接收到侦听指令的情况下,确定该侦听指令处于阻塞状态,即阻塞该侦听指令;
1205、在上述内存控制器未完成上述第二请求的情况下,接收上述第一请求,并向上述第一处理器发送指示指令;其中,上述指示指令用于指示上述第一请求不能被处理;
1206、上述第一处理器接收到用于指示第一请求不能被处理的指示指令后,解除对侦听指令的阻塞;
1207、解除对侦听指令的阻塞后,处理上述侦听指令,如向内存控制器发送针对侦听指令的侦听响应;
可以理解的是,该侦听响应与侦听指令具有对应关系;如侦听指令为共享侦听指令,则该侦听响应可以为I态侦听响应或S态侦听响应等等;又如侦听指令为共享侦听指令,则侦听响应可以为I态侦听响应等等。
1208、内存控制器接收到侦听响应后,向第二处理器发送数据完成响应;
1209、在上述内存控制器已完成上述第二请求后,即在该内存控制器向第二处理器发送数据完成响应后,向上述第一处理器发送重新请求指令,上述重新请求指令用于指示重新发送上述第一请求;
1210、上述第一处理器接收到上述重新请求指令后,重新向上述内存控制器发送上述第一请求;
1211、内存控制器重新接收到第一请求后,处理该第一请求。
可以理解的是,图12所示的数据处理方法是以内存控制器先接收到第二请求,后接收到第一请求的情况下示出的方法,在具体实现中,该内存控制器可能先接收到第一请求,因此,本申请实施例示出的数据处理方法不应理解为对本申请实施例具有限定意义。
实施本申请实施例,一方面,在发生冲突时,有效避免了数据冲突;而且内存控制器通过向第一处理器发送一个指示指令,有效避免了其他的指令交互,减少了报文的处理过程;另一方面,本申请实施例中所有的虚通道不需要保序,便可以正常运行,不会产生死锁,简化了硬件要求,以及简化了***存在动态路由时的设计难度。
下面结合具体实施例介绍图7至12所示的Cache一致性协议中冲突处理方法:
请参阅图13,图13是本申请实施例提供的一种数据处理方法的具体流程示意图,如图13所示,该数据处理方法如下所示:
假设初始状态为CA1缓存了数据A的S共享态副本,目录指向CA1共享该数据A。
1301、CA2请求数据A的独占态副本,向HA发送独占请求RdE;
1302、独占请求RdE到达HA,HA根据目录需要向CA1发侦听,将其共享态副本无效掉,因此向CA1发送侦听指令SnpE;
1303、CA1也请求数据A的独占态副本,向HA发送独占请求RdE;
1304、侦听指令SnpE到达CA1,由于CA1也发起了相同地址的请求,存在冲突,因此本申请实施例中采用读阻塞侦听的方式处理,即侦听命中相同地址的读请求时,被CA1阻塞,不能处理;
1305、HA收到CA1的独占请求,由于CA2的读请求在处理,因此后到的请求不能处理,向CA1返回ReqBlock,表示CA1的请求暂时不能处理;
1306、CA1收到ReqBlock确认自己的请求还没有处理,也就相当于CA1的独占请求根本就没发出去,此时解除对相同地址侦听的阻塞,根据侦听协议状态转移表,返回侦听响应SnpRspI;
1307、HA收到侦听响应SnpRspI,结束CA2的请求,返回数据完成响应RspDataE_Comp;
1308、由于HA对CA1的独占请求进行了ReqBlock,因此在返回数据完成响应后解除阻塞,向CA1发起ReqRetry,表示CA1可以重新发起之前被阻塞的请求;
1309、CA1收到ReqRetry,重新发起之前被阻塞的请求,向HA发送独占请求RdE;
1310、HA接收到CA1的独占请求后,向CA2发送侦听指令SnpE;
1311、CA2接收到侦听指令SnpE后,处理该侦听指令,向CA1发送E态数据响应RspDataE;
1312、CA2向HA返回侦听响应SnpRspFwdI,表示已向请求者(CA1)转发了数据,且被侦听的Cache保留I态;
1313、HA接收到侦听响应SnpRspFwdI后,向CA1返回完成响应Rsp_Comp,表示处理已完成。
可以理解的是,在步骤1309后,若出现其他冲突,则HA还可以依据本申请实施例所提供的数据处理方法进行处理。
实施本申请实施例,一方面,在发生冲突时,有效避免了数据冲突;另一方面,本申请实施例中所有的虚通道不需要保序,便可以正常运行,不会产生死锁,简化了硬件要求,以及简化了***存在动态路由时的设计难度。另外,本申请实施例内存控制器通过发送ReqBlock和ReqRetry,能够解除读请求对侦听的阻塞,解决读请求冲突;还能够指示CA1重新发送第一请求,有效解决了冲突,完善了冲突的处理机制。
可选的,参阅图14,图14是本申请实施例提供的另一种数据处理方法的具体流程示意图,该流程示意图是在CA1的请求已被HA处理,数据完成响应或完成响应正在返回CA1,只是由于虚通道不同,报文乱序,导致CA2请求的侦听指令先到达CA1而导致的冲突。
如图14所示,该数据处理方法如下所示:
1401、CA1向HA发送独占请求;
1402、HA收到CA1的独占请求,并且已经正常处理结束,返回了数据完成响应RspDataE_Comp;
1403、CA2向HA发送独占请求,请求独占数据A;
1404、HA收到CA2对数据A的独占请求,根据目录HA向CA1发起独占侦听指令;
1405、侦听在CA1处命中了相同地址的读请求没有结束,因此该侦听被阻塞;
1406、数据完成响应RspDataE_Comp返回至CA1,CA1的请求结束,同时被阻塞的侦听可以正常响应,根据侦听状态转移表返回侦听响应SnpRspIWb;
1407、HA向CA2发送数据完成响应RspDataE_Comp.
可以理解的是,图13和图14分别是本申请实施例处理冲突的两种主要场景,存在冲突时,要么请求没有被处理,则请求者收到ReqBlock解除对冲突侦听的阻塞,要么请求已经被处理完成,则请求者收到数据响应后解除对冲突侦听的阻塞。
可选的,参阅图15,图15是本申请实施例提供的又一种数据处理方法的具体流程示意图,如图15所示,该数据处理方法包括:
假设初始状态为CA2缓存了数据A的M态副本,目录指向CA2独占该数据A。
1501、CA2发起了数据A的回写请求WbI;
1502、CA1向HA发起对数据A的共享请求RdS;
1503、HA接收CA1的共享请求RdS,且该共享请求先到达HA,HA根据目录向CA2发起侦听,即向CA2发送侦听指令SnpS;
1504、侦听到达CA2,由于CA2正在进行回写,即侦听在CA2上命中了相同地址的回写,则回写阻塞该侦听不能进行处理;
1505、回写请求WbI到达HA,回写必须有专门的资源保证在HA能够处理结束,且不会被读请求返回,即回写不依赖于读操作,则回写结束后HA返回完成响应Rsp_Comp;
1506、CA2收到回写完成响应,结束对同地址侦听的阻塞,返回侦听响应SnpRspI;
1507、HA收到侦听响应向请求者CA1返回数据完成响应RspDataS_Comp。
实施本申请实施例,除了HA需要保证回写不能被读阻塞之外,所有虚通道不需要预处理资源,有效提高了资源利用率。
上述详细阐述了本申请实施例的方法,下面提供了本申请实施例涉及的元件、设备、***。
请参阅图16A,图16A是本申请实施例提供的一种处理器的结构示意图,该处理器可用于执行本申请实施例所提供的数据处理方法,如图16A所示,该处理器至少包括:
发送单元1601,用于向内存控制器发送第一请求,上述第一请求中携带有请求地址;
处理单元1602,用于在未确认上述第一请求已完成的情况下,若接收到侦听指令,则在接收到指示指令后,处理上述侦听指令;其中,上述侦听指令中携带有上述请求地址;上述指示指令用于指示上述第一请求不能被处理,或者上述指示指令用于指示已完成上述第一请求。
通过执行上述方法,在第一处理器所发出的第一请求与该第一处理器所接收到的侦听指令冲突的情况下,该第一处理器可以暂停处理该侦听指令,直到接收到内存控制器发送的指示指令后,处理该侦听指令,实施本申请实施例,可以有效解决数据冲突,维护了数据的一致性,避免***出错,提高***运行的稳定性。
而且本申请实施例中,若第一处理器接收到的指示指令用于指示该第一请求不能被处理,则可以确定内存控制器在处理第二请求,从而该第一处理器可以处理接收到的侦听指令;而若该第一处理器接收到的指示指令用于指示已完成该第一请求,则在该第一请求不为写请求的情况下,可以确定该内存控制器已处理完第一请求,只不过由于报文乱序等原因导致侦听指令先到达第一处理器,通过实施本身实施例,还可以解决由于报文乱序而导致的数据冲突。
可选的,如图16B所示,该处理器还包括:
确定单元1603,用于确定上述侦听指令处于阻塞状态。
可选的,如图16B所示,该处理器还包括:
接收单元1604,用于接收来自上述内存控制器的重新请求指令;
上述发送单元1601,还用于在上述接收单元接收到上述重新请求指令后,重新向上述内存控制器发送上述第一请求。
具体地,在上述第一请求为写请求的情况下,上述指示指令用于指示已完成上述第一请求。
其中,图16A和图16B所示的处理器还用于执行本申请实施例中图3至图6、图7至图12以及图13至图15所示的实现方式,这里不再一一详述。
请参阅图17A,图17A是本申请实施例提供的一种内存控制器的结构示意图,该内存控制器可用于执行本申请实施例所提供的数据处理方法,如图17A所示,该内存控制器至少包括:
接收单元1701,用于接收第二处理器发送的第二请求,上述第二请求中携带有请求地址;
发送单元1702,用于在未完成上述第二请求的情况下,若接收到第一处理器发送的第一请求,则向上述第一处理器发送指示指令;其中,上述第一请求中携带有上述请求地址;上述指示指令用于指示上述第一请求不能被处理,或者上述指示指令用于指示已完成上述第一请求。
通过执行上述方法,内存控制器接收第二处理器发送的第二请求,并在未完成该第二请求的情况下,若接收到第一处理器发送的第一请求,则通过向第一处理器发送指示指令,可以明确告知该第一处理器该第一请求的处理状态,使得该第一处理器可以得知该第一请求是否被处理等,从而可以避免第一请求和第二请求的数据冲突情况,有效解决了数据冲突,维护了数据的一致性,进而避免了***出错,提高了***运行的稳定性。
具体地,在上述指示指令用于指示上述第一请求不能被处理的情况下,
上述发送单元,还用于在已完成上述第二请求后,向上述第一处理器发送重新请求指令,上述重新请求指令用于指示重新发送上述第一请求。
具体地,在所述第一请求为写请求的情况下,所述指示指令用于指示已完成所述第一请求。
可选的,如图17B所示,该内存控制器还包括:
处理单元1703,用于在已完成上述第二请求的情况下,若接收到上述第一处理器发送的第一请求,则处理上述第一请求。
其中,图17A和图17B所示的内存控制器还用于执行本申请实施例中图3至图6、图7至图12以及图13至图15所示的实现方式,这里不再一一详述。
请参见图18,图18是本申请实施例提供的一种多处理器设备的架构示意图,该多处理器设备180包括:至少一个处理器(CPU)以及存储***,该至少一个处理器和该存储***通过总线1850互相连接。如图18中,第一处理器、第二处理器和存储***通过总线1850互相连接。
其中,各个处理器包括至少一个Cache,比如第一处理器包括第一Cache1810,第一Cache1810包括第一数据缓存区1811和第一缓存控制器1812,第一数据缓存区1811包括第一缓存行在内的多个缓存行;第二处理器包括第二Cache1820,第二Cache1820包括第二数据缓存区1821和第二缓存控制器1822,第二数据缓存区1821包括第二缓存行在内的多个缓存行。存储***包括内存1830和内存控制器1840。具体地,第一缓存控制器1812、第二缓存控制器1822以及内存控制器1840之间可以通过总线1850通信。
该多处理器设备180可以包括一个多核的处理器,第一Cache1810和第二Cache1820可以位于同一处理器不同的核中,存储***还可以包括其他形式的存储器,本申请不作限定。各个器件的详细描述如下:
上述第二处理器,用于向上述内存控制器发送第二请求,上述第二请求中携带有请求地址;
上述内存控制器1840,用于接收上述第二请求;以及在上述内存控制器未完成上述第二请求的情况下,若接收到上述第一处理器发送的第一请求,则向上述第一处理器发送指示指令;其中,上述第一请求中携带有上述请求地址,上述指示指令用于指示上述第一请求不能被处理,或者上述指示指令用于指示已完成上述第一请求;
上述第一处理器,用于向上述内存控制器发送上述第一请求;以及在未确认上述第一请求已完成的情况下,若接收到侦听指令,则在接收到上述指示指令后,处理上述侦听指令;其中,上述侦听指令为上述第二请求的侦听指令。
在一种可能的实现方式中,在上述指示指令用于指示上述第一请求不能被处理的情况下,
上述内存控制器1840,还用于在已完成上述第二请求后,向上述第一处理器发送重新请求指令,上述重新请求指令用于指示重新发送上述第一请求;
上述第一处理器,用于在接收到上述重新请求指令后,重新向上述内存控制器发送上述第一请求。
在一种可能的实现方式中,在上述第一请求为写请求的情况下,上述指示指令用于指示已完成上述第一请求。
在又一种可能的实现方式中,上述内存控制器1840,还用于在已完成上述第二请求的情况下,若接收到上述第一请求,则处理上述第一请求。
需要说明的是,各个单元的实现还可以对应参照图7至15所示的方法实施例的相应描述。
实施图18所示的多处理器设备,在第一处理器所发出的第一请求与该第一处理器所接收到的侦听指令冲突的情况下,该第一处理器可以暂停处理该侦听指令,直到接收到内存控制器发送的指示指令后,处理该侦听指令,实施本申请实施例,可以有效解决数据冲突,维护了数据的一致性,避免***出错,提高***运行的稳定性。
而且本申请实施例中,若第一处理器接收到的指示指令用于指示该第一请求不能被处理,则可以确定内存控制器在处理第二请求,从而该第一处理器可以处理接收到的侦听指令;而若该第一处理器接收到的指示指令用于指示已完成该第一请求,则在该第一请求不为写请求的情况下,可以确定该内存控制器已处理完第一请求,只不过由于报文乱序等原因导致侦听指令先到达第一处理器,通过实施本身实施例,还可以解决由于报文乱序而导致的数据冲突。
本申请实施例提供一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,该计算机程序包括程序指令,该程序指令当被多处理器设备的处理器执行时,使处理器执行前述实施例所示的方法流程。
具体地,上述程序指令可被处理器执行,实现:
向内存控制器发送第一请求,上述第一请求中携带有请求地址;
在未确认上述第一请求已完成的情况下,若接收到侦听指令,则在接收到来自上述内存控制器的指示指令后,处理上述侦听指令;其中,上述侦听指令中携带有上述请求地址;上述指示指令用于指示上述第一请求不能被处理,或者上述指示指令用于指示已完成上述第一请求。
或者,本申请实施例还提供一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,该计算机程序包括程序指令,该程序指令当被多处理器设备的内存控制器执行时,使内存控制器执行前述实施例所示的方法流程。
具体地,上述程序指令可被内存控制器执行,实现:
接收第二处理器发送的第二请求,上述第二请求中携带有请求地址;
在未完成上述第二请求的情况下,若接收到第一处理器发送的第一请求,则向上述第一处理器发送指示指令;其中,上述第一请求中携带有上述请求地址;上述指示指令用于指示上述第一请求不能被处理,或者上述指示指令用于指示已完成上述第一请求。
上述计算机可读存储介质可以是多处理器设备的内部存储单元,例如硬盘或内存。或者上述计算机可读存储介质也可以是上述多处理器设备的外部存储设备,例如多处理器设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等等。
本申请实施例还提供一种计算机程序产品,当上述计算机程序产品在多处理器设备上运行时,使前述实施例所示的方法流程得以实现。
请参见图19,图19是本申请实施例提供的一种多处理器***的架构示意图,该多处理器***190包括:至少一个处理设备以及存储***,该处理设备包括至少一个处理器(CPU),其中,各个处理设备包括至少一个处理器,该处理器包括至少一个Cache,比如第一处理设备包括第一Cache1910,第一Cache1910包括第一数据缓存区1911和第一缓存控制器1912,第一数据缓存区1911包括第一缓存行在内的多个缓存行;第二处理设备包括第二Cache1920,第二Cache1920包括第二数据缓存区1921和第二缓存控制器1922,第二数据缓存区1921包括第二缓存行在内的多个缓存行。存储***包括内存1930和内存控制器1940。可以理解,存储***可以部署于处理设备中,也可以作为独立设备,各个处理设备和存储***通过总线或者其他通信方式连接等,存储***还可以包括其他形式的存储器,本申请不作限定。各个器件的详细描述如下:
上述第二处理器,用于向上述内存控制器发送第二请求,上述第二请求中携带有请求地址;
上述内存控制器1940,用于接收上述第二请求;以及在上述内存控制器未完成上述第二请求的情况下,若接收到上述第一处理器发送的第一请求,则向上述第一处理器发送指示指令;其中,上述第一请求中携带有上述请求地址,上述指示指令用于指示上述第一请求不能被处理,或者上述指示指令用于指示已完成上述第一请求;
上述第一处理器,用于向上述内存控制器发送上述第一请求;以及在未确认上述第一请求已完成的情况下,若接收到侦听指令,则在接收到上述指示指令后,处理上述侦听指令;其中,上述侦听指令为上述第二请求的侦听指令。
在一种可能的实现方式中,在上述指示指令用于指示上述第一请求不能被处理的情况下,
上述内存控制器1940,还用于在已完成上述第二请求后,向上述第一处理器发送重新请求指令,上述重新请求指令用于指示重新发送上述第一请求;
上述第一处理器,用于在接收到上述重新请求指令后,重新向上述内存控制器发送上述第一请求。
在一种可能的实现方式中,在上述第一请求为写请求的情况下,上述指示指令用于指示已完成上述第一请求。
在又一种可能的实现方式中,上述内存控制器1940,还用于在已完成上述第二请求的情况下,若接收到上述第一请求,则处理上述第一请求。
需要说明的是,各个单元的实现还可以对应参照图7至15所示的方法实施例的相应描述。
实施图19所示的多处理器***,在第一处理器所发出的第一请求与该第一处理器所接收到的侦听指令冲突的情况下,该第一处理器可以暂停处理该侦听指令,直到接收到内存控制器发送的指示指令后,处理该侦听指令,实施本申请实施例,可以有效解决数据冲突,维护了数据的一致性,避免***出错,提高***运行的稳定性。
而且本申请实施例中,若第一处理器接收到的指示指令用于指示该第一请求不能被处理,则可以确定内存控制器在处理第二请求,从而该第一处理器可以处理接收到的侦听指令;而若该第一处理器接收到的指示指令用于指示已完成该第一请求,则在该第一请求不为写请求的情况下,可以确定该内存控制器已处理完第一请求,只不过由于报文乱序等原因导致侦听指令先到达第一处理器,通过实施本身实施例,还可以解决由于报文乱序而导致的数据冲突。
本申请实施例提供一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,该计算机程序包括程序指令,该程序指令当被多处理器***的处理器执行时,使处理器执行前述实施例所示的方法流程。
具体地,上述程序指令可被处理器执行,实现:
向内存控制器发送第一请求,上述第一请求中携带有请求地址;
在未确认上述第一请求已完成的情况下,若接收到侦听指令,则在接收到来自上述内存控制器的指示指令后,处理上述侦听指令;其中,上述侦听指令中携带有上述请求地址;上述指示指令用于指示上述第一请求不能被处理,或者上述指示指令用于指示已完成上述第一请求。
或者,本申请实施例还提供一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,该计算机程序包括程序指令,该程序指令当被多处理器***的内存控制器执行时,使内存控制器执行前述实施例所示的方法流程。
具体地,上述程序指令可被内存控制器执行,实现:
接收第二处理器发送的第二请求,上述第二请求中携带有请求地址;
在未完成上述第二请求的情况下,若接收到第一处理器发送的第一请求,则向上述第一处理器发送指示指令;其中,上述第一请求中携带有上述请求地址;上述指示指令用于指示上述第一请求不能被处理,或者上述指示指令用于指示已完成上述第一请求。
上述计算机可读存储介质可以是多处理器***的内部存储单元,例如硬盘或内存。或者上述计算机可读存储介质也可以是上述多处理器***的外部存储设备,例如多处理器***上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等等。
本申请实施例还提供一种计算机程序产品,当上述计算机程序产品在多处理器***上运行时,使前述实施例所示的方法流程得以实现。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:ROM或随机存储记忆体RAM、磁碟或者光盘等各种可存储程序代码的介质。

Claims (20)

1.一种数据处理方法,其特征在于,包括:
第一处理器向内存控制器发送第一请求,所述第一请求中携带有请求地址;
所述第一处理器在未确认所述第一请求已完成的情况下,若接收到侦听指令,则在接收到来自所述内存控制器的指示指令后,处理所述侦听指令;其中,所述侦听指令中携带有所述请求地址;所述指示指令用于指示所述第一请求不能被处理,或者所述指示指令用于指示已完成所述第一请求。
2.根据权利要求1所述的方法,其特征在于,所述接收到侦听指令之后,以及接收来自所述内存控制器的指示指令之前,所述方法还包括:
所述第一处理器确定所述侦听指令处于阻塞状态。
3.根据权利要求1或2所述的方法,其特征在于,在所述指示指令用于指示所述第一请求不能被处理的情况下,所述方法还包括:
所述第一处理器接收到来自所述内存控制器的重新请求指令后,重新向所述内存控制器发送所述第一请求。
4.根据权利要求1所述的方法,其特征在于,在所述第一请求为写请求的情况下,所述指示指令用于指示已完成所述第一请求。
5.一种数据处理方法,其特征在于,包括:
内存控制器接收第二处理器发送的第二请求,所述第二请求中携带有请求地址;
在所述内存控制器未完成所述第二请求的情况下,若接收到第一处理器发送的第一请求,则向所述第一处理器发送指示指令;其中,所述第一请求中携带有所述请求地址;所述指示指令用于指示所述第一请求不能被处理,或者所述指示指令用于指示已完成所述第一请求。
6.根据权利要求5所述的方法,其特征在于,在所述指示指令用于指示所述第一请求不能被处理的情况下,所述方法还包括:
在所述内存控制器已完成所述第二请求后,向所述第一处理器发送重新请求指令,所述重新请求指令用于指示重新发送所述第一请求。
7.根据权利要求5所述的方法,其特征在于,在所述第一请求为写请求的情况下,所述指示指令用于指示已完成所述第一请求。
8.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在所述内存控制器已完成所述第二请求的情况下,若接收到所述第一处理器发送的第一请求,则处理所述第一请求。
9.一种处理器,其特征在于,包括:
发送单元,用于向内存控制器发送第一请求,所述第一请求中携带有请求地址;
处理单元,用于在未确认所述第一请求已完成的情况下,若接收到侦听指令,则在接收到指示指令后,处理所述侦听指令;其中,所述侦听指令中携带有所述请求地址;所述指示指令用于指示所述第一请求不能被处理,或者所述指示指令用于指示已完成所述第一请求。
10.根据权利要求9所述的处理器,其特征在于,所述处理器还包括:
确定单元,用于确定所述侦听指令处于阻塞状态。
11.根据权利要求9或10所述的处理器,其特征在于,所述处理器还包括:
接收单元,用于接收来自所述内存控制器的重新请求指令;
所述发送单元,还用于在所述接收单元接收到所述重新请求指令后,重新向所述内存控制器发送所述第一请求。
12.根据权利要求9所述的处理器,其特征在于,在所述第一请求为写请求的情况下,所述指示指令用于指示已完成所述第一请求。
13.一种内存控制器,其特征在于,包括:
接收单元,用于接收第二处理器发送的第二请求,所述第二请求中携带有请求地址;
发送单元,用于在未完成所述第二请求的情况下,若接收到第一处理器发送的第一请求,则向所述第一处理器发送指示指令;其中,所述第一请求中携带有所述请求地址;所述指示指令用于指示所述第一请求不能被处理,或者所述指示指令用于指示已完成所述第一请求。
14.根据权利要求13所述的内存控制器,其特征在于,在所述指示指令用于指示所述第一请求不能被处理的情况下,
所述发送单元,还用于在已完成所述第二请求后,向所述第一处理器发送重新请求指令,所述重新请求指令用于指示重新发送所述第一请求。
15.根据权利要求13所述的内存控制器,其特征在于,在所述第一请求为写请求的情况下,所述指示指令用于指示已完成所述第一请求。
16.根据权利要求13所述的内存控制器,其特征在于,所述内存控制器还包括:
处理单元,用于在已完成所述第二请求的情况下,若接收到所述第一处理器发送的第一请求,则处理所述第一请求。
17.一种多处理器设备,其特征在于,包括:第一处理器、第二处理器和内存控制器,其中,
所述第二处理器,用于向所述内存控制器发送第二请求,所述第二请求中携带有请求地址;
所述内存控制器,用于接收所述第二请求;以及在所述内存控制器未完成所述第二请求的情况下,若接收到所述第一处理器发送的第一请求,则向所述第一处理器发送指示指令;其中,所述第一请求中携带有所述请求地址,所述指示指令用于指示所述第一请求不能被处理,或者所述指示指令用于指示已完成所述第一请求;
所述第一处理器,用于向所述内存控制器发送所述第一请求;以及在未确认所述第一请求已完成的情况下,若接收到侦听指令,则在接收到所述指示指令后,处理所述侦听指令;其中,所述侦听指令为所述第二请求的侦听指令。
18.根据权利要求17所述的多处理器设备,其特征在于,在所述指示指令用于指示所述第一请求不能被处理的情况下,
所述内存控制器,还用于在已完成所述第二请求后,向所述第一处理器发送重新请求指令,所述重新请求指令用于指示重新发送所述第一请求;
所述第一处理器,用于在接收到所述重新请求指令后,重新向所述内存控制器发送所述第一请求。
19.根据权利要求17所述的多处理器设备,其特征在于,在所述第一请求为写请求的情况下,所述指示指令用于指示已完成所述第一请求。
20.根据权利要求17所述的多处理器设备,其特征在于,
所述内存控制器,还用于在已完成所述第二请求的情况下,若接收到所述第一请求,则处理所述第一请求。
CN201810081760.8A 2018-01-26 2018-01-26 数据处理方法及相关网元、设备、*** Active CN110083548B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810081760.8A CN110083548B (zh) 2018-01-26 2018-01-26 数据处理方法及相关网元、设备、***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810081760.8A CN110083548B (zh) 2018-01-26 2018-01-26 数据处理方法及相关网元、设备、***

Publications (2)

Publication Number Publication Date
CN110083548A CN110083548A (zh) 2019-08-02
CN110083548B true CN110083548B (zh) 2023-01-13

Family

ID=67412695

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810081760.8A Active CN110083548B (zh) 2018-01-26 2018-01-26 数据处理方法及相关网元、设备、***

Country Status (1)

Country Link
CN (1) CN110083548B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113342265B (zh) * 2021-05-11 2023-11-24 中天恒星(上海)科技有限公司 缓存管理方法、装置、处理器及计算机装置
CN115858420B (zh) * 2023-02-23 2023-05-12 芯砺智能科技(上海)有限公司 用于支持多处理器架构的***缓存架构和芯片

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103106122A (zh) * 2011-08-08 2013-05-15 Arm有限公司 针对同时待处理数据访问请求的数据冲突处理
CN104520824A (zh) * 2012-07-31 2015-04-15 华为技术有限公司 为缓存一致性处理缓存回写和缓存淘汰
CN104899160A (zh) * 2015-05-30 2015-09-09 华为技术有限公司 一种缓存数据控制方法、节点控制器和***
WO2016033949A1 (zh) * 2014-09-04 2016-03-10 深圳市中兴微电子技术有限公司 L2 Cache及其一致性实现方法、***和存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7917646B2 (en) * 2002-12-19 2011-03-29 Intel Corporation Speculative distributed conflict resolution for a cache coherency protocol

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103106122A (zh) * 2011-08-08 2013-05-15 Arm有限公司 针对同时待处理数据访问请求的数据冲突处理
CN104520824A (zh) * 2012-07-31 2015-04-15 华为技术有限公司 为缓存一致性处理缓存回写和缓存淘汰
WO2016033949A1 (zh) * 2014-09-04 2016-03-10 深圳市中兴微电子技术有限公司 L2 Cache及其一致性实现方法、***和存储介质
CN104899160A (zh) * 2015-05-30 2015-09-09 华为技术有限公司 一种缓存数据控制方法、节点控制器和***

Also Published As

Publication number Publication date
CN110083548A (zh) 2019-08-02

Similar Documents

Publication Publication Date Title
US7702743B1 (en) Supporting a weak ordering memory model for a virtual physical address space that spans multiple nodes
JP4737691B2 (ja) 排他的所有権のスヌープフィルタ
US9170946B2 (en) Directory cache supporting non-atomic input/output operations
KR100324975B1 (ko) 잠재적인 제3 노드 트랜잭션을 버퍼에 기록하여 통신 대기시간을 감소시키는 비균일 메모리 액세스(numa) 데이터 프로세싱 시스템
JP3661761B2 (ja) 共用介入サポートを有する不均等メモリ・アクセス(numa)データ処理システム
TWI391821B (zh) 在互連結構上發佈請求而無參照基於標籤快取狀態的低階快取之處理單元及資料處理系統與方法
US10402327B2 (en) Network-aware cache coherence protocol enhancement
TWI410796B (zh) 來自窺探過濾器之過期無效異動的減少
US8205045B2 (en) Satisfying memory ordering requirements between partial writes and non-snoop accesses
US7177987B2 (en) System and method for responses between different cache coherency protocols
US6145059A (en) Cache coherency protocols with posted operations and tagged coherency states
US8762651B2 (en) Maintaining cache coherence in a multi-node, symmetric multiprocessing computer
US7386680B2 (en) Apparatus and method of controlling data sharing on a shared memory computer system
US6654858B1 (en) Method for reducing directory writes and latency in a high performance, directory-based, coherency protocol
JP4474570B2 (ja) キャッシュコヒーレンシ制御方法
US6266743B1 (en) Method and system for providing an eviction protocol within a non-uniform memory access system
KR20010101193A (ko) 판독 요청을 원격 처리 노드에 추론적으로 전송하는비정형 메모리 액세스 데이터 처리 시스템
US8635410B1 (en) System and method for removing data from processor caches in a distributed multi-processor computer system
US20110314228A1 (en) Maintaining Cache Coherence In A Multi-Node, Symmetric Multiprocessing Computer
US6829683B1 (en) System and method for transferring ownership of data in a distributed shared memory system
US10970213B2 (en) Selective disabling of hardware-based cache coherency and enforcement of software-based cache coherency
US20140006716A1 (en) Data control using last accessor information
US7149852B2 (en) System and method for blocking data responses
CN109840216B (zh) 针对高速缓存的数据处理方法及相关元件、设备、***
US7797495B1 (en) Distributed directory cache

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant