CN109840216A - 针对高速缓存的数据处理方法及相关元件、设备、系统 - Google Patents
针对高速缓存的数据处理方法及相关元件、设备、系统 Download PDFInfo
- Publication number
- CN109840216A CN109840216A CN201711224355.9A CN201711224355A CN109840216A CN 109840216 A CN109840216 A CN 109840216A CN 201711224355 A CN201711224355 A CN 201711224355A CN 109840216 A CN109840216 A CN 109840216A
- Authority
- CN
- China
- Prior art keywords
- request
- cache
- listens
- instruction
- response
- 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.)
- Granted
Links
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
- Multi Processors (AREA)
Abstract
本发明实施例公开了一种针对高速缓存数据处理方法及相关元件、设备、系统,该方法包括:内存控制器接收第一缓存控制器代理第一缓存行发送的第一请求,并广播针对第一请求的第一侦听指令;在未发送针对第一请求的第一响应数据的情况下,接收第二缓存控制器代理第二缓存行发送的与第一请求相冲突的第二请求,暂停对第二请求的响应;在已接收到第二缓存控制器发送的第二请求且未发送针对第二请求的第二响应数据的情况下,接收第二缓存控制器发送的针对第一侦听指令的冲突报文,向第一缓存控制器发送针对第一请求的第一响应数据,采用本发明实施例,可避免数据冲突,维护数据的一致性。
Description
技术领域
本发明涉及高速缓冲存储器技术领域,尤其涉及一种针对高速缓存的数据处理方法及相关元件、设备、系统。
背景技术
在多处理器(central processing unit,CPU))系统中,每个处理器可以包括一或两级高速缓冲存储器(Cache,本发明中也称高速缓存),同一个数据的多个副本可以同时存在与不同的高速缓冲存储器中。高速缓冲存储器包括至少一个缓存行(Cache line)以及代理至少一个缓存行收发数据的缓存控制器,若各处理器自由修改其本地的副本,会导致不同处理器对同一个数据观察到的结果不一致,另外处理器对主存的修改也会导致数据的不一致,为解决不一致的问题引入一致性协议,例如MESI协议。
MESI协议定义了缓存行(Cache line)的四种状态,包括修改态(Modified,简称M态)、独占态(Exclusive,简称E态)、共享态(Shared,简称S态)、无效态(Invalid,简称I态),以说明缓存行中数据的状态(具体可参见具体实施方式中相关描述)。当处理器针对请求地址对应的数据发起读/写请求时,包含该数据的缓存行的状态或被分配的无效态缓存行的状态可能会发生转变。
然而,多个缓存行的代理(即多个缓存控制器)可能同时针对同一个请求地址发起请求。例如,请参阅图1所示的Cache中数据冲突的示意性说明图,多个缓存行的代理(CacheAgent,简称CA),比如第一缓存行的代理(CA1)和第二缓存行的代理(CA2)都发起独占请求(Read Exclusive,简称READE),请求对请求地址对应的数据独占,内存控制器(HomeAgent,简称HA)在接收CA1和CA2发送的READE后,对READE进行数据处理,向CA1和CA2都返回E态响应数据(Date Response Exclusive,简称DATAE),导致第一缓存行和第二缓存行都得到E态的数据,导致E态响应数据同时存在两个Cache中,违背了MESI协议,导致系统出错。
发明内容
本发明实施例所要解决的技术问题在于,提供一种针对高速缓存的数据处理方法及相关元件、设备,在多个缓存行的代理同时发起请求时避免数据的冲突,进而避免系统出错,提高系统运行的稳定性。
第一方面,本发明实施例提供了一种针对高速缓存的数据处理方法,应用于内存控制器,包括:
内存控制器接收第一缓存控制器代理第一缓存行发送的第一请求,并广播针对所述第一请求的第一侦听指令;
所述内存控制器在未发送针对所述第一请求的第一响应数据的情况下,接收第二缓存控制器代理第二缓存行发送的第二请求,暂停对所述第二请求的响应;
所述内存控制器在已接收到所述第二缓存控制器发送的所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,向所述第一缓存控制器发送针对所述第一请求的第一响应数据;
其中,所述第一请求用于请求第一响应数据,所述第二请求用于请求第二响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
在一种可能的实现方式中,所述内存控制器广播针对所述第一请求的第一侦听指令之后,所述内存控制器接收第二缓存控制器代理第二缓存行发送的第二请求之前,所述方法还包括:
所述内存控制器在未接收到第二缓存控制器发送的第二请求的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,重新广播所述第一侦听指令。
在又一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
通过执行上述方法,内存控制器当前正在处理第一请求,当第一请求未处理完,即在未发送针对所述第一请求的第一响应数据的情况下,接收到与第一请求相冲突的第二请求时,内存控制器可以暂停对第二请求的响应,在处理完第一请求之后,再处理第二请求,避免数据冲突。
而且,内存控制器在接收到第二缓存控制器发送的RSPC时,若未接收第二缓存控制器代理第二缓存行发送的第二请求,则重新广播第一侦听指令,直至内存控制器接收到该第二请求,并暂停对该第二请求的响应,在处理完第一请求之后,再处理第二请求,避免数据冲突,维护数据的一致性。
而且,本发明实施例仅仅在冲突时才发送报文,减少报文的处理过程,缩短数据的处理时间,提高数据的处理效率。
第二方面,本发明实施例提供了一种针对高速缓存的数据处理方法,应用于内存控制器,包括:
内存控制器接收第一缓存控制器代理第一缓存行发送的第一请求,并广播针对所述第一请求的第一侦听指令;
所述内存控制器在已向第二缓存控制器发送针对第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,重新广播所述第一侦听指令;
所述内存控制器在接收到所述第二缓存控制器发送的针对所述第一侦听指令的第一侦听响应消息之后,向所述第一缓存控制器发送针对所述第一请求的第一响应数据;
其中,所述第一请求用于请求第一响应数据,所述第二请求用于请求第二响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
在一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
通过执行上述方法,内存控制器在接收到第二缓存控制器发送的针对所述第一侦听指令的冲突报文时,若已经向第二缓存控制器发送针对第二请求的第二响应数据,则内存控制器重新广播所述第一侦听指令,直至接收到第二缓存控制器发送的第一侦听响应消息;内存控制器在接收到第二缓存控制器发送的针对第一侦听指令的第一侦听响应消息之后,说明第二缓存控制器已经完成处理第二响应数据,且根据第一侦听指令,完成对第二缓存行的处理,此时,内存控制器可以响应第一请求,发送第一响应数据,避免了数据的冲突。提供系统运行的稳定性。
而且,仅仅在冲突时才发送报文,减少报文的处理过程,缩短数据的处理时间,提高数据的处理效率。
第三方面,本发明实施例提供了一种针对高速缓存的数据处理方法,应用于第二缓存存控制器,包括:
第二缓存控制器代理第二缓存行向内存控制器发送第二请求;
所述第二缓存控制器在接收到针对所述第二请求的第二响应数据之前,接收所述内存控制器针对第一请求广播的第一侦听指令,向所述内存控制器发送冲突报文;
所述第二缓存控制器接收所述内存控制器发送的所述第二响应数据,根据所述第二响应数据对所述第二缓存行进行数据处理;
其中,所述第一请求为第一缓存控制器代理第一缓存行发送的请求,用于请求第一响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
在一种可能的实现方式中,所述方法还包括:
所述第二缓存控制器在接收到针对所述第二请求的第二响应数据之后,接收到所述内存控制器针对第一请求广播的第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的第一侦听响应消息。
在又一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
通过执行上述方法,第二缓存控制器完成第二请求之前,若接收到与第二请求向冲突的第一侦听指令时,第二缓存控制器直接发送针对第一侦听指令的冲突报文,而不进行任何数据处理,在接收第二响应数据,并完成第二响应数据的处理后,才会根据接收到的第一侦听指令进行数据处理,进而避免数据的冲突。
第四方面,本发明实施例提供了一种针对高速缓存的数据处理方法,应用于多处理器设备或系统,包括:
第一缓存控制器代理第一缓存行向内存控制器发送的第一请求;
在所述内存控制器发送针对所述第一请求的第一响应数据之前,所述第二缓存控制器代理第二缓存行向内存控制器发送的第二请求;
内存控制器接收第一请求,广播针对所述第一请求的第一侦听指令;
所述第二缓存控制器在接收到针对所述第二请求的第二响应数据之前,接收到所述第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的冲突报文;
所述内存控制器接收所述冲突报文;
所述内存控制器在接收所述冲突报文之前,接收到所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,暂停响应所述第二请求,并向第一缓存控制器发送针对所述第一请求的第一响应数据;
其中,所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存控制器进行数据处理。
在一种可能的实现方式中,,所述方法还包括:所述内存控制器在接收所述冲突报文时,未接收到所述第二请求的情况下,重新发送所述第一侦听指令。
在又一种可能的实现方式中,所述方法还包括:
所述第二缓存控制器在接收到针对所述第二请求的第二响应数据之后,接收到所述内存控制器针对第一请求广播的第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的第一侦听响应消息。
在又一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
通过执行上述方法,第一缓存控制器代理第一缓存行向内存控制器发送的第一请求;第二缓存控制器代理第二缓存行向内存控制器发送的第二请求;其中,第一请求携带请求地址与第二请求携带的请求地址相同;内存控制器接收第一请求,广播针对第一请求的第一侦听指令;第二缓存控制器在接收到针对第二请求的第二响应数据之前,接收到第一侦听指令的情况下,向内存控制器发送针对第一侦听指令的冲突报文;内存控制器接收冲突报文,内存控制器在未发送针对第一请求的第一响应数据的情况下,接收第二缓存控制器代理第二缓存行发送的第二请求,暂停对第二请求的响应,进而向第一缓存控制器发送针对第一请求的第一响应数据,然后,再响应第二请求,向第二缓存控制器发送第二响应数据。实施本发明所述的方法,通过在检测到数据处理冲突时,内存控制器暂停对第二请求的响应,在处理完第一请求后,再响应第二请求,避免数据的冲突,进而避免系统出错,提高系统运行的稳定性。
而且,仅仅在冲突时才发送报文,减少报文的处理过程,缩短数据的处理时间,提高数据的处理效率。
第五方面,本发明实施例提供了一种针对高速缓存的数据处理方法,应用于多处理器设备或系统,包括:
第一缓存控制器代理第一缓存行向内存控制器发送的第一请求;
在所述内存控制器发送针对所述第一请求的第一响应数据之前,所述第二缓存控制器代理第二缓存行向内存控制器发送的第二请求;
内存控制器接收第一请求,广播针对所述第一请求的第一侦听指令;
所述第二缓存控制器在接收到针对所述第二请求的第二响应数据之前,接收到所述第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的冲突报文;
所述内存控制器接收所述冲突报文;
所述内存控制器在接收所述冲突报文之前,接收到所述第二请求且已发送针对所述第二请求的第二响应数据的情况下,重新发送所述第一侦听指令,并在接收到所述第二缓存针对所述第一侦听指令的第一侦听响应消息后,向所述第一缓存控制器发送针对所述第一请求的第一响应数据;
其中,所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存控制器进行数据处理。
在一种可能的实现方式中,所述方法还包括:
所述第二缓存控制器在接收到针对所述第二请求的第二响应数据之后,接收到所述内存控制器针对第一请求广播的第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的第一侦听响应消息。
在又一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
通过执行上述方法,第二缓存控制器代理第二缓存行向内存控制器发送的第二请求;内存控制器响应第二请求,向第二缓存控制器发送等待第二响应数据;在第二缓存控制器接收到第二响应数据之前,第一缓存控制器代理第一缓存行向内存控制器发送的与第二请求相冲突的第一请求;内存控制器接收第一请求,发送针对第一请求的第一侦听指令;第二缓存控制器在未接收到第二响应数据之前接收到第一侦听指令的情况下,向内存控制器返回冲突报文;内存控制器接收到冲突报文后,重复发送第一侦听指令,第二缓存控制器在接收到第二响应数据之后接收到第一侦听指令的情况下,向内存控制器返回第二侦听响应消息;内存控制器在接收到第二缓存控制器发送的第二侦听响应消息后,再向第一缓存控制器发送针对第一请求的第一响应数据。实施本发明所述的方法,通过在检测到数据处理冲突时,内存控制器暂停对第一请求的响应,在处理完第二请求后,再响应第一请求,避免数据的冲突,进而避免系统出错,提高系统运行的稳定性。
而且,仅仅在冲突时才发送报文,减少报文的处理过程,缩短数据的处理时间,且第一侦听指令可以超越第二响应数据,在冲突数据处理过程中不需要严格保证侦听指令与响应数据的次序,数据处理效率更高。
第六方面,本发明实施例提供了一种内存控制器,所述内存控制器包括:
接收单元,用于接收第一缓存控制器代理第一缓存行发送的第一请求;
广播单元,用于广播针对所述第一请求的第一侦听指令;
暂停单元,用于在未发送针对所述第一请求的第一响应数据的情况下,接收第二缓存控制器代理第二缓存行发送的第二请求,暂停对所述第二请求的响应;
第一冲突处理单元,用于在已接收到所述第二缓存控制器发送的所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,向所述第一缓存控制器发送针对所述第一请求的第一响应数据;
其中,所述第一请求用于请求第一响应数据,所述第二请求用于请求第二响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
在一种可能的实现方式中,所述内存控制器还包括:
所述第二冲突处理单元,用于在未接收到第二缓存控制器发送的第二请求的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,重新广播所述第一侦听指令。
在又一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
第七方面,本发明实施例提供了一种内存控制器,所述内存控制器包括:
接收单元,用于接收第一缓存控制器代理第一缓存行发送的第一请求;
广播单元,用于广播针对所述第一请求的第一侦听指令;
冲突处理单元,用于在已向第二缓存控制器发送针对第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,重新广播所述第一侦听指令;
响应单元,用于在接收到所述第二缓存控制器发送的针对所述第一侦听指令的第一侦听响应消息之后,向所述第一缓存控制器发送针对所述第一请求的第一响应数据;
其中,所述第一请求用于请求第一响应数据,所述第二请求用于请求第二响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
在一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
第八方面,本发明实施例提供了一种一种缓存控制器,所述缓存控制器包括:
请求发送单元,用于代理第二缓存行向内存控制器发送第二请求;
报文发送单元,用于在接收到针对所述第二请求的第二响应数据之前,接收所述内存控制器针对第一请求广播的第一侦听指令,向所述内存控制器发送冲突报文;
接收处理单元,用于接收所述内存控制器发送的所述第二响应数据,根据所述第二响应数据对所述第二缓存行进行数据处理;
其中,所述第一请求为第一缓存控制器代理第一缓存行发送的请求,用于请求第一响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
在一种可能的实现方式中,所述缓存控制器还包括:
侦听响应单元,用于在接收到针对所述第二请求的第二响应数据之后,接收到所述内存控制器针对第一请求广播的第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的第一侦听响应消息。
在又一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
第九方面,本发明实施例提供了一种多处理器设备,包括:第一缓存控制器、第二缓存控制器以及内存控制器,其中,
第一缓存控制器用于:代理第一缓存行向内存控制器发送的第一请求;
所述第二缓存控制器用于:在所述内存控制器发送针对所述第一请求的第一响应数据之前,代理第二缓存行向内存控制器发送的第二请求;以及,在在接收到针对所述第二请求的第二响应数据之前,接收到所述第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的冲突报文;
内存控制器用于:接收所述第一请求,广播针对所述第一请求的第一侦听指令;接收所述第二请求以及所述冲突报文;以及,
在接收所述冲突报文之前,接收到所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,暂停响应所述第二请求,并向第一缓存控制器发送针对所述第一请求的第一响应数据;或者,所述内存控制器在接收所述冲突报文之前,接收到所述第二请求且已发送针对所述第二请求的第二响应数据的情况下,重新发送所述第一侦听指令,并在接收到所述第二缓存针对所述第一侦听指令的第一侦听响应消息后,向所述第一缓存控制器发送所述第一响应数据;
其中,所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存控制器进行数据处理。
在一种可能的实现方式中,所述内存控制器还用于:
在接收所述冲突报文时,未接收到所述第二请求的情况下,重新发送所述第一侦听指令。
在一种可能的实现方式中,所述第二缓存控制器还用于:
在接收到针对所述第二请求的第二响应数据之后,接收到所述内存控制器针对第一请求广播的第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的第一侦听响应消息。
在又一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
第十方面,本发明实施例提供了一种多处理器系统,包括:第一缓存控制器、第二缓存控制器以及内存控制器,其中,
第一缓存控制器用于:代理第一缓存行向内存控制器发送的第一请求;
所述第二缓存控制器用于:在所述内存控制器发送针对所述第一请求的第一响应数据之前,代理第二缓存行向内存控制器发送的第二请求;以及,在在接收到针对所述第二请求的第二响应数据之前,接收到所述第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的冲突报文;
内存控制器用于:接收所述第一请求,广播针对所述第一请求的第一侦听指令;接收所述第二请求以及所述冲突报文;以及,
在接收所述冲突报文之前,接收到所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,暂停响应所述第二请求,并向第一缓存控制器发送针对所述第一请求的第一响应数据;或者,所述内存控制器在接收所述冲突报文之前,接收到所述第二请求且已发送针对所述第二请求的第二响应数据的情况下,重新发送所述第一侦听指令,并在接收到所述第二缓存针对所述第一侦听指令的第一侦听响应消息后,向所述第一缓存控制器发送所述第一响应数据;
其中,所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存控制器进行数据处理。
在一种可能的实现方式中,所述内存控制器还用于:
在接收所述冲突报文时,未接收到所述第二请求的情况下,重新发送所述第一侦听指令。
在一种可能的实现方式中,所述第二缓存控制器还用于:
在接收到针对所述第二请求的第二响应数据之后,接收到所述内存控制器针对第一请求广播的第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的第一侦听响应消息。
在又一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
附图说明
为了更清楚地说明本发明实施例或背景技术中的技术方案,下面将对本发明实施例或背景技术中所需要使用的附图进行说明。
图1是本发明涉及的一种Cache中数据冲突的示意性说明图;
图2是本发明实施例提供的一种多处理器设备的示意性框架图;
图3是本发明实施例提供的一种MESI协议中状态转变的第一示意性说明图;
图4是本发明实施例提供的一种MESI协议中状态转变的第二示意性说明图;
图5是本发明实施例提供的一种MESI协议中状态转变的第三示意性说明图;
图6是本发明实施例提供的一种MESI协议中状态转变的第四示意性说明图;
图7是本发明实施例提供的一种内存控制器中数据处理方法的流程示意图;
图8是本发明实施例提供的另一种内存控制器中数据处理方法的流程示意图;
图9是本发明实施例提供的另一种缓存控制器中数据处理方法的流程示意图;
图10是本发明实施例提供的一种针对Cache的数据处理方法的流程示意图;
图11是本发明实施例提供的又一种针对Cache的数据处理方法的流程示意图;
图12是本发明实施例提供的又一种针对Cache的数据处理方法的流程示意图;
图13是本发明实施例提供的又一种针对Cache的数据处理方法的流程示意图;
图14是本发明实施例提供的又一种针对Cache的数据处理方法的流程示意图;
图15是本发明实施例提供的一种内存控制器的架构示意图;
图16是本发明实施例提供的另一种内存控制器的架构示意图;
图17是本发明实施例提供的一种第二缓存控制器的架构示意图;
图18是本发明实施例提供的一种多处理器设备的架构示意图;
图19是本发明实施例提供的一种多处理器系统的架构示意图。
具体实施方式
下面结合本发明实施例中的附图对本发明实施例进行描述。
下面对本发明实施例涉及的多处理器设备进行概述:
请参阅图2,图2是本发明实施例提供的一种多处理器设备的示意性框架图。一种多处理器设备包括多个处理器(central processing unit,CPU)、存储器系统以及总线,各个处理器通过总线连接到存储器系统。各个处理器可以包括高速缓冲存储器(Cache)和缓存控制器。存储器系统包括内存(也称主存(main memory))和内存控制器。
可以理解,缓存控制器可以是Cache中的一部分,内存控制器也可以作为内存中一部分,存储器系统还可以包括硬盘等,本发明不作限定。
其中,高速缓冲存储器(Cache),本发明中也称高速缓存,是介于CPU核心与内存之间的高速小容量的存储器,由静态存储芯片(static random access memory,SRAM)组成,存在多级的分层架构。Cache被分为多个缓存行(Cache line),每个缓存行可以是64比特(byte)、128比特等,缓存行是Cache与下级Cache,或Cache与内存数据交换的最小单位。
缓存行可以包括数据区以及标志区;数据区可以包括数据字段用于存储数据,标志区可以包括地址字段、状态字段等。地址字段用于指示数据的内存地址。状态字段用于指示数据的一致性状态,也称缓存行的一致性状态。
各个处理器可以包括多个级别的高速缓存,比如三级,分别为一级高速缓冲存储器(也称L1 Cache)、二级高速缓冲存储器(也称L2 Cache)和三级高速缓冲存储器(也称L3Cache)。其中,L1 Cache由指令Cache和数据Cache组成,L2 Cache或L3 Cache可以包括数据和指令,L1 Cache和L2 Cache为每个CPU独有,L3 Cache可以为多个CPU中共享。
缓存控制器包括本Cache中缓存行的缓存目录,代理本Cache中缓存行向内存控制器发送请求以及接收数据、指令等。可以理解,Cache的缓存控制器除负责响应自己CPU的读/写请求外,还负责监听总线上其他Cache的读写操作并对自己的Cache予以相应处理。
内存控制器包括所有Cache中缓存行的缓存目录,代理内存向缓存控制器发送请求、数据、指令等,以及接收请求、数据、指令。可以理解,内存控制器除负责响应所有Cache的控制器发送的请求,还向总线发送侦听指令,以使所有的Cache的缓存控制器监听其他Cache的读写操作并对自己的Cache予以相应处理。缓存控制器或内存控制器所有的处理过程都要维护Cache一致性协议,以及符合一致性协议的转换规则。
可以理解,本发明实施例可以应用于单独的多处理器设备,也可以应用于多个设备组成的多处理器系统,可以理解,该多处理器系统可以包括至少一个处理设备以及存储器系统,该处理设备包括至少一个处理器,该处理器包括至少一个Cache,存储器系统包括内存以及内存控制器。
下面对本发明实施例涉及的一致性协议进行概述:
在多处理器设备中,每个处理器可以包括一或两级高速缓存,同一个数据的多个副本可以同时存在与不同的高速缓存中,若处理器自由修改其本地的副本,会导致不同处理器对同一个数据观察到的结果不一致,另外处理器对主存的修改也会导致数据的不一致,为解决不一致的问题引入一致性(MESI)协议。
MESI协议定义了缓存行(Cache line)的至少以下四种状态:
修改态(Modified):也称M态,缓存行的数据有效,数据被修改,与内存中的数据不一致,数据只存在于本Cache中。
独占态(Exclusive):也称E态,缓存行的数据有效,数据和内存中的数据一致,数据只存在于本Cache中。
共享态(Shared):也称S态,缓存行的数据有效,数据和内存中的数据一致,数据可以存在于多个Cache中。
无效态(Invalid):也称I态,缓存行不含有效数据。
需要说明的是,本发明实施例仅仅以MESI协议为例来说明,本发明实施例所述的Cache冲突处理方法还可以应用于其他的Cache一致性协议,比如由MESI演化的MOESI协议、MESIF协议等,对此,本发明实施例不作限定。
下面介绍本发明实施例涉及的请求、侦听指令、侦听响应消息以及响应数据等:
缓存控制器针对其代理的缓存行发起的请求:
独占请求(Read Exclusive,简称READE):携带请求地址,用于请求对内存中该请求地址对应的数据独占,独占请求完成后,缓存行读入该请求地址对应的数据且状态为E态。
共享请求(Read Shared,简称READS):携带请求地址,用于请求对内存中该请求地址对应的数据共享,共享请求完成后,缓存行读入该请求地址对应的数据且状态为S态。
回写请求(Write Back Invalid,简称WBI):携带数据和请求地址,用于请求将携带数据写入到内存中该请求地址对应的存储空间,回写请求完成后,释放该缓存行,缓存行的状态为I态。可以理解,缓存控制器可以代理M态缓存行发出WBI。
内存控制器发起的侦听指令:
独占侦听指令(Snoop Exclusive,简称SNPE):用于响应独占请求,携带请求地址,侦听请求地址对应的缓存行,被侦听后,该缓存行为I态;
共享侦听指令(Snoop Shared,简称SNPS):用于响应共享请求,携带请求地址,侦听请求地址对应的缓存行,被侦听后,该缓存行为I态或S态;
缓存控制器针对被侦听的缓存行的侦听指令向内存控制器返回的侦听响应消息:
I态侦听响应消息(Response Invalid,简称RSPI):用于响应侦听指令,指示被侦听后缓存行处于I态。
S态侦听响应消息(Response Shared,简称RSPS):用于响应侦听指令,指示被侦听后缓存行处于S态。
数据回写响应消息(Response Invalid Write Back,简称RSPIWB):用于响应侦听指令,携带被侦听的缓存行存储的数据,指示内存控制器将携带的数据写回内存,且指示被侦听后缓存行处于I态。
需要说明的是,侦听指令与侦听响应消息具有对应关系,缓存控制器响应SNPE的侦听响应消息为RSPI或RSPIWB;缓存控制器响应SNPS的侦听响应消息为RSPS、RSPI或RSPIWB。
缓存控制器针对被侦听的缓存行的侦听指令向内存控制器返回的指示消息:
冲突报文(RSPC):用于响应侦听指令,指示被侦听的缓存行存在冲突。
内存控制器针对请求返回的响应数据:
E态响应数据(Date Response Exclusive,简称DATAE):用于响应独占请求,携带请求地址,还可以携带内存中请求地址对应的数据,指示缓存控制器将被代理发出该独占请求的缓存行读取携带的数据并转变为E态。
S态响应数据(Date Response Shared,简称DATAS):用于响应共享请求,携带请求地址,还可以携带内存中请求地址对应的数据,指示缓存控制器将被代理发出该共享请求的缓存行读取携带的数据并转变为S态。
需要说明的是,本发明实施例中请求、侦听指令、侦听响应消息以及响应数据等还可以包括其他形式的请求、侦听指令、侦听响应消息以及响应数据等,本发明不作限定。
M、E、S、I状态之间可以转换,下面介绍MESI协议中,各个状态之间转变的实现方式:
处理器向本Cache发送携带请求地址的写/读请求。
在读请求命中的情况下,本缓存控制器将命中的缓存行中的数据返回给CPU,该命中的缓存行的状态不变。
在写请求命中的情况下,本缓存控制器在命中的缓存行写入写请求携带的数据,并修改该命中的缓存行的状态为M态,此时,该命中的缓存行内原数据被替换为写请求携带的数据,若其他Cache中存在该原数据,则该原数据所在的缓存行的状态转变为I态。
在读/写请求未命中的情况下,即本Cache中不存在与请求地址对应的缓存行,也就是说写/读请求的数据不在本Cache中,本缓存控制器分配I态的缓存行,并向内存控制器发送请求,请求读取内存中的数据到该缓存行。
在读请求未命中的情况下,本缓存控制器分配I态的缓存行(比如第一缓存行),并向内存控制器发送请求,请求读取内存中该请求地址对应的数据,并请求的数据读入到第一缓存行中,且修改该第一存行的状态。此时,若其他Cache中存在该数据的副本,则调整该数据所在的缓存行(比如第二缓存行)的状态。
例如,当第二缓存行初始态为M态时,第一缓存行在读入内存中该请求地址对应的数据之前,第二缓存行的代理需要向内存控制器发送回写请求,以更新内存中请求地址对应的数据,并释放第二缓存行,第二缓存行转变为I态,进而第一缓存读入内存中该请求地址对应的数据,并将转变为E态或S态。
又例如,当第二缓存行初始态为E或S态时,第一缓存读入内存中该请求地址对应的数据后,第一缓存行和第二缓存行的状态都转变为S态。
在写请求未命中的情况下,本缓存控制器分配I态的缓存行(比如第一缓存行),并将写请求携带的数据读入到第一缓存行中,且修改该第一缓存行的状态。此时,若其他Cache中存在该请求地址对应的内存中数据的副本,则调整该数据所在的缓存行(比如第二缓存行)的状态。
例如,若第二缓存行的状态为M态、E态和S态中的一种,第一缓存行将写请求携带的数据读入到第一缓存行中,修改该第一缓存行的状态为M态,第二缓存行的状态转变为I态。
可以理解,状态的转变的实现还可以是其他的实现方式,本发明实施例仅仅以上述描述的实现方式为例来说明,对此,本发明实施例不在赘述。
下面通过具体实施场景介绍状态转变的过程:
实施例一:
请参阅图3所示的MESI协议中状态转变的第一示意性说明图。
第一缓存行的初始状态为I态。代理第一缓存行的缓存控制器(CA1)可以向内存控制器(HA)发送携带请求地址的READE;HA接收到READE后,向发起携带请求地址的SNPE;各个缓存控制器侦听到该SNPE,根据各自缓存目录,查找是否存在命中该SNPE的缓存行。若第二缓存行命中,则代理第二缓存行的缓存控制器(CA2)响应该SNPE。若第二缓存行为S态或E态,则CA2可以释放该第二缓存行,将第二缓存行的状态修改为I态,并向HA发送RSPI;HA在接收到所有缓存控制器发送的RSPI后,向CA1返回携带内存中请求地址对应数据的DATAE;CA1在接收到DATAE后将DATAE携带的数据读入到第一缓存行,并修改该第一缓存行的状态为E态。
可以理解,若第一缓存行为CA1在CPU发送的写请求未命中时被CA1分配的用于响应写请求的缓存行,CA1还可以修改缓存行内的数据为请求数据,将第一缓存行的状态修改为M态。其中,写请求携带请求地址和请求数据,用于将请求数据写入到缓存行,该写请求携带的请求地址与READE携带请求地址相同。
可以理解,若第一缓存行的状态为S态,HA向CA1返回携带DATAE可以不携带内存中请求地址对应数据。CA1在接收到DATAE后修改该第一缓存行的状态为E态。
请参阅图4所示的MESI协议中状态转变的第二示意性说明图。第一缓存行的初始状态为I态。代理第一缓存行的缓存控制器(CA1)可以向内存控制器(HA)发送携带请求地址的READE;HA接收到READE后,向发起携带请求地址的SNPE;各个缓存控制器侦听到该SNPE,根据各自缓存目录,查找是否存在命中该SNPE的缓存行。若第二缓存行命中,则代理第二缓存行的缓存控制器(CA2)响应该SNPE。若第二缓存行为M态,则CA2向HA返回携带第二缓存行内存储数据的RSPIWB,再释放该第二缓存行,将第二缓存行的状态修改为I态;HA接收到该RSPIWB后,将携带的数据更新到内存,并在回写完成后,向CA1返回携带内存中请求地址对应数据的DATAE;CA1在接收到DATAE后将DATAE携带的数据读入到第一缓存行,并修改该第一缓存行的状态为E态。
可以理解,对于图4或图5所示的状态转变场景,若第一缓存行的状态为S态,HA向CA1返回携带DATAE可以不携带内存中请求地址对应数据。CA1在接收到DATAE后修改该第一缓存行的状态为E态。
实施例二:
请参阅图5所示的MESI协议中状态转变的第三示意性说明图。
第一缓存行的初始状态为I态。代理第一缓存行的缓存控制器(CA1)可以向内存控制器(HA)发送携带请求地址的READS;HA接收到READS后,向发起携带请求地址的SNPS;各个缓存控制器侦听到该SNPS,根据各自缓存目录,查找是否存在命中该SNPS的缓存行。若第二缓存行命中,则代理第二缓存行的缓存控制器(CA2)响应该SNPS。若第二缓存行为S态或E态,则CA2可以将第二缓存行的状态修改为S态,并向HA发送RSPS;HA在接收到所有缓存控制器发送的RSPS或RSPI后,向CA1返回携带内存中请求地址对应数据的DATAS;CA1在接收到DATAS后将DATAS携带的数据读入到第一缓存行,并修改该第一缓存行的状态为S态。
可以理解,若第二缓存行为M态(图5中未示出该情况),则CA2向HA返回携带第二缓存行内存储数据的RSPIWB,再释放该第二缓存行,将第二缓存行的状态修改为I态;HA接收到该RSPIWB后,将携带的数据更新到内存,并在回写完成后,向CA2发送CMP;向CA1返回携带内存中请求地址对应数据的DATAS;CA1在接收到DATAS后将DATAS携带的数据读入到第一缓存行,并修改该第一缓存行的状态为S态。
可以理解,若第一缓存行的状态为E态(图5中未示出该情况),代理第一缓存行的缓存控制器(CA1)可以向内存控制器(HA)发送携带请求地址的READS。由于第一缓存行为E态,故不会出现其他Cache中缓存行命中SNPS的情况;HA可以在进行SNPS侦听后,向CA1发送READS,HA也可以直接向CA1发送READS。
实施例三:
请参阅图6所示的MESI协议中状态转变的第四示意性说明图。
第一缓存行的初始状态为M态,代理第一缓存行的缓存控制器(CA1)可以向HA发送携带请求地址和第一缓存行内存储数据的WBI。HA在接收到WBI后将WBI携带的数据写入到内存中请求地址对应的存储单元,并在回写完成后,向CA1发送回写完成指令(CMP),CA1在接收到CMP后,释放该第一缓存行,将第一缓存行的状态修改为I态。
本发明各个实施例中高速缓存服从以下约束:
缓存控制器在发出请求后,没有接收到该请求的响应数据之间,如果接收到侦听指令,则向内存控制器返回RSPC,指示有冲突产生;
内存控制器可以接收所有缓存控制器发送的请求、消息或冲突报文等;
内存控制器在接收到缓存控制器发送的RSPC时,若已接收到该缓存控制器发送的请求且未发送针对该请求的响应数据,则将RSPC当做RSPI处理;若未接收到该缓存控制器发送的请求或已发送针对该请求的响应数据,则重新发送侦听指令。
下面介绍内存控制器中数据处理方法:
第一冲突情景:内存控制器接收到第一请求,在发送针对第一请求的第一响应数据之前接收到与第一请求相冲突的第二请求,内存控制器的处理方法如下:
请参阅图7,图7是本发明实施例提供的一种内存控制器中数据处理方法的流程示意图,该方法包括:
步骤S700:内存控制器接收第一缓存控制器代理第一缓存行发送的第一请求,并广播针对所述第一请求的第一侦听指令。
可以理解,第一缓存行的初始状态可以是M态、E态、S态、I态等中的一种。第一请求的请求类型可以是READE或READS。第一请求携带请求地址,与该第一请求的请求类型对应地,用于请求E态响应数据或S态响应数据。
第一侦听指令携带与第一请求相一致的请求地址。与第一请求的请求类型相对应,当第一请求为READE时,第一侦听指令为SNPE;当第一请求为READS时,第一侦听指令为SNPS。第一侦听指令携带请求地址,多处理器设备中所有的Cache的缓存控制器都可以监听到该第一侦听指令,并根据请求地址以及缓存目录Cache查找是否存在命中该第一侦听指令的缓存行,若存在则命中的缓存行的代理可以根据该第一侦听指令对该缓存行进行相应处理,并在处理完后向内存控制器发送针对该第一侦听指令的第一侦听响应消息;若Cache中不存在命中的缓存行,则该Cache的缓存控制器向内存控制器发送针对该第一侦听指令的第一侦听响应消息,具体可参见图3-图6中的相关描述,本发明不在赘述。
其中,当第一侦听指令为SNPE,第一侦听响应消息为SNPI;当第一侦听指令为SNPS,第一侦听响应消息为SNPS或SNPI。
步骤S702:所述内存控制器在未发送针对所述第一请求的第一响应数据的情况下,接收第二缓存控制器代理第二缓存行发送的第二请求,暂停对所述第二请求的响应。
其中,第一响应数据为针对第一请求的响应数据,当第一请求为READE时,第一响应数据为E态响应数据,当第一缓存行初始状态为I态时,第一响应数据可携带内存中请求地址对应的数据。
其中,第二请求的请求类型可以是READE或READS。第二请求携带的请求地址与第一请求携带的请求地址相同,与该第二请求的请求类型对应地,用于请求E态响应数据或S态响应数据。
可以理解,第二缓存行的初始状态可以是M态、E态、S态、I态等中的一种。第二请求的请求类型可以是READE或READS。第二请求携带请求地址,与该第二请求的请求类型对应,用于请求E态响应数据或S态响应数据。
可以理解,内存控制器当前正在处理第一请求,当第一请求未处理完,即在未发送针对所述第一请求的第一响应数据的情况下,接收到与第一请求相冲突的第二请求时,内存控制器可以暂停对第二请求的响应,在处理完第一请求之后,再处理第二请求,避免数据冲突,维护数据的一致性。
步骤S704:所述内存控制器在已接收到第二缓存控制器发送的所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,向所述第一缓存控制器发送针对所述第一请求的第一响应数据。
可以理解,内存控制器在接收到第二缓存控制器发送的RSPC时,已接收到该第二缓存控制器发送的第二请求且未发送针对该第二请求的第二响应数据,则将RSPC当做RSPI处理,向所述第一缓存控制器发送针对所述第一请求的第一响应数据。
其中,第二响应数据为针对第二请求的响应数据,当第二请求为READE时,第二响应数据为E态响应数据,若第一缓存行初始状态为I态时,第二响应数据可携带内存中请求地址对应的数据。
需要说明的是,内存控制器在已接收到第二缓存控制器发送的所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对第一侦听指令的冲突报文,且已接收到多处理器系统中其他所有缓存控制器发送的第一侦听响应消息的情况下,内存控制器向第一缓存控制器发送针对第一请求的第一响应数据。
还需要说明的是,第二缓存控制器为所有缓存控制器中当前处理的请求与内存控制器当前处理的第一请求相冲突的缓存控制器,可以是多个缓存控制器。第一缓存控制器和第二缓存控制器部署于不同的Cache中。
本发明一实施例中,步骤S700之后,步骤702之前,该方法还包括:
步骤S701:内存控制器在未接收到第二缓存控制器发送的第二请求的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,重新广播所述第一侦听指令。
在图7所示的实施例中,内存控制器在接收到第二缓存控制器发送的RSPC时,若未接收第二缓存控制器代理第二缓存行发送的第二请求,则重新广播第一侦听指令,直至内存控制器接收到该第二请求,并暂停对该第二请求的响应,在处理完第一请求之后,再处理第二请求,避免数据冲突。
而且,本发明实施例仅仅在冲突时才发送报文,减少报文的处理过程,缩短数据的处理时间,提高数据的处理效率。
第二冲突情景:内存控制器到第一Cache发送的第一请求,广播针对第一请求的第一侦听指令时,其他Cache中正在处理与第一请求相冲突的第二请求,内存控制器的处理方法如下:
请参阅图8,图8是本发明实施例提供的另一种内存控制器中数据处理方法的流程示意图,该方法包括:
步骤S800:内存控制器接收第一缓存控制器代理第一缓存行发送的第一请求,并广播针对所述第一请求的第一侦听指令。
可以理解,第一缓存行的初始状态可以是M态、E态、S态、I态等中的一种。第一请求的请求类型可以是READE或READS。第一请求携带请求地址,与该第一请求的请求类型对应地,用于请求E态响应数据或S态响应数据。
第一侦听指令携带与第一请求相一致的请求地址。与第一请求的请求类型相对应,当第一请求为READE时,第一侦听指令为SNPE;当第一请求为READS时,第一侦听指令为SNPS。第一侦听指令携带请求地址,多处理器设备中所有的Cache的缓存控制器都可以监听到该第一侦听指令,并根据请求地址以及缓存目录Cache查找是否存在命中该第一侦听指令的缓存行,若存在则命中的缓存行的代理可以根据该第一侦听指令对该缓存行进行相应处理,并在处理完后向内存控制器发送针对该第一侦听指令的第一侦听响应消息;若Cache中不存在命中的缓存行,则该Cache的缓存控制器向内存控制器发送针对该第一侦听指令的第一侦听响应消息,具体可参见图3-图6中的相关描述,本发明不在赘述。
其中,当第一侦听指令为SNPE,第一侦听响应消息为SNPI;当第一侦听指令为SNPS,第一侦听响应消息为SNPS或SNPI。
步骤S802:所述内存控制器在已向第二缓存控制器发送针对第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,重新广播所述第一侦听指令。
可以理解,第二缓存行的初始状态可以是M态、E态、S态、I态等中的一种。第二请求的请求类型可以是READE或READS。第二请求携带的请求地址与第一请求携带请求地址相同,与该第二请求的请求类型对应,用于请求E态响应数据或S态响应数据。
其中,第二响应数据为对应第二请求的响应数据,当第二请求为READE时,第二响应数据为E态响应数据,当第二缓存行初始状态为I态时,第二响应数据还携带内存中请求地址对应的数据。
可以理解,内存控制器在接收到第二缓存控制器发送的针对所述第一侦听指令的冲突报文时,若已经向第二缓存控制器发送针对第二请求的第二响应数据,则内存控制器重新广播所述第一侦听指令,直至接收到第二缓存控制器发送的第一侦听响应消息。
步骤S804:所述内存控制器在接收到所述第二缓存控制器发送的针对所述第一侦听指令的第一侦听响应消息之后,向所述第一缓存控制器发送针对所述第一请求的第一响应数据。
其中,第一响应数据为针对第一请求的响应数据,当第一请求为READE时,第一响应数据为E态响应数据,当第一缓存行初始状态为I态时,第一响应数据携带内存中请求地址对应的数据。
其中,第一侦听响应消息用于响应第一侦听指令,与第二缓存控制器代理的缓存行的最终状态有关。当第一侦听指令为SNPE,第一侦听响应消息为SNPI;当第一侦听指令为SNPS,第一侦听响应消息为SNPS或SNPI。
可以理解,内存控制器在接收到包括第二缓存控制器在内所有其他缓存控制器发送的针对所述第一侦听指令的第一侦听响应消息之后,向所述第一缓存控制器发送针对所述第一请求的第一响应数据。
还需要说明的是,第二缓存控制器为所有缓存控制器中当前处理的请求与内存控制器当前处理的第一请求相冲突的缓存控制器,可以是多个缓存控制器。第一缓存控制器和第二缓存控制器部署于不同的Cache中。
在图8所示的实施例中,内存控制器在接收到第二缓存控制器发送的针对第一侦听指令的第一侦听响应消息之后,说明第二缓存控制器已经完成处理第二响应数据,且根据第一侦听指令,完成对第二缓存行的处理,此时,内存控制器可以响应第一请求,发送第一响应数据,避免了数据的冲突。提供系统运行的稳定性。
而且,仅仅在冲突时才发送报文,减少报文的处理过程,缩短数据的处理时间,提高数据的处理效率。
下面介绍以第二缓存控制器为例介绍缓存控制器中数据处理方法:
请参阅图9,图9是本发明实施例提供的另一种缓存控制器中数据处理方法的流程示意图,该方法包括:
步骤S900:第二缓存控制器代理第二缓存行向内存控制器发送第二请求。
其中,第二请求携带请求地址,用于向内存控制器请求第二响应数据。
可以理解,第二缓存行的初始状态可以是M态、E态、S态、I态等中的一种,第二请求的请求类型可以是READE或READS。第二请求携带请求地址,与该第二请求的请求类型对应,用于请求E态响应数据或S态响应数据。
可选地,第二缓存行的初始状态也可以是S态,第二请求的请求类型可以是READE,第二请求携带请求地址,用于请求E态响应数据。
步骤S902:所述第二缓存控制器在接收到针对所述第二请求的第二响应数据之前,接收所述内存控制器针对第一请求广播的第一侦听指令,向所述内存控制器发送冲突报文。
其中,第二响应数据为对应第二请求的响应数据,当第二请求为READE时,第二响应数据为E态响应数据,当第二缓存行初始状态为I态时,第二响应数据携带内存中请求地址对应的数据。
其中,所述第一请求为第一缓存控制器代理第一缓存行发送的请求,用于向所述内存控制器请求第一响应数据。所述第一请求携带的请求地址与所述第二请求携带的请求地址相同。
可选地,第一缓存行的初始状态可以是M态、E态、S态、I态等中的一种,第一请求的请求类型可以是READE或READS。第一请求携带请求地址,与该第一请求的请求类型对应,用于请求E态响应数据或S态响应数据。第一响应数据为对应第一请求的响应数据,当第一请求为READE时,第一响应数据为E态响应数据。
可以理解,第二缓存控制器完成第二请求之前,若接收到与第二请求向冲突的第一侦听指令时,第二缓存控制器直接发送针对第一侦听指令的冲突报文,而不进行数据处理。
步骤S904:所述第二缓存控制器在接收所述内存控制器发送的所述第二响应数据,根据所述第二响应数据对所述第二缓存行进行数据处理。
具体可参见下述图10或图11所示的实施例中,第二缓存控制器根据第二响应数据对所述第二缓存行进行数据处理的相关描述,本发明不再赘述。
本发明一实施例中,第二缓存控制器在接收到针对第二请求的第二响应数据之后,接收到内存控制器针对第一请求广播的第一侦听指令的情况下,向内存控制器发送针对第一侦听指令的第一侦听响应消息。
具体地,第二缓存控制器在接收到针对第二请求的第二响应数据之后,接收到内存控制器针对第一请求广播的第一侦听指令,即第二缓存控制器完成对第二请求的响应,此时第二缓存行的状态可以是M、E、S或I态等,第二缓存控制器响应该第一侦听指令,对第二缓存行进行进一步的数据处理,并在处理完成后向内存控制器发送针对第一侦听指令的第一侦听响应消息。
例如,若第二缓存行的状态为S态或E态,则第二缓存控制器监听到第一侦听指令,该第二缓存行为命中第一侦听指令的缓存行。若第一请求为READE时,第二缓存控制器释放第二缓存行,将第二缓存行的装修改为I态,并向内存控制器返回RSPI;若第一请求为READS时,第二缓存控制器将第二缓存行的装修改为S态,并向内存控制器发送RSPS。
又例如,第二缓存行的状态为M态,则第二缓存控制器监听到第一侦听指令,该第二缓存行为命中第一侦听指令的缓存行。第二缓存控制器对第二缓存行进行处理,并向内存控制器发送RSPIWB。若第一请求为READE时,第二缓存控制器,向内存控制器发送携带第二缓存行内数据的RSPIWB,释放第二缓存行,将第二缓存行的装修改为I态;若第一请求为READS时,第二缓存控制器将第二缓存行的装修改为S态,并向内存控制器发送携带第二缓存行内数据的RSPIWB。
还需要说明的是,第一缓存控制器为所有缓存控制器中当前处理请求与第二请求相冲突的缓存控制器,可以是多个缓存控制器。第一缓存控制器和第二缓存控制器部署于不同的Cache中。
在图9所示的实施例中,第二缓存控制器完成第二请求之前,若接收到与第二请求向冲突的第一侦听指令时,第二缓存控制器直接发送针对第一侦听指令的冲突报文,而不进行任何数据处理,在接收第二响应数据,并完成第二响应数据的处理后,才会根据接收到的第一侦听指令进行数据处理,进而避免数据的冲突。
下面从多个缓存控制器和内存控制器交互的角度介绍本发明实施例涉及的针对Cache的数据处理方法:
请参见图10,图10是本发明实施例提供的一种针对Cache的数据处理方法的流程示意图,该方法包括但不限于如下步骤:
步骤S1000:第一缓存控制器代理第一缓存行向内存控制器发送的第一请求。
其中,第一缓存行的初始状态可以是M态、E态、S态、I态等中的一种。第一请求的请求类型可以是READE或READS。第一请求携带请求地址,与该第一请求的请求类型对应地,用于请求E态响应数据或S态响应数据。
步骤S1002:第二缓存控制器代理第二缓存行向内存控制器发送的第二请求。
其中,所述第一请求携带请求地址与所述第二请求携带的请求地址相同。
可选地,第二缓存行的初始状态可以是M态、E态、S态、I态等中的一种,第二请求的请求类型可以是READE或READS。第二请求携带请求地址,与该第二请求的请求类型对应,用于请求E态响应数据或S态响应数据。
需要说明的是,步骤S1000和步骤S1002可以不分先后执行,也可以同时执行本发明不作限定。
步骤S1004:所述内存控制器接收所述第一请求,广播针对第一请求的第一侦听指令。
其中,第一侦听指令携带与第一请求相一致的请求地址。与第一请求的请求类型相对应,当第一请求为READE时,第一侦听指令为SNPE;当第一请求为READS时,第一侦听指令为SNPS。第一侦听指令携带请求地址,多处理器设备中所有的Cache的缓存控制器都可以监听到该第一侦听指令,并根据请求地址以及缓存目录Cache查找是否存在命中该第一侦听指令的缓存行,若存在则命中的缓存行的代理可以根据该第一侦听指令对该缓存行进行相应处理,并在处理完后向内存控制器发送针对该第一侦听指令的第一侦听响应消息;若Cache中不存在命中的缓存行,则该Cache的缓存控制器向内存控制器发送针对该第一侦听指令的第一侦听响应消息,具体可参见图3-图6中的相关描述,本发明不在赘述。
步骤S1006:所述第二缓存控制器在接收到针对第二请求的第二响应数据之前,接收到所述第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的冲突报文。
其中,冲突报文用于指示内存控制器当前处理的数据与第二缓存控制器处理的数据存在冲突。
其中,第二响应数据为针对第二请求的响应数据,当第二请求为READE时,第二响应数据为E态响应数据,若第一缓存行初始状态为I态时,第二响应数据可携带内存中请求地址对应的数据。
可以理解,第二缓存控制器在发送第二请求之后,未接收到内存控制器发送的针对第二请求的第二响应数据的情况下,接收到第一侦听指令,第二缓存控制器识别第一侦听指令携带的请求地址与第二请求的请求地址相同,与当前处理的第二请求存在冲突,第二缓存控制器向内存控制器发送针对该第一侦听指令的冲突报文,以报告内存控制器存在冲突。
步骤S1008:所述内存控制器接收所述冲突报文。
步骤S1010:内存控制器在未发送针对所述第一请求的第一响应数据的情况下,接收第二缓存控制器代理第二缓存行发送的第二请求,暂停对所述第二请求的响应。
可以理解,内存控制器当前正在处理第一请求,当第一请求未处理完,即在未发送针对所述第一请求的第一响应数据的情况下,接收到与第一请求相冲突的第二请求时,内存控制器可以暂停对第二请求的响应,在处理完第一请求之后,再处理第二请求,避免数据冲突,维护数据的一致性。
可以理解,步骤S1010可以在执行步骤S1002之后,执行步骤S1012之前的任意时间执行。
步骤S1012:所述内存控制器向所述第一缓存控制器发送针对所述第一请求的第一响应数据。
其中,第一响应数据为针对第一请求的响应数据,当第一请求为READE时,第一响应数据为E态响应数据,当第一缓存行初始状态为I态时,第一响应数据携带内存中请求地址对应的数据。
可以理解,内存控制器在已接收到第二缓存控制器发送的第二请求且未发送针对第二请求的第二响应数据的情况下,接收第二缓存控制器发送的针对第一侦听指令的冲突报文,向第一缓存控制器发送针对第一请求的第一响应数据。
步骤S1014:所述第一缓存控制器接收所述第一响应数据,并对所述第一缓存行进行处理。
可选地,第一缓存行初始状态为I态,第一请求为独占请求,第一侦听指令为独占侦听指令;第一响应数据为E态响应数据,携带内存中请求地址对应的数据;步骤S1014的一种实施方式可以是:第一缓存控制器在第一缓存行读入第一响应数据携带的数据,并修改第一缓存行的状态为E态。
可选地,第一缓存行初始状态为I态,第一请求为共享请求,第一侦听指令为共享侦听指令;第一响应数据为S态响应数据,携带内存中请求地址对应的数据;步骤S1014的一种实施方式可以是:第一缓存控制器在第一缓存行读入第一响应数据携带的数据,并修改第一缓存行的状态为S态。
可选地,第一缓存行初始状态为S态,第一请求为独占请求,第一侦听指令为独占侦听指令;第一响应数据为E态响应数据;步骤S1014的一种实施方式可以是:第一缓存控制器修改第一缓存行的状态为E态。
可以理解,第一缓存行初始状态还可以是E态、M态时,第一缓存控制控制器对第一缓存行进行处理的方法可以参见图3-图5中相关描述,本发明不再赘述。
步骤S1016:所述内存控制器响应所述第二请求,向所述第二缓存控制器发送第二响应数据。
可选地,步骤S1016的一种实施方式可以是:内存控制器发送携带请求地址的第二侦听指令;内存控制器在接收到其他所有缓存控制器针对第二侦听指令返回的第二侦听响应消息后,内存控制器向第二缓存控制器发送第二响应数据。可以理解,其他缓存控制器可以为除第二缓存控制器之外的所有缓存控制器,包括第一缓存控制器。
其中,第二侦听指令携带请求地址,多处理器设备中所有的Cache都可以监听到该第二侦听指令,并根据请求地址以及缓存目录Cache查找是否存在命中该第二侦听指令的缓存行,若存在则命中的缓存行的代理可以根据该第二侦听指令对该缓存行进行相应处理,具体可参见图3-图6中的相关描述,本发明不在赘述。可以理解,步骤S1014之后,若第一缓存行的状态为若为E态、S态或M态,则第一缓存行为命中的缓存行,第一缓存控制器根据第二侦听指令对第一缓存行进行处理,例如,第二请求为独占请求,第一缓存控制器释放该第一缓存行,修改第一缓存行的状态为I态,进而,向内存控制器返回SNPI。
步骤S1018:所述第二缓存控制器接收所述第二响应数据,并对所述第二缓存行进行处理。
可选地,第二缓存行的初始状态为I态,第二请求为独占请求,第二响应数据为E态响应数据,携带内存中请求地址对应的数据;步骤S1018的一种实施方式可以是:第二缓存控制器接收第二响应数据,在第二缓存行读入第二响应数据携带的数据,并修改第二缓存行的状态为E态。
可选地,第二缓存行的初始状态为I态,第二请求为共享请求,第二响应数据为S态响应数据,携带内存中请求地址对应的数据;步骤S1018的一种实施方式可以是:第二缓存控制器接收第二响应数据,在第二缓存行读入第二响应数据携带的数据,并修改第二缓存行的状态为S态。
可选地,第二缓存行的初始状态为S态,第二请求为独占请求;第二响应数据为E态响应数据;步骤S1018的一种实施方式可以是:第二缓存控制器第二响应数据,并修改第二缓存行的状态为E态。
可以理解,第二缓存行初始状态还可以是E态、M态时,第二缓存控制控制器对第二缓存行进行处理的方法可以参见图3-图5中相关描述,本发明不再赘述。
本发明一实施例中,步骤S1008之后,步骤S1010之前,该方法还可以包括:
步骤S1009:内存控制器在接收到所述冲突报文时,未接收到所述第二请求的情况下,重新发送所述第一侦听指令。
可以理解,内存控制器在接收到第二缓存控制器发送的针对第一侦听响应的冲突报文之后,若未接收到第二缓存控制器发送的第二请求,则重复侦听,直至接收到该第二请求,进而执行步骤S1010以及步骤S1012。
在图10所描述的方法中,第一缓存控制器代理第一缓存行向内存控制器发送的第一请求;第二缓存控制器代理第二缓存行向内存控制器发送的第二请求;其中,第一请求携带请求地址与第二请求携带的请求地址相同;内存控制器接收第一请求,广播针对第一请求的第一侦听指令;第二缓存控制器在接收到针对第二请求的第二响应数据之前,接收到第一侦听指令的情况下,向内存控制器发送针对第一侦听指令的冲突报文;内存控制器接收冲突报文,内存控制器在未发送针对第一请求的第一响应数据的情况下,接收第二缓存控制器代理第二缓存行发送的第二请求,暂停对第二请求的响应,进而向第一缓存控制器发送针对第一请求的第一响应数据,然后,再响应第二请求,向第二缓存控制器发送第二响应数据。实施本发明所述的方法,通过在检测到数据处理冲突时,内存控制器暂停对第二请求的响应,在处理完第一请求后,再响应第二请求,避免数据的冲突,进而避免系统出错,提高系统运行的稳定性。
而且,仅仅在冲突时才发送报文,减少报文的处理过程,缩短数据的处理时间,提高数据的处理效率。
下面结合具体实施例介绍图10所示的针对Cache的数据处理方法:
第一实施例:
请参阅图11,图11是本发明实施例提供的又一种针对Cache的数据处理方法的流程示意图。
第一缓存行的初始状态为I态,第二缓存行的初始状态为I态。代理第一缓存行的缓存控制器(CA1)可以向内存控制器(HA)发送携带请求地址的第一独占请求(READE1),同时,代理第二缓存行的缓存控制器(CA2)可以向内存控制器(HA)发送携带请求地址的第二独占请求(READE2)。HA接收到READE1后,响应该READE1发出第一侦听指令(SNPE1),CA2在监听到SNPE1后,识别存在与本CA2处理的数据存在冲突,向HA返回冲突报文(RSPC),HA在接收到RSPC时若已经接收到READE2,则响应READE1,向CA1返回第一响应数据(DATAE1),该DATAE1携带内存中请求地址对应的数据。CA1处理该DATAE1,即在第一缓存行内读入该DATAE1携带的数据,并将第一缓存行的状态修改为E态。然后,HA响应READE2发出第二侦听指令(SNPE2),CA1在监听到SNPE2后,查找到第一缓存行命中该SNPE2,CA1释放该第一缓存行,并修改该第一缓存行的状态为I态,向HA返回I态侦听响应消息(RSPI),HA在接收到RSPI后向CA2返回第二响应数据(DATAE2),该DATAE2携带内存中请求地址对应的数据。CA2处理该DATAE2,即在第二缓存行内读入该DATAE2携带的数据,并将第二缓存行的状态修改为E态。
第二实施例:
请参阅图12,图12是本发明实施例提供的又一种针对Cache的数据处理方法的流程示意图。
第一缓存行的初始状态为I态,第二缓存行的初始状态为I态。代理第一缓存行的缓存控制器(CA1)可以向内存控制器(HA)发送携带请求地址的第一独占请求(READE1),同时,代理第二缓存行的缓存控制器(CA2)可以向内存控制器(HA)发送携带请求地址的第二独占请求(READE2)。HA接收到READE1后,响应该READE1发出第一侦听指令(SNPE1),CA2在监听到SNPE1后,识别存在与本CA2处理的数据存在冲突,向HA返回冲突报文(RSPC),HA在接收到RSPC后若未接收到READE2,则再次发出SNPE1,CA1再次向HA返回RSPC,直到HA在接收到READE2。HA在接收到RSPC时已经接收到READE2,则响应READE1,向CA1返回第一响应数据(DATAE1),该DATAE1携带内存中请求地址对应的数据。CA1处理该DATAE1,即在第一缓存行内读入该DATAE1携带的数据,并将第一缓存行的状态修改为E态。然后,HA响应READE2发出第二侦听指令(SNPE2),CA1在监听到SNPE2后,查找到第一缓存行命中该SNPE2,CA1释放该第一缓存行,并修改该第一缓存行的状态为I态,向HA返回I态侦听响应消息(RSPI),HA在接收到RSPI后向CA2返回第二响应数据(DATAE2),该DATAE2携带内存中请求地址对应的数据。CA2处理该DATAE2,即在第二缓存行内读入该DATAE2携带的数据,并将第二缓存行的状态修改为E态。
请参见图13,图13是本发明实施例提供的又一种针对Cache的数据处理方法的流程示意图,该方法包括但不限于如下步骤:
步骤S1300:第二缓存控制器代理第二缓存行向内存控制器发送的第二请求。
其中,第二缓存行的初始状态可以是M态、E态、S态、I态等中的一种。第二请求的请求类型可以是READE或READS。第二请求携带请求地址,与该第二请求的请求类型对应,用于请求E态响应数据或S态响应数据。
步骤S1302:所述内存控制器响应所述第二请求,向所述第二缓存控制器发送第二响应数据。
其中,第二响应数据为对应第二请求的响应数据,当第二请求为READE时,第二响应数据为E态响应数据,当第二缓存行初始状态为I态时,第二响应数据携带内存中请求地址对应的数据。
可选地,步骤S1302的一种实施方式可以是:内存控制器发送携带请求地址的第二侦听指令;第三缓存控制器接收第二侦听指令,对命中第二侦听指令的缓存行进行处理,以及向内存控制器返回第二侦听响应消息,第三缓存控制器为命中的缓存行的代理。若命中的缓存行的初始状态为S态或E态,内存控制器在接收到第二侦听响应消息后,向第二缓存控制器发送第二响应数据。若命中的缓存行的初始状态为M态,第三缓存控制器向内存控制器发送RSPIWB并释放该命中的缓存行,修改该命中的缓存行的状态为I态,该RSPIWB携带命中的缓存行存储的数据,指示内存控制器将RSPIWB携带的数据回写到内存。内存控制器在接收到RSPIWB后,将RSPIWB携带的数据写入到中请求地址对应的内存,并向第一缓存控制器发送第二响应数据。其中,第二侦听指令携带请求地址,用于响应所述第二请求,与第二请求的请求类型相对应,当第二请求为READE时,第二侦听指令为SNPE;当第二请求为READS时,第二侦听指令为SNPS。
需要说明的是,未命中的缓存行的代理在监听到第二侦听指令后,向内存控制器返回第二侦听响应消息。内存控制器在接收到所有缓存控制器发送的第二侦听响应消息后,才执行向第二缓存控制器发送第二响应数据的操作。
步骤S1304:第一缓存控制器代理第一缓存行向内存控制器发送的第一请求。
其中,所述第一请求携带请求地址与所述第二请求携带的请求地址相同。
其中,第一缓存行的初始状态可以是M态、E态、S态、I态等中的一种,第一请求的请求类型可以是READE或READS。第一请求携带请求地址,与该第一请求的请求类型对应,用于请求E态响应数据或S态响应数据。
步骤S1306:所述内存控制器接收所述第一请求,广播第一侦听指令。
其中,第一侦听指令携带请求地址,用于响应第一请求。与第一请求的请求类型相对应,当第一请求为READE时,第一侦听指令为SNPE;当第一请求为READS时,第一侦听指令为SNPS。多处理器设备中所有的Cache的缓存控制器都可以监听到该第一侦听指令。
步骤S1308:所述第二缓存控制器在未接收到所述第二响应数据之前接收到所述第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的冲突报文。
其中,该冲突报文用于指示内存控制器当前处理的数据与第二缓存控制器处理的数据存在冲突。
步骤S1310:所述内存控制器在已向第二缓存控制器发送针对第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,重新广播所述第一侦听指令。
步骤S1312:所述第二缓存控制器接收所述第二响应数据,并对所述第二响应数据进行处理。
可选地,第二缓存行初始状态为I态,第二请求为独占请求,第二侦听指令为独占侦听指令;第二响应数据为E态响应数据,携带内存中请求地址对应的数据;步骤S1310的一种实施方式可以是:第二缓存控制器在第二缓存行读入第二响应数据携带的数据,并修改第二二缓存行的状态为E态。
可选地,第二缓存行初始状态为I态,第二请求为共享请求,第二侦听指令为共享侦听指令;第二响应数据为S态响应数据,携带内存中请求地址对应的数据;步骤S1310的一种实施方式可以是:第二缓存控制器在第二缓存行读入第二响应数据携带的数据,并修改第二缓存行的状态为S态。
可选地,第二缓存行初始状态为S态,第二请求为独占请求,第二侦听指令为独占侦听指令;第二响应数据为E态响应数据;步骤S1310的一种实施方式可以是:第二缓存控制器修改第二缓存行的状态为E态。
可以理解,第二缓存行初始状态还可以是E态、M态时,第二缓存控制控制器对第二缓存行进行处理的方法可以参见图3-图5中相关描述,本发明不再赘述。
步骤S1314:所述第二缓存控制器在接收到所述第二响应数据之后接收到所述第一侦听指令的情况下,向所述内存控制器返回第一侦听响应消息。
其中,第一侦听响应消息用于响应第一侦听指令,与第二缓存控制器代理的缓存行的最终状态有关。当第一侦听指令为SNPE,第一侦听响应消息为SNPI;当第一侦听指令为SNPS,第一侦听响应消息为SNPS或SNPI。
具体地,步骤S1312之后,若第二缓存行的状态为S态或E态,则第二缓存控制器监听到第一侦听指令,该第二缓存行为命中第一侦听指令的缓存行,第二缓存控制器根据第一侦听指令对第二缓存行进行数据处理,例如,当第一请求为READE时,第二缓存控制器释放第二缓存行,将第二缓存行的装修改为I态,并向内存控制器返回RSPI;又例如,当第一请求为READS时,第二缓存控制器将第二缓存行的装修改为S态,并向内存控制器返回RSPS。
需要说明的是,步骤S1312之后,若第二缓存行的状态为M态,第二缓存控制器监听到第一侦听指令,该第二缓存行为命中第一侦听指令的缓存行,第二缓存控制器释放第二缓存行,将第二缓存行的装修改为I态,并向内存控制器返回RSPIWB。
还需要说明的是,步骤S1312之后,若第二缓存行的状态为I态,若该Cache中不包括命中的缓存行,则第二缓存控制器监听到第一侦听指令,直接向内存控制器返回RSPI。
步骤S1316:所述内存控制器在接收到所述第二缓存控制器发送的第一侦听响应消息后,并向所述第一缓存控制器发送第一响应数据。
其中,第一响应数据为对应第一请求的响应数据,当第一请求为READE时,第一响应数据为E态响应数据,当第一缓存行初始状态为I态时,第一响应数据还携带内存中请求地址对应的数据。
可以理解,内存控制器在接收到其他所有缓存控制器针对第一侦听指令返回的第一侦听响应消息后,内存控制器向第一缓存控制器发送第一响应数据。可以理解,其他缓存控制器可以为除第一缓存控制器之外的所有缓存控制器,包括第二缓存控制器。
步骤S1318:所述第一缓存控制器接收所述第一响应数据,并对所述第一缓存行进行数据处理。
可选地,第一缓存行初始状态为I态,第一请求为独占请求,第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息,第一响应数据为E态响应数据,携带内存中请求地址对应的数据;步骤S1318的一种实施方式可以是:第一缓存控制器在第一缓存行读入第一响应数据携带的数据,并修改第一缓存行的状态为E态;或,
可选地,第一缓存行初始状态为I态,第一请求为共享请求,第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;第一响应数据为S态响应数据,携带内存中请求地址对应的数据;步骤S1318的一种实施方式可以是:第一缓存控制器在第一缓存行读入第一响应数据携带的数据,并修改第一缓存行的状态为S态
可选地,第一缓存行初始状态为S态,第一请求为独占请求,第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;第一响应数据为E态响应数据;步骤S1318的一种实施方式可以是:第一缓存控制器修改第一缓存行的状态为E态。
可以理解,第一缓存行初始状态还可以是E态、M态时,第一缓存控制控制器对第一缓存行进行处理的方法可以参见图3-图5中相关描述,本发明不再赘述。
在图13所描述的方法中,第二缓存控制器代理第二缓存行向内存控制器发送的第二请求;内存控制器响应第二请求,向第二缓存控制器发送等待第二响应数据;在第二缓存控制器接收到第二响应数据之前,第一缓存控制器代理第一缓存行向内存控制器发送的与第二请求相冲突的第一请求;内存控制器接收第一请求,发送针对第一请求的第一侦听指令;第二缓存控制器在未接收到第二响应数据之前接收到第一侦听指令的情况下,向内存控制器返回冲突报文;内存控制器接收到冲突报文后,重复发送第一侦听指令,第二缓存控制器在接收到第二响应数据之后接收到第一侦听指令的情况下,向内存控制器返回第二侦听响应消息;内存控制器在接收到第二缓存控制器发送的第二侦听响应消息后,再向第一缓存控制器发送针对第一请求的第一响应数据。实施本发明所述的方法,通过在检测到数据处理冲突时,内存控制器暂停对第一请求的响应,在处理完第二请求后,再响应第一请求,避免数据的冲突,进而避免系统出错,提高系统运行的稳定性。
而且,仅仅在冲突时才发送报文,减少报文的处理过程,缩短数据的处理时间,且第一侦听指令可以超越第二响应数据,在冲突数据处理过程中不需要严格保证侦听指令与响应数据的次序,数据处理效率更高。
下面结合具体实施例介绍图13所示的Cache一致性协议中冲突处理方法:
请参阅图14,图14是本发明实施例提供的又一种针对Cache的数据处理方法的流程示意图。
第一缓存行的初始状态为I态,第二缓存行的初始状态为I态。代理第一缓存行的缓存控制器(CA1)可以向内存控制器(HA)发送携带请求地址的第一独占请求(READE1),HA接收到READE1后,响应该READE1,向CA1返回第一响应数据(DATAE1)。在CA1接收到DATAE1之前,代理第二缓存行的缓存控制器(CA2)向内存控制器(HA)发送携带请求地址的第二独占请求(READE2),并且HA响应READE2,发出侦听指令(SNPE2),CA1监听到SNPE2时若还未接收到DATAE1,CA1识别与在与本CA1处理的数据存在冲突,向HA返回冲突报文(RSPC),HA接收到RSPC后,识别到数据处理冲突,HA继续发出SNPE2,直到接收到CA1返回的RSPI。CA1接收到DATAE1后,对DATAE1进行处理,处理完成后第一缓存行的状态转变为E态。CA1在接收到DATAE1后监听到SNPE2,CA1释放该第一缓存行,将第一缓存行的状态修改为I态,并向HA返回侦听响应消息(RSPI),HA接收到CA1返回的RSPI后,响应READE2,向CA2返回第二响应数据(DATAE2),该DATAE2携带内存中请求地址对应的数据,CA2在接收到DATAE2后,在第二缓存行内读入DATAE2携带的数据吧,并修改第二缓存行的状态为E态。
可以理解,HA接收到READE1后,响应该READE1的过程还包括广播第一侦听指令,并接收其他缓存控制器发送的I态侦听响应消息(RSPI或RSPIWB),才向CA1返回第一响应数据(DATAE1)。
上述详细阐述了本发明实施例的方法,下面提供了本发明实施例涉及的元件、设备、系统。
请参见图15,图15是本发明实施例提供的一种内存控制器的架构示意图,该内存控制器150包括:接收单元1510、广播单元1520、暂停单元1530以及第一冲突处理单元1540,各个单元的详细描述如下:
接收单元1510,用于接收第一缓存控制器代理第一缓存行发送的第一请求;
广播单元1520,用于广播针对所述第一请求的第一侦听指令;
暂停单元1530,用于在未发送针对所述第一请求的第一响应数据的情况下,接收第二缓存控制器代理第二缓存行发送的第二请求,暂停对所述第二请求的响应;
第一冲突处理单元1540,用于在已接收到所述第二缓存控制器发送的所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,向所述第一缓存控制器发送针对所述第一请求的第一响应数据;
其中,所述第一请求用于请求第一响应数据,所述第二请求用于请求第二响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
在一种可能的实现方式中,如图15所示,所述内存控制器150还包括:
所述第二冲突处理单元1550,用于在未接收到第二缓存控制器发送的第二请求的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,重新广播所述第一侦听指令。
在又一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
需要说明的是,各个单元的实现还可以对应参照图7以及图10-图12所示的方法实施例的相应描述。
实施图15所示的内存控制器,内存控制器当前正在处理第一请求,当第一请求未处理完,即在未发送针对所述第一请求的第一响应数据的情况下,接收到与第一请求相冲突的第二请求时,内存控制器可以暂停对第二请求的响应,在处理完第一请求之后,再处理第二请求,避免数据冲突,维护数据的一致性。
而且,内存控制器在接收到第二缓存控制器发送的RSPC时,若未接收第二缓存控制器代理第二缓存行发送的第二请求,则重新广播第一侦听指令,直至内存控制器接收到该第二请求,并暂停对该第二请求的响应,在处理完第一请求之后,再处理第二请求,避免数据冲突,维护数据的一致性。
而且,本发明实施例仅仅在冲突时才发送报文,减少报文的处理过程,缩短数据的处理时间,提高数据的处理效率。
请参见图16,图16是本发明实施例提供的另一种内存控制器的架构示意图,该内存控制器160包括:接收单元1610、广播单元1620、冲突处理单元1630以及响应单元1640,各个单元的详细描述如下:
接收单元1610,用于接收第一缓存控制器代理第一缓存行发送的第一请求;
广播单元1620,用于广播针对所述第一请求的第一侦听指令;
冲突处理单元1630,用于在已向第二缓存控制器发送针对第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,重新广播所述第一侦听指令;
响应单元1640,用于在接收到所述第二缓存控制器发送的针对所述第一侦听指令的第一侦听响应消息之后,向所述第一缓存控制器发送针对所述第一请求的第一响应数据;
其中,所述第一请求用于请求第一响应数据,所述第二请求用于请求第二响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
在一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
需要说明的是,各个单元的实现还可以对应参照图8和图13-14所示的方法实施例的相应描述。
实施图16所示的内存控制器,内存控制器在接收到第二缓存控制器发送的针对所述第一侦听指令的冲突报文时,若已经向第二缓存控制器发送针对第二请求的第二响应数据,则内存控制器重新广播所述第一侦听指令,直至接收到第二缓存控制器发送的第一侦听响应消息;内存控制器在接收到第二缓存控制器发送的针对第一侦听指令的第一侦听响应消息之后,说明第二缓存控制器已经完成处理第二响应数据,且根据第一侦听指令,完成对第二缓存行的处理,此时,内存控制器可以响应第一请求,发送第一响应数据,避免了数据的冲突。提供系统运行的稳定性。
而且,仅仅在冲突时才发送报文,减少报文的处理过程,缩短数据的处理时间,提高数据的处理效率。
请参见图17,图17是本发明实施例提供的一种第二缓存控制器的架构示意图,该第二缓存控制器170包括:请求发送单元1710、报文发送单元1720以及接收处理单元1730,各个单元的详细描述如下:
请求发送单元1710,用于代理第二缓存行向内存控制器发送第二请求;
报文发送单元1720,用于在接收到针对所述第二请求的第二响应数据之前,接收所述内存控制器针对第一请求广播的第一侦听指令,向所述内存控制器发送冲突报文;
接收处理单元1730,用于接收所述内存控制器发送的所述第二响应数据,根据所述第二响应数据对所述第二缓存行进行数据处理;
其中,所述第一请求为第一缓存控制器代理第一缓存行发送的请求,用于请求第一响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
在一种可能的实现方式中,如图17所示,所述缓存控制器170还包括:
侦听响应单元1740,用于在接收到针对所述第二请求的第二响应数据之后,接收到所述内存控制器针对第一请求广播的第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的第一侦听响应消息。
在又一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
需要说明的是,各个单元的实现还可以对应参照图9和图10-14所示的方法实施例的相应描述。
实施图16所示的第二缓存控制器,第二缓存控制器完成第二请求之前,若接收到与第二请求向冲突的第一侦听指令时,第二缓存控制器直接发送针对第一侦听指令的冲突报文,而不进行任何数据处理,在接收第二响应数据,并完成第二响应数据的处理后,才会根据接收到的第一侦听指令进行数据处理,进而避免数据的冲突。
请参见图18,图18是本发明实施例提供的一种多处理器设备的架构示意图,该多处理器设备180包括:至少一个处理器(CPU)以及存储系统,其中,各个处理器包括至少一个Cache,比如第一处理器包括第一Cache1810,第一Cache包括第一数据缓存区1811和第一缓存控制器1812,第一数据缓存区1811包括第一缓存行在内的多个缓存行;第二处理器包括第二Cache1820,第二Cache包括第二数据缓存区1821和第二缓存控制器1822,第二数据缓存区1821包括第二缓存行在内的多个缓存行。存储系统包括内存1830和内存控制器1840。可以理解,第一缓存控制器1812、第二缓存控制器1822以及内存控制器1840之间可以通过总线1850通信;多处理器设备180可以包括一个多核的处理器,第一Cache1810和第二Cache1820可以位于同一处理器不同的核中,存储系统还可以包括其他形式的存储器,本发明不作限定。各个器件的详细描述如下:
第一缓存控制器1812用于:代理第一缓存行向内存控制器发送的第一请求;
所述第二缓存控制器1822用于:在所述内存控制器发送针对所述第一请求的第一响应数据之前,代理第二缓存行向内存控制器发送的第二请求;以及,在在接收到针对所述第二请求的第二响应数据之前,接收到所述第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的冲突报文;
内存控制器1840用于:接收所述第一请求,广播针对所述第一请求的第一侦听指令;接收所述第二请求以及所述冲突报文;以及,
在接收所述冲突报文之前,接收到所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,暂停响应所述第二请求,并向第一缓存控制器1812发送针对所述第一请求的第一响应数据;或者,在接收所述冲突报文之前,接收到所述第二请求且已发送针对所述第二请求的第二响应数据的情况下,重新发送所述第一侦听指令,并在接收到所述第二缓存针对所述第一侦听指令的第一侦听响应消息后,向所述第一缓存控制器1812发送所述第一响应数据;
其中,所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存控制器进行数据处理。
在一种可能的实现方式中,所述内存控制器1840还用于:
在接收所述冲突报文时,未接收到所述第二请求的情况下,重新发送所述第一侦听指令。
在一种可能的实现方式中,所述第二缓存控制器1822还用于:
在接收到针对所述第二请求的第二响应数据之后,接收到所述内存控制器1840针对第一请求广播的第一侦听指令的情况下,向所述内存控制器1840发送针对所述第一侦听指令的第一侦听响应消息。
在又一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
需要说明的是,各个单元的实现还可以对应参照图7-14所示的方法实施例的相应描述。
实施图18所示的多处理器设备,通过在检测到数据处理冲突时,内存控制器暂停对第二请求的响应,在处理完第一请求后,再响应第二请求;或暂停对第一请求的响应,在处理完第二请求后,再响应第一请求,进而,避免数据的冲突,避免系统出错,提高系统运行的稳定性。
而且,仅仅在冲突时才发送报文,减少报文的处理过程,缩短数据的处理时间,提高数据的处理效率。
请参见图19,图19是本发明实施例提供的一种多处理器系统的架构示意图,该多处理器系统190包括:至少一个处理设备以及存储系统,该处理器设备包括至少一个处理器(CPU),其中,各个处理设备包括至少一个处理器,该处理器包括至少一个Cache,比如第一处理设备1910包括第一Cache1911,第一Cache包括第一数据缓存区19111和第一缓存控制器19112,第一数据缓存区19111包括第一缓存行在内的多个缓存行;第二处理设备1920包括第二Cache1921,第二Cache包括第二数据缓存区19211和第二缓存控制器19212,第二数据缓存区19211包括第二缓存行在内的多个缓存行。存储系统包括内存1930和内存控制器1940。可以理解,存储系统可以部署于处理设备中,也可以作为独立设备,各个处理设备和存储系统通过总线连接,存储系统还可以包括其他形式的存储器,本发明不作限定。各个器件的详细描述如下:
第一缓存控制器19112用于:代理第一缓存行向内存控制器发送的第一请求;
所述第二缓存控制器19212用于:在所述内存控制器发送针对所述第一请求的第一响应数据之前,代理第二缓存行向内存控制器发送的第二请求;以及,在在接收到针对所述第二请求的第二响应数据之前,接收到所述第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的冲突报文;
内存控制器1940用于:接收所述第一请求,广播针对所述第一请求的第一侦听指令;接收所述第二请求以及所述冲突报文;以及,
在接收所述冲突报文之前,接收到所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,暂停响应所述第二请求,并向第一缓存控制器19112发送针对所述第一请求的第一响应数据;或者,在接收所述冲突报文之前,接收到所述第二请求且已发送针对所述第二请求的第二响应数据的情况下,重新发送所述第一侦听指令,并在接收到所述第二缓存针对所述第一侦听指令的第一侦听响应消息后,向所述第一缓存控制器19112发送所述第一响应数据;
其中,所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存控制器进行数据处理。
在一种可能的实现方式中,所述内存控制器1940还用于:
在接收所述冲突报文时,未接收到所述第二请求的情况下,重新发送所述第一侦听指令。
在一种可能的实现方式中,所述第二缓存控制器19212还用于:
在接收到针对所述第二请求的第二响应数据之后,接收到所述内存控制器1940针对第一请求广播的第一侦听指令的情况下,向所述内存控制器1940发送针对所述第一侦听指令的第一侦听响应消息。
在又一种可能的实现方式中,所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
在又一种可能的实现方式中,所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
需要说明的是,各个单元的实现还可以对应参照图7-14所示的方法实施例的相应描述。
实施图19所示的多处理器系统,通过在检测到数据处理冲突时,内存控制器暂停对第二请求的响应,在处理完第一请求后,再响应第二请求;或暂停对第一请求的响应,在处理完第二请求后,再响应第一请求,进而,避免数据的冲突,避免系统出错,提高系统运行的稳定性。
而且,仅仅在冲突时才发送报文,减少报文的处理过程,缩短数据的处理时间,提高数据的处理效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:ROM或随机存储记忆体RAM、磁碟或者光盘等各种可存储程序代码的介质。
Claims (18)
1.一种针对高速缓存数据处理方法,其特征在于,包括:
内存控制器接收第一缓存控制器代理第一缓存行发送的第一请求,并广播针对所述第一请求的第一侦听指令;
所述内存控制器在未发送针对所述第一请求的第一响应数据的情况下,接收第二缓存控制器代理第二缓存行发送的第二请求,暂停对所述第二请求的响应;
所述内存控制器在已接收到所述第二缓存控制器发送的所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,向所述第一缓存控制器发送针对所述第一请求的第一响应数据;
其中,所述第一请求用于请求第一响应数据,所述第二请求用于请求第二响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
2.如权利要求1所述的方法,其特征在于,所述内存控制器广播针对所述第一请求的第一侦听指令之后,所述内存控制器接收第二缓存控制器代理第二缓存行发送的第二请求之前,所述方法还包括:
所述内存控制器在未接收到第二缓存控制器发送的第二请求的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,重新广播所述第一侦听指令。
3.一种针对高速缓存数据处理方法,其特征在于,包括:
内存控制器接收第一缓存控制器代理第一缓存行发送的第一请求,并广播针对所述第一请求的第一侦听指令;
所述内存控制器在已向第二缓存控制器发送针对第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,重新广播所述第一侦听指令;
所述内存控制器在接收到所述第二缓存控制器发送的针对所述第一侦听指令的第一侦听响应消息之后,向所述第一缓存控制器发送针对所述第一请求的第一响应数据;
其中,所述第一请求用于请求第一响应数据,所述第二请求用于请求第二响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
4.一种针对高速缓存的数据处理方法,其特征在于,包括:
第二缓存控制器代理第二缓存行向内存控制器发送第二请求;
所述第二缓存控制器在接收到针对所述第二请求的第二响应数据之前,接收所述内存控制器针对第一请求广播的第一侦听指令,向所述内存控制器发送冲突报文;
所述第二缓存控制器接收所述内存控制器发送的所述第二响应数据,根据所述第二响应数据对所述第二缓存行进行数据处理;
其中,所述第一请求为第一缓存控制器代理第一缓存行发送的请求,用于请求第一响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
5.如权利要求4所述的方法,其特征在于,所述方法还包括:
所述第二缓存控制器在接收到针对所述第二请求的第二响应数据之后,接收到所述内存控制器针对第一请求广播的第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的第一侦听响应消息。
6.一种针对高速缓存的数据处理方法,其特征在于,包括:
第一缓存控制器代理第一缓存行向内存控制器发送的第一请求;
在所述内存控制器发送针对所述第一请求的第一响应数据之前,所述第二缓存控制器代理第二缓存行向内存控制器发送的第二请求;
内存控制器接收第一请求,广播针对所述第一请求的第一侦听指令;
所述第二缓存控制器在接收到针对所述第二请求的第二响应数据之前,接收到所述第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的冲突报文;
所述内存控制器接收所述冲突报文;
所述内存控制器在接收所述冲突报文之前,接收到所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,暂停响应所述第二请求,并向第一缓存控制器发送针对所述第一请求的第一响应数据;或者,所述内存控制器在接收所述冲突报文之前,接收到所述第二请求且已发送针对所述第二请求的第二响应数据的情况下,重新发送所述第一侦听指令,并在接收到所述第二缓存针对所述第一侦听指令的第一侦听响应消息后,向所述第一缓存控制器发送针对所述第一请求的第一响应数据;
其中,所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存控制器进行数据处理。
7.如权利要求6所述的方法,其特征在于,所述方法还包括:所述内存控制器在接收所述冲突报文时,未接收到所述第二请求的情况下,重新发送所述第一侦听指令。
8.如权利要求1-7任意一项权利要求所述的方法,其特征在于,
所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
9.如权利要求1-8任意一项权利要求所述的方法,其特征在于,
所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
10.一种内存控制器,其特征在于,所述内存控制器包括:
接收单元,用于接收第一缓存控制器代理第一缓存行发送的第一请求;
广播单元,用于广播针对所述第一请求的第一侦听指令;
暂停单元,用于在未发送针对所述第一请求的第一响应数据的情况下,接收第二缓存控制器代理第二缓存行发送的第二请求,暂停对所述第二请求的响应;
第一冲突处理单元,用于在已接收到所述第二缓存控制器发送的所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,向所述第一缓存控制器发送针对所述第一请求的第一响应数据;
其中,所述第一请求用于请求第一响应数据,所述第二请求用于请求第二响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
11.如权利要求10权利要求所述的内存控制器,其特征在于,所述内存控制器还包括:
所述第二冲突处理单元,用于在未接收到第二缓存控制器发送的第二请求的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,重新广播所述第一侦听指令。
12.一种内存控制器,其特征在于,所述内存控制器包括:
接收单元,用于接收第一缓存控制器代理第一缓存行发送的第一请求;
广播单元,用于广播针对所述第一请求的第一侦听指令;
冲突处理单元,用于在已向第二缓存控制器发送针对第二请求的第二响应数据的情况下,接收所述第二缓存控制器发送的针对所述第一侦听指令的冲突报文,重新广播所述第一侦听指令;
响应单元,用于在接收到所述第二缓存控制器发送的针对所述第一侦听指令的第一侦听响应消息之后,向所述第一缓存控制器发送针对所述第一请求的第一响应数据;
其中,所述第一请求用于请求第一响应数据,所述第二请求用于请求第二响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
13.一种缓存控制器,其特征在于,所述缓存控制器包括:
请求发送单元,用于代理第二缓存行向内存控制器发送第二请求;
报文发送单元,用于在接收到针对所述第二请求的第二响应数据之前,接收所述内存控制器针对第一请求广播的第一侦听指令,向所述内存控制器发送冲突报文;
接收处理单元,用于接收所述内存控制器发送的所述第二响应数据,根据所述第二响应数据对所述第二缓存行进行数据处理;
其中,所述第一请求为第一缓存控制器代理第一缓存行发送的请求,用于请求第一响应数据;所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第二响应数据用于指示所述第二缓存控制器对第二缓存行进行数据处理。
14.如权利要求13所述的缓存控制器,其特征在于,所述缓存控制器还包括:
侦听响应单元,用于在接收到针对所述第二请求的第二响应数据之后,接收到所述内存控制器针对第一请求广播的第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的第一侦听响应消息。
15.一种多处理器设备,其特征在于,包括:第一缓存控制器、第二缓存控制器以及内存控制器,其中,
第一缓存控制器用于:代理第一缓存行向内存控制器发送的第一请求;
所述第二缓存控制器用于:在所述内存控制器发送针对所述第一请求的第一响应数据之前,代理第二缓存行向内存控制器发送的第二请求;以及,在在接收到针对所述第二请求的第二响应数据之前,接收到所述第一侦听指令的情况下,向所述内存控制器发送针对所述第一侦听指令的冲突报文;
内存控制器用于:接收所述第一请求,广播针对所述第一请求的第一侦听指令;接收所述第二请求以及所述冲突报文;以及,
在接收所述冲突报文之前,接收到所述第二请求且未发送针对所述第二请求的第二响应数据的情况下,暂停响应所述第二请求,并向第一缓存控制器发送针对所述第一请求的第一响应数据;或者,所述内存控制器在接收所述冲突报文之前,接收到所述第二请求且已发送针对所述第二请求的第二响应数据的情况下,重新发送所述第一侦听指令,并在接收到所述第二缓存针对所述第一侦听指令的第一侦听响应消息后,向所述第一缓存控制器发送所述第一响应数据;
其中,所述第一请求携带的请求地址与所述第二请求携带的请求地址相同;所述第一响应数据用于指示所述第一缓存控制器对第一缓存行进行数据处理,所述第二响应数据用于指示所述第二缓存控制器对第二缓存控制器进行数据处理。
16.如权利要求15所述的多处理器设备,其特征在于,所述内存控制器还用于:
在接收所述冲突报文时,未接收到所述第二请求的情况下,重新发送所述第一侦听指令。
17.如权利要求15或16所述的多处理器设备,其特征在于,
所述第一请求为独占请求,所述第一侦听指令为独占侦听指令;第一侦听响应消息为I态侦听响应消息;所述第一响应数据为E态响应数据;或,
所述第一请求为共享请求,所述第一侦听指令为共享侦听指令;第一侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第一响应数据为S态响应数据。
18.如权利要求15-17任意一项权利要求所述的多处理器设备,其特征在于,
所述第二请求为独占请求,所述第二侦听指令为独占侦听指令;第二侦听响应消息为I态侦听响应消息;所述第二响应数据为E态响应数据;或,
所述第二请求为共享请求,所述第二侦听指令为共享侦听指令;第二侦听响应消息为I态侦听响应消息或S态侦听响应消息;所述第二响应数据为S态响应数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711224355.9A CN109840216B (zh) | 2017-11-28 | 2017-11-28 | 针对高速缓存的数据处理方法及相关元件、设备、系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711224355.9A CN109840216B (zh) | 2017-11-28 | 2017-11-28 | 针对高速缓存的数据处理方法及相关元件、设备、系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109840216A true CN109840216A (zh) | 2019-06-04 |
CN109840216B CN109840216B (zh) | 2023-05-09 |
Family
ID=66881936
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711224355.9A Active CN109840216B (zh) | 2017-11-28 | 2017-11-28 | 针对高速缓存的数据处理方法及相关元件、设备、系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109840216B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111415291A (zh) * | 2020-02-21 | 2020-07-14 | 华为技术有限公司 | 一种多核芯片及其调度方法 |
CN114116531A (zh) * | 2022-01-28 | 2022-03-01 | 苏州浪潮智能科技有限公司 | 一种缓存一致性写回的方法、装置、设备及介质 |
CN116089116A (zh) * | 2022-12-16 | 2023-05-09 | 成都海光集成电路设计有限公司 | 数据处理方法及装置 |
CN117806992A (zh) * | 2024-02-29 | 2024-04-02 | 山东云海国创云计算装备产业创新中心有限公司 | 数据块替换方法、装置、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040122966A1 (en) * | 2002-12-19 | 2004-06-24 | Hum Herbert H. J. | Speculative distributed conflict resolution for a cache coherency protocol |
US20050160236A1 (en) * | 2004-01-20 | 2005-07-21 | Tierney Gregory E. | System and method for read migratory optimization in a cache coherency protocol |
CN102591800A (zh) * | 2011-12-31 | 2012-07-18 | 龙芯中科技术有限公司 | 一种弱一致性存储模型的数据访存系统和方法 |
CN104520824A (zh) * | 2012-07-31 | 2015-04-15 | 华为技术有限公司 | 为缓存一致性处理缓存回写和缓存淘汰 |
WO2015188676A1 (zh) * | 2014-06-11 | 2015-12-17 | 华为技术有限公司 | 一种缓存数据的方法及存储设备 |
-
2017
- 2017-11-28 CN CN201711224355.9A patent/CN109840216B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040122966A1 (en) * | 2002-12-19 | 2004-06-24 | Hum Herbert H. J. | Speculative distributed conflict resolution for a cache coherency protocol |
US20050160236A1 (en) * | 2004-01-20 | 2005-07-21 | Tierney Gregory E. | System and method for read migratory optimization in a cache coherency protocol |
CN102591800A (zh) * | 2011-12-31 | 2012-07-18 | 龙芯中科技术有限公司 | 一种弱一致性存储模型的数据访存系统和方法 |
CN104520824A (zh) * | 2012-07-31 | 2015-04-15 | 华为技术有限公司 | 为缓存一致性处理缓存回写和缓存淘汰 |
WO2015188676A1 (zh) * | 2014-06-11 | 2015-12-17 | 华为技术有限公司 | 一种缓存数据的方法及存储设备 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111415291A (zh) * | 2020-02-21 | 2020-07-14 | 华为技术有限公司 | 一种多核芯片及其调度方法 |
WO2021164560A1 (zh) * | 2020-02-21 | 2021-08-26 | 华为技术有限公司 | 一种多核芯片及其调度方法 |
CN111415291B (zh) * | 2020-02-21 | 2021-09-21 | 华为技术有限公司 | 一种多核芯片及其调度方法 |
CN114116531A (zh) * | 2022-01-28 | 2022-03-01 | 苏州浪潮智能科技有限公司 | 一种缓存一致性写回的方法、装置、设备及介质 |
CN114116531B (zh) * | 2022-01-28 | 2022-04-22 | 苏州浪潮智能科技有限公司 | 一种缓存一致性写回的方法、装置、设备及介质 |
CN116089116A (zh) * | 2022-12-16 | 2023-05-09 | 成都海光集成电路设计有限公司 | 数据处理方法及装置 |
CN116089116B (zh) * | 2022-12-16 | 2024-05-31 | 成都海光集成电路设计有限公司 | 数据处理方法及装置 |
WO2024124710A1 (zh) * | 2022-12-16 | 2024-06-20 | 成都海光集成电路设计有限公司 | 数据处理方法及装置 |
CN117806992A (zh) * | 2024-02-29 | 2024-04-02 | 山东云海国创云计算装备产业创新中心有限公司 | 数据块替换方法、装置、电子设备及存储介质 |
CN117806992B (zh) * | 2024-02-29 | 2024-06-07 | 山东云海国创云计算装备产业创新中心有限公司 | 数据块替换方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109840216B (zh) | 2023-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109840216A (zh) | 针对高速缓存的数据处理方法及相关元件、设备、系统 | |
CN103440223B (zh) | 一种实现高速缓存一致性协议的分层系统及其方法 | |
JP4322259B2 (ja) | マルチプロセッサシステムにおけるローカルメモリへのデータアクセスを同期化する方法および装置 | |
CN101978359B (zh) | 在不同高速缓存一致性域之间共享信息的技术 | |
US9239789B2 (en) | Method and apparatus for monitor and MWAIT in a distributed cache architecture | |
TWI416322B (zh) | 最佳化以目錄為基礎的一致性協定中之同時存取 | |
CN103970712B (zh) | 多核处理系统与方法 | |
US8095733B2 (en) | Virtual barrier synchronization cache castout election | |
CN104106061B (zh) | 多处理器数据处理系统以及其中的方法、高速缓存存储器和处理单元 | |
CN104508645B (zh) | 用于使用多个子锁来控制对具有读取器‑写入器锁的共享数据结构的访问的系统和方法 | |
JP2010507160A (ja) | データ処理装置の共有メモリへの書込みアクセス要求の処理 | |
CN104991868B (zh) | 一种多核处理器系统和缓存一致性处理方法 | |
JP2006510119A (ja) | マルチプロセッサ・システムにおけるキャッシュ・コヒーレンスにおいて用いるフォワード状態 | |
CN105335308B (zh) | 对存储设备的访问信息处理方法和装置、系统 | |
US7308538B2 (en) | Scope-based cache coherence | |
US9652390B2 (en) | Moving data between caches in a heterogeneous processor system | |
WO2013101092A1 (en) | Data control using last accessor information | |
WO2004044744A2 (en) | Methods and apparatus for multiple cluster locking | |
CN109753445A (zh) | 一种缓存访问方法、多级缓存系统及计算机系统 | |
JP5265827B2 (ja) | ハイブリッドコヒーレンスプロトコル | |
CN102866923A (zh) | 对称多核的高效一致性侦听过滤装置 | |
JP2009223759A (ja) | 情報処理装置,メモリ制御方法およびメモリ制御装置 | |
CN108415861A (zh) | 缓存内容管理 | |
CN102439571A (zh) | 一种防止节点控制器死锁的方法及节点控制器 | |
CN110083548A (zh) | 数据处理方法及相关网元、设备、系统 |
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 |