CN109597776A - 一种数据操作方法、内存控制器以及多处理器系统 - Google Patents
一种数据操作方法、内存控制器以及多处理器系统 Download PDFInfo
- Publication number
- CN109597776A CN109597776A CN201710938599.7A CN201710938599A CN109597776A CN 109597776 A CN109597776 A CN 109597776A CN 201710938599 A CN201710938599 A CN 201710938599A CN 109597776 A CN109597776 A CN 109597776A
- Authority
- CN
- China
- Prior art keywords
- data
- cache
- copy
- controller hub
- memory controller
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1652—Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
- G06F13/1663—Access to shared memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0868—Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/167—Interprocessor communication using a common memory, e.g. mailbox
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种数据操作方法、内存控制器以及多处理器系统,用以解决多处理器系统中cache获得独占态数据耗时较长的问题。该方法包括:内存控制器接收第一处理器的第一cache发送的获得第一数据的独占态拷贝的第一请求,第一数据的独占态拷贝表示多处理器的cache中只有保存独占态拷贝的cache保存有第一数据的拷贝;若第二处理器的第二cache保存有第一数据的拷贝且没有cache保存第一数据的修改版本,则内存控制器根据第一指示参数从内存读取第一数据,向第一cache发送第一数据的独占态拷贝;并向第二cache发送无效侦听请求,指示第二cache将第一数据的拷贝设置为无效状态。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据操作方法、内存控制器以及多处理器系统。
背景技术
多处理器系统凭借高性能,高扩展性和易于编程的环境等特点,得到了广泛应用。多处理器系统包括多个处理器以及内存(或称为主存储器),多个处理器共享内存的空间,每个处理器拥有自己的私有cache,处理器的cache可以缓存内存中的数据。
为了保证多处理器系统中数据的一致性,处理器的cache独占数据时,内存控制器需要侦听存储有该数据的其它cache,对存储该数据的其它cache中数据进行无效,在此之后,该处理器的cache才能独占数据。上述现有技术导致处理器的cache获得独占态数据的耗时较长。
发明内容
本申请提供一种数据操作方法、内存控制器以及多处理器系统,用以解决现有技术中存在的多处理器系统中cache获得独占态数据耗时较长的问题。
第一方面,本申请提供一种数据操作方法,所述方法应用于多处理器系统,所述多处理器系统包括至少两个处理器、内存控制器以及内存,所述至少两个处理器中每个处理器包括处理器内核core以及缓存cache,所述内存用于存储数据,所述cache用于存储内存中数据的拷贝或修改版本;所述数据的拷贝包括共享态拷贝以及独占态拷贝,共享态拷贝表明存在至少一个cache保存该数据,独占态拷贝表明只有一个cache保存该数据,数据的修改版本表示只有一个cache保存数据且该cache保存的数据与内存中不同。所述方法包括:内存控制器接收第一处理器的第一cache发送的获得第一数据的独占态拷贝的第一请求;内存控制器本地维护有第一数据的状态确定是否有cache保存第一数据及其保存第一数据的权限,若第二处理器的第二cache保存有所述第一数据的拷贝且没有cache保存所述第一数据的修改版本,则所述内存控制器根据所述第一请求包括的指示所述第一数据的第一指示参数从内存读取所述第一数据,向所述第一cache发送所述第一数据的独占态拷贝;该第一指示参数可以为第一数据的标识或者第一数据在内存中的存储地址。内存控制器还向所述第二cache发送无效侦听请求,所述无效侦听请求用于指示所述第二cache将第一数据的拷贝设置为无效状态。其中,内存控制器向第一cache发送第一数据与向第二cache发送无效侦听请求可以同时进行,也可以在相差不大的时间段内分别执行。
上述技术方案中,在第一cache请求第一数据的独占态拷贝时,内存控制器在确定没有cache保存第一数据的修改版本之后,可以直接从内存读取该第一数据,将第一数据返回给第一cache,而不用等待对保存有第一数据的拷贝的其它cache中的第一数据被无效后才向第一cache返回第一数据。由于避免了等待无效侦听请求以及无效侦听响应的时延,可以减少第一cache获取第一数据的独占态拷贝的耗时,尤其是在多处理器系统包括较多的cache,第一数据被多个cache共享的场景中,第一cache获取第一数据的独占态拷贝的耗时减少更为显著。
在第一方面的一些实现方式中,在所述内存控制器向所述第二cache发送无效侦听请求之后,还接收所述第二cache发送的无效侦听响应,所述无效侦听响应表示所述第二cache保存的所述第一数据的拷贝处于无效状态;所述内存控制器将维护的所述第一数据的状态修改为由所述第一cache独占所述第一数据的拷贝。上述技术方案中,内存控制器能够在第一数据在第二cache上的共享态拷贝无效后,更新维护的第一数据的状态,保证以后对第一数据的操作被正确地响应。
在第一方面的一些实现方式中,所述内存控制器在接收所述第一请求之后,还接收所述第二cache发送的获得第二数据的拷贝的第二请求,其中,在所述第二数据为第一值时第二core不访问第一数据,且在所述第二数据为第二值时所述第二core访问所述第一数据;所述内存控制器响应所述第二请求,在向所述第二cache发送所述无效侦听请求或接收所述第二cache返回的所述无效侦听响应之后,向所述第二cache发送所述第二数据的拷贝。根据上述方案,内存控制器在第二cache请求获取第二数据时,由于第二数据可能触发第二处理器的内核访问第一数据,而第二cache保存的第一数据需要被无效,内存控制器通过报文保序的方式,在向第二cache发送指示无效第一数据的无效侦听请求之后,或者在接收第二cache返回的无效侦听响应之后,才向第二cache返回第二数据,避免在第二cache无效第一数据之后,第二处理器的内核因第二cache中的第二数据为第二值时触发第二处理器的内核访问第二cache中的第一数据,使得第二处理器的内核访问的第一数据与第一cache中的第一数据不一致,使得不同的处理器内核访问的同一数据一致。
第二方面,本申请提供一种内存控制器,该内存控制器用于执行上述第一方面或第一方面的任意可能的实现中的方法。具体的,该内存控制器包括用于执行上述第一方面或第一方面的任意可能的实现中的方法的模块。
可选的,该内存控制器包括处理器以及与所述处理器通信连接的存储器、通信接口;所述存储器用于存储有计算机指令;所述通信接口用于与多处理器系统中的cache以及内存通信;所述处理器用于:执行所述存储器中的所述计算机指令,使得所述内存控制器执行上述第一方面或第一方面的任意可能的实现中的方法。
第三方面,本申请提供一种多处理器系统,包括至少两个处理器、内存控制器以及内存,所述至少两个处理器中每个处理器包括core以及cache,所述内存用于存储数据,所述cache用于存储内存中数据的拷贝或修改版本;其中,所述至少两个处理器中第一处理器的第一cache用于:向所述内存控制器发送获得第一数据的独占态拷贝的第一请求,所述第一数据的独占态拷贝表示所述多处理器的cache中只有保存所述独占态拷贝的cache保存有所述第一数据;所述内存控制器用于:接收所述第一请求;若所述至少两个处理器中第二处理器的第二cache保存有所述第一数据的拷贝且没有cache保存所述第一数据的修改版本,则根据所述第一请求包括的指示所述第一数据的第一指示参数从内存读取所述第一数据,向所述第一cache发送所述第一数据的独占态拷贝,并向所述第二cache发送无效侦听请求,所述无效侦听请求用于指示所述第二cache将第一数据的拷贝设置为无效状态;所述第二cache用于:接收所述无效侦听请求,将保存的所述第一数据的拷贝设置为无效状态。
在第三方面的一些实现方式中,所述第二cache还用于:在将保存的所述第一数据的拷贝设置为无效状态之后,向所述内存控制器返回无效侦听响应,所述无效侦听响应表示所述第二cache保存的所述第一数据的拷贝处于无效状态;所述内存控制器还用于:接收所述无效侦听响应,将维护的所述第一数据的状态修改为由所述第一cache独占所述第一数据的拷贝。
在第三方面的一些实现方式中,所述第二cache还用于:在所述第一cache发送所述第一请求之后,向所述内存控制器发送获得第二数据的拷贝的第二请求,其中,在所述第二数据为第一值时第二core不访问第一数据,且在所述第二数据为第二值时所述第二core访问所述第一数据;所述内存控制器还用于:接收所述第二请求,响应所述第二请求,在向所述第二cache发送所述无效侦听请求或接收所述第二cache返回的所述无效侦听响应之后,向所述第二cache发送所述第二数据的拷贝。
在第一方面或第三方面的一些实现方式中,在所述内存控制器向所述第二cache发送所述无效侦听请求之前,所述第二cache保存的所述第一数据的拷贝为独占态拷贝或共享态拷贝。上述技术方案使得本申请的数据操作方法适用范围较广泛。
第四方面,本申请提供了一种计算机可读存储介质,该可读存储介质中存储有计算机指令,所述指令在计算机上运行时,使得计算机执行第一方面或第一方面的任意可能的实现中的方法。
第五方面,本申请提供了一种计算机程序产品,所述计算机程序产品在计算机上运行时,使得计算机执行第一方面或第一方面的任意可能的实现中的方法。
本申请在上述各方面提供的实现的基础上,还可以进行进一步组合以提供更多实现。
附图说明
图1为本发明实施例中多处理器系统的示意图;
图2为现有技术中数据操作方法的示意图;
图3为本发明实施例提供的数据操作方法的流程示意图;
图4a、图4b为多处理器访问第一数据的示意图;
图5为本发明实施例提供的数据操作方法的另一流程的示意图;
图6a、图6b为多处理器访问第一数据以及第二数据的示意图;
图7、图8为本发明实施例提供的内存控制器的示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。
本申请提供一种数据操作方法、内存控制器以及多处理器系统,用以解决现有技术中存在的多处理器系统中cache获得独占态数据耗时较长的问题。其中,方法和内存控制器、系统是基于同一发明构思的,由于方法、内存控制器、系统解决问题的原理相似,因此内存控制器、系统与方法的实施可以相互参见,重复之处不再赘述。
本申请中所涉及的多个,是指两个或两个以上。另外,需要理解的是,在本申请的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
下面介绍本发明实施例引入的一些概念:
缓存非对称内存一致性访问(cache coherence non-uniform memory access,CC-NUMA)系统,为一种典型的多处理器系统,图1为CC-NUMA的示意图。CC-NUMA系统可以包括多个处理器,如图1所示的处理器1~n,每个处理器包括处理器内核(core)以及cache,处理器的cache不限于为一级cache,也可以为多级的cache。处理器的内核从可以从处理器的cache读取数据,如果cache保存有该数据,则向core返回该数据,如果cache没有保存该数据,cache可以向内存控制器发送请求,由内存控制器从内存或存储有该数据的其它cache中读取该数据,将数据返回给该cache。其中,cache中的处理模块可以运行缓存代理(cacheagent,CA)程序代码,实现缓存代理CA的功能,内存控制器可以运行目录代理(home agent,HA)程序代码,实现目录代理HA的功能。cache与内存控制器之间的传输可以由CA与HA之间的通信实现,即CA向HA发送获取数据的请求,HA响应该请求,向CA返回数据。本发明的一些实施例中,可以由多个存储器作为内存,该多个存储器作为一个逻辑上的主存储器为多个处理器共享。另外,在本发明的一些实施例中,内存与内存控制器也可以集成在一起。本发明实施例以下内容以CC-NUMA为例,介绍数据操作方法。
缓存一致性协议,用于保持多处理器系统中的多个cache上数据的一致性。MESI协议为一种典型的缓存一致性协议,MESI协议定义了数据(或缓存行)的4个状态,分别为修改(Modified)状态、独占(Exclusive)状态、共享(Shared)状态以及无效(Invalid)状态,分别简称为M、E、S、I状态。本发明实施例以下内容以MESI协议为例,介绍数据操作方法。表1为4个状态的描述。
状态 | 描述 |
M态 | 数据有效,且数据被修改了,与内存中的数据不一致,数据只存在于本cache中 |
E态 | 数据有效,数据和内存中的数据一致,数据只存在于本Cache中 |
S态 | 数据有效,数据和内存中的数据一致,数据存在于多个Cache中 |
I态 | 数据无效 |
表1
下面介绍现有技术中cache独占数据的过程。第一数据原本在第二cache上处于S状态,即第一数据被第二cache共享,参照图2,第一cache获取第一数据的独占权限的过程如下:
步骤11、第一cache向内存控制器发起独占第一数据的请求。
步骤12、内存控制器检测到第一数据被第二cache共享,向第二cache发送第一数据的无效侦听请求。并执行步骤13。
步骤13、内存控制器从内存读取第一数据。
步骤14、第二cache接收到内存控制器发送的无效侦听请求,将第一数据在第二cache上的状态修改为无效状态。
步骤15、第二cache向内存控制器返回无效侦听响应,告知内存控制器第一数据已经在第二cache上修改成了I态。
步骤16、内存控制器接收到无效侦听响应后,向第一cache返回独占态的第一数据。
步骤17、第一cache获取到第一数据,并将第一数据修改为独占态。
上述过程中,内存控制器要等接收到所有第一数据的侦听响应后才能够向第一cache返回E态数据,即一个cache要获取处于S状态数据的E态权限的时延等于独占第一数据的请求、无效侦听请求、无效侦听响应和返回数据四个传输命令的时延之和,导致cache独占数据的耗时较长。
本发明实施例提供一种数据操作方法,解决上述cache独占数据的耗时较长的问题,参照图3,该数据操作方法包括:
步骤21、第一cache向内存控制器发送获得第一数据的独占态拷贝的第一请求,第一请求包括指示第一数据的第一指示参数,该第一指示参数可以为第一数据的标识,或者,第一数据在内存中的存储地址。第一cache可以在第一core向第一core请求该第一数据的独占权限、第一cache没有保存该第一数据的拷贝或第一cache只保存第一数据的共享态拷贝时,向内存控制器发送该第一请求。
本发明实施例中,cache保存有数据的共享态拷贝,指的是cache保存有S态数据;cache保存有数据的独占态拷贝,指的是cache保存有E态数据;cache保存有数据的修改版本,指的是cache保存有M态数据。
步骤22、内存控制器接收第一请求。
步骤23、若有第二cache保存有第一数据的拷贝、没有cache保存第一数据的修改版本,则内存控制器根据第一指示参数从内存读取第一数据。并执行步骤24、25。
内存控制器本地维护有第一数据的状态,内存控制器根据该第一数据的状态可以获知是否有哪些cache保存有第一数据,以及获知cache具体保存第一数据的共享态拷贝、独占态拷贝还是修改版本。
步骤24、内存控制器向第一cache发送第一数据的独占态拷贝。所谓向第一cache发送第一数据的独占态拷贝,指的是向第一cache发送第一数据的拷贝,并授予第一cache对第一数据的独占权限。
步骤25、第一cache接收第一数据的独占态拷贝。
步骤26、内存控制器向第二cache发送无效侦听请求,该无效侦听请求用于指示第二cache将第一数据的拷贝设置为无效状态。
步骤27、第二cache接收无效侦听请求,将保存的第一数据的拷贝设置为无效状态。
需要说明的是,步骤23中第二cache上的第一数据的拷贝,可以为第一数据的共享态拷贝,也可以为第一数据的独占态拷贝。在一些实施例中,可以有多个cache保存有第一数据的拷贝,这种情况下,步骤23、26、27中的第二cache,指的是保存第一数据拷贝的每一个cache,即内存控制器向保存有第一数据的拷贝的每个cache发送该无效侦听请求,每个cache在接收无效侦听请求之后,无效自己保存的第一数据的拷贝。该保存第一数据拷贝的多个cache中,不同cache保存的第一数据的权限可以不同,例如,有些cache保存第一数据的共享态拷贝,而另一些cache保存第一数据的独占态拷贝。
在一些实施例中,上述步骤24与步骤26可以同时执行,或者步骤24与步骤26之间虽然有先后顺序之分,但执行时机的差异较小,可以忽略。
在另一些实施例中,内存控制器在确定第二cache保存有第一数据的拷贝、没有cache保存第一数据的修改版本之后,可以同时执行从内存读取第一数据以及步骤26,或者,从内存读取第一数据的时机以及步骤26的执行时机虽然有先后顺序之分,但执行时机的差异较小,可以忽略。
上述技术方案中,在第一cache请求第一数据的独占态拷贝时,内存控制器在确定没有cache保存第一数据的修改版本(M态数据)之后,可以直接从内存读取该第一数据,将第一数据返回给第一cache,而不用等待对保存有第一数据的拷贝的其它cache中的第一数据被无效后才向第一cache返回第一数据。由于避免了等待无效侦听请求以及无效侦听响应的时延,可以减少第一cache获取第一数据的独占态拷贝的耗时,尤其是在多处理器系统包括较多的cache,第一数据被多个cache共享的场景中,第一cache获取第一数据的独占态拷贝的耗时减少更为显著。
作为一种可选的方式,继续参见图3,在步骤27之后,还包括:
步骤28、第二cache向内存控制器返回无效侦听响应,无效侦听响应表示第二cache保存的第一数据的拷贝处于无效状态。
步骤29、内存控制器接收无效侦听响应,将维护的第一数据的状态修改为由第一cache独占第一数据的拷贝。
在一个变形方案中,内存控制器可以在步骤24中向第一cache发送第一数据的独占态拷贝时/后,将维护的第一数据的状态修改为由第一cache独占第一数据的拷贝。在一个变形方案中,内存控制器可以在步骤26中向第二cache发送无效侦听请求时/后,将维护的第一数据的状态修改为由第一cache独占第一数据的拷贝。本发明实施例意图保护这些变形方案。
上述技术方案中,内存控制器能够在第一数据在第二cache上的共享态拷贝无效后,更新维护的第一数据的状态,保证以后对第一数据的操作被正确地响应。
作为一种可选的方案,在步骤22之后,如果有cache保存有第一数据的修改版本,则内存控制器从该cache读取该第一数据的修改版本,并向该cache发送无效侦听请求,指示该cache将保存的该第一数据的修改版本无效。内存控制器接收该第一数据的修改版本之后,将该第一数据的修改版本发送给内存,以使内存根据该第一数据的修改版本更新第一数据;并将该第一数据的修改版本作为第一数据的独占态版本发送给第一cache。
上述技术方案中,内存控制器在有cache保存第一数据的修改版本时,向第一cache发送该第一数据的修改版本,确保第一cache获得第一数据的最新版本。
需要说明的是,步骤21至步骤29的方案中,虽然在步骤24完成时刻与步骤25完成时刻之间的时刻,第一数据在不同cache上可能不一致,但可以不影响多处理器系统中不同处理器正确地访问第一数据。下面予以举例说明。
以第一core和第二core访问数据第一数据为例,假定执行以下程序:
initial A=0
[第一core] [第二core]
A=1 print A
即,其中,第一数据即为第一数据,第一数据的初始值为0,第二core执行程序printA,第一core执行程序给A赋值为1。由于第一core要给第一数据赋值,必然要获得第一数据的独占权限,如果第一core采用步骤11至步骤17所述的方式获取第一数据的独占权,将第一数据的值设置为1。如果第二core在步骤14之前执行print A程序,则输出第二cache保存的第一数据,其值为0。如果第二core在步骤14之后执行print A程序,由于第二cache上的第一数据已经无效,第二cache向内存控制器发起读取第一数据的请求,由于第二core执行的程序print A仅是输出第一数据,可以只向内存控制器请求第一数据的共享态拷贝。参见图4a,第二cache向内存控制器发送获取第一数据的共享态拷贝的请求,内存控制器确定第一cache中保存第一数据的修改态版本,从第一cache读取修改后的第一数据,将其发给第二cache以及内存。第二core执行print A,输出第一数据的值为1。
与之对照,如果第一core采用步骤21至步骤29所述的方式获取第一数据的独占权,则步骤27之前第二core执行print A程序,则输出第二cache保存的第一数据,其值为0。如果在步骤27之后第二core执行print A程序,由于第二cache上的第一数据已经无效,第二cache向内存控制器发起读取第一数据的请求,参见图4b,第二cache向内存控制器发送获取第一数据的共享态拷贝的请求,内存控制器确定第一cache中保存第一数据的修改态版本,从第一cache读取修改后的第一数据,将其发给第二cache,第二core执行print A,输出第一数据的值为1。
可见,无论采用现有技术中步骤1至步骤17所述的方法,还是采用本发明实施例提供的步骤21至步骤29所述的方法,第二core对第一数据的访问结果相同,即,采用本发明实施例提供的方法,可以对不同处理器内核分别对第一数据没有影响。
作为一种可选的方式,如果在第一cache根据步骤21至步骤29所述的方式获取第一数据的独占权限的过程中,第二cache向内存控制器请求读取第二数据,该第二数据可以用于触发第二处理器的内核从第二cache读取第一数据,例如,在第二数据为第一值时第二core不访问第一数据,且在第二数据为第二值时第二core访问第一数据。为了保证第二core访问的第一数据与其他缓存中的第一数据一致,本发明实施例中可以采用报文保序的方式。参照图5,在步骤22之后,还包括如下步骤:
步骤30、第二cache向内存控制器发送获取第二数据的拷贝的第二请求。该第二请求可以为请求第二数据的共享态拷贝的请求,也可以为请求第二数据的独占态拷贝的请求。若第二请求为请求第二数据的独占态拷贝的请求,内存控制器可以采用前述步骤21~29的方式进行相应。
步骤31、内存控制器接收第二请求,获取第二数据的拷贝。其中,如果没有cache保存第二数据的修改版本,则内存控制器从内存读取第二数据的拷贝;如果由cache保存第二数据的修改版本,则内存控制器从该cache读取第二数据的修改版本作为第二数据的拷贝。
步骤32、内存控制器在向第二cache发送第一数据的无效侦听请求之后,向第二cache发送第二数据的拷贝。即,内存控制器在步骤26之后向第二cache返回第二数据的拷贝。
步骤32的一种变形方案为:内存控制器在执行步骤29,接收第二cache返回的第一数据的无效侦听响应之后,向第二cache返回第二数据的拷贝。本发明实施例意图保护这一变形方案。
根据上述方案,内存控制器在第二cache请求获取第二数据时,由于第二数据可能触发第二处理器的内核访问第一数据,而第二cache保存的第一数据需要被无效,内存控制器通过报文保序的方式,在向第二cache发送指示无效第一数据的无效侦听请求之后,或者在接收第二cache返回的无效侦听响应之后,才向第二cache返回第二数据,避免在第二cache无效第一数据之后,第二处理器的内核因第二cache中的第二数据为第二值时触发第二处理器的内核访问第二cache中的第一数据,使得第二处理器的内核访问的第一数据与第一cache中的第一数据不一致,使得不同的处理器内核访问的同一数据一致。
需要说明的是,内存控制器可以维护有数据之间的耦合关系,进而在有cache请求独占数据时,监控与该数据有耦合关系的数据的操作请求,避免因因耦合的数据变动导致请求独占的数据在cache中不一致。
下面介绍步骤30至步骤32所述的报文保序方案的一个应用实例。以第一core和第二core访问第一数据为例,假定第二core与第一core分别执行以下程序:
即,其中,第一数据为第一数据,第二数据为第二数据,第一数据、第二数据的初始值均为0,第二core执行:如果B=0,则循环,只有B不等于0,跳过循环,执行print A。第一core执行:给A赋值为1,在此之后,给B复制为1。可以看出,第二数据作为第二core与core·1访问第一数据的耦合参数,通过该耦合参数,可以实现第一core先于第二core访问第一数据。
参照图6a,在采用步骤21-30的技术方案时,内存控制器在接收第二cache发送的独占第一数据的请求(因为第一core要给第一数据赋值,所以要获得第一数据独占态权限)之后,接收第二cache获得第二数据的共享态拷贝的请求,内存控制器在接收第一cache返回的第一数据被无效的响应之前,直接将第一数据的独占态拷贝发送给第一cache,第一core将第一数据的值更改为1。内存控制器向第一cache发送指示无效第一数据的无效侦听请求,还要向第一cache返回第二数据,由于第二数据的值可能会触发第二core访问第一数据,而第一数据可能会在第一cache与第一cache中不一致,内存控制器根据前述报文保序方案,在向第二cache发送无效侦听请求或者接收第二cache的无效侦听响应之后,才向第二cache返回第二数据,由于第二数据的值为1,第二core需要访问第一数据,而这时第二cache中第一数据已被无效,第二cache需要按照图4b所述方法向内存读取第一数据,读取的第一数据与第一cache中第一数据一致,避免第二core访问与第二cache中的第一数据与第一cache中第一数据不一致。
与之对应,图6b为采用步骤11-17所述的现有技术的方案访问第一数据、第二数据的示意图,其中,在第一cache读取第二数据之后,由于第二数据的值为1,第二core需要访问第一数据,而这时第二cache中第一数据已被无效,第二cache需要按照图4a所述方法向内存读取第一数据,读取的第一数据与第二cache中第一数据一致。可以看出,该方案中第二core、第一core访问的数据的值与图6a中一致,且图6a所述方法中第一cache获得第一数据的独占态拷贝的耗时明显小于图6b所述方法中第一cache获得第一数据的独占态拷贝的耗时。
可见,上述报文保序方案在保证cache获得数据独占态拷贝的耗时减少的情况下,内存控制器通过报文保序保证多个内核访问的第一数据具有一致性。
本发明实施例提供一种内存控制器,所述内存控制器应用于多处理器系统,所述多处理器系统包括至少两个处理器、所述内存控制器以及内存,所述至少两个处理器中每个处理器包括core以及cache,所述内存用于存储数据,所述cache用于存储内存中数据的拷贝或修改版本。参见图7,所述内存控制器包括:通信模块41以及处理模块42。通信模块41用于接收第一处理器的第一cache发送的获得第一数据的独占态拷贝的第一请求,所述第一数据的独占态拷贝表示所述多处理器的cache中只有保存所述独占态拷贝的cache保存有所述第一数据。处理模块42用于:若第二处理器的第二cache保存有所述第一数据的拷贝且没有cache保存所述第一数据的修改版本,则根据所述第一请求包括的指示所述第一数据的第一指示参数从内存读取所述第一数据,向所述第一cache发送所述第一数据的独占态拷贝。所述通信模块41还用于:向所述第二cache发送无效侦听请求,所述无效侦听请求用于指示所述第二cache将第一数据的拷贝设置为无效状态。
作为一种可选的方式,所述通信模块41还用于:接收所述第二cache发送的无效侦听响应,所述无效侦听响应表示所述第二cache保存的所述第一数据的拷贝处于无效状态。所述处理模块42还用于:在所述通信模块41接收所述无效侦听响应之后,将维护的所述第一数据的状态修改为由所述第一cache独占所述第一数据的拷贝。
作为一种可选的方式,在所述通信模块41向所述第二cache发送所述无效侦听请求之前,所述第二cache保存的所述第一数据的拷贝为独占态拷贝或共享态拷贝,所述第一数据的共享态拷贝表示存在至少一个cache保存所述第一数据的拷贝。
作为一种可选的方式,所述通信模块41还用于:在接收所述第一请求之后,接收所述第二cache发送的获得第二数据的拷贝的第二请求,其中,在所述第二数据为第一值时第二core不访问第一数据,且在所述第二数据为第二值时所述第二core访问所述第一数据。所述处理模块42还用于:响应所述第二请求,指示所述通信模块41向所述第二cache发送所述无效侦听请求或接收所述第二cache返回的所述无效侦听响应之后,向所述第二cache发送所述第二数据的拷贝。
本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本发明各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
其中,集成的模块既可以采用硬件的形式实现时,如图8所示,内存控制器可以包括处理器51。上述处理模块42对应的实体的硬件可以为处理器51。处理器51,可以是一个中央处理模块(central processing unit,CPU),或者为数字处理模块等。内存控制器还可以包括通信接口53,处理器51通过通信接口53与cache、内存通信。该装置还包括:存储器52,用于存储处理器51执行的程序。存储器52可以是非易失性存储器,比如硬盘(hard diskdrive,HDD)或固态硬盘(solid-state drive,SSD)等,还可以是易失性存储器(volatilememory),例如随机存取存储器(random-access memory,RAM)。存储器52是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
本发明实施例提供一种多处理器系统,包括至少两个处理器、内存控制器以及内存,所述至少两个处理器中每个处理器包括core以及cache,所述内存用于存储数据,所述cache用于存储内存中数据的拷贝或修改版本;所述内存控制器可以执行本发明实施例提供的所述数据操作方法中由内存控制器执行的步骤;所述至少两个处理器中的处理器的cache可以执行上述数据操作方法中由第一cache执行的步骤,或者,可以执行由第二cache执行的步骤。
本发明实施例提供一种计算机可读存储介质,该可读存储介质中存储有计算机指令,所述指令在计算机上运行时,使得计算机执行前述数据操作方法中的步骤。
本发明实施例提供一种计算机程序产品,所述计算机程序产品在计算机上运行时,使得计算机执行前述数据操作方法中的步骤。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (12)
1.一种数据操作方法,其特征在于,所述方法应用于多处理器系统,所述多处理器系统包括至少两个处理器、内存控制器以及内存,所述至少两个处理器中每个处理器包括处理器内核core以及缓存cache,所述内存用于存储数据,所述cache用于存储内存中数据的拷贝或修改版本;所述方法包括:
所述内存控制器接收第一处理器的第一cache发送的获得第一数据的独占态拷贝的第一请求,所述第一数据的独占态拷贝表示所述多处理器的cache中只有保存所述独占态拷贝的cache保存有所述第一数据的拷贝;
若第二处理器的第二cache保存有所述第一数据的拷贝且没有cache保存所述第一数据的修改版本,则所述内存控制器根据所述第一请求包括的指示所述第一数据的第一指示参数从内存读取所述第一数据,向所述第一cache发送所述第一数据的独占态拷贝;并
向所述第二cache发送无效侦听请求,所述无效侦听请求用于指示所述第二cache将第一数据的拷贝设置为无效状态。
2.根据权利要求1所述的方法,其特征在于,在所述内存控制器向所述第二cache发送无效侦听请求之后,还包括:
所述内存控制器接收所述第二cache发送的无效侦听响应,所述无效侦听响应表示所述第二cache保存的所述第一数据的拷贝处于无效状态;
所述内存控制器将维护的所述第一数据的状态修改为由所述第一cache独占所述第一数据的拷贝。
3.根据权利要求1或2所述的方法,其特征在于,在所述内存控制器向所述第二cache发送所述无效侦听请求之前,所述第二cache保存的所述第一数据的拷贝为独占态拷贝或共享态拷贝,所述第一数据的共享态拷贝表示存在至少一个cache保存所述第一数据的拷贝。
4.根据权利要求1-3任一项所述的方法,其特征在于,在所述内存控制器接收所述第一请求之后,还包括:
所述内存控制器接收所述第二cache发送的获得第二数据的拷贝的第二请求,其中,在所述第二数据为第一值时第二core不访问第一数据,且在所述第二数据为第二值时所述第二core访问所述第一数据;
所述内存控制器响应所述第二请求,在向所述第二cache发送所述无效侦听请求或接收所述第二cache返回的所述无效侦听响应之后,向所述第二cache发送所述第二数据的拷贝。
5.一种内存控制器,其特征在于,所述内存控制器应用于多处理器系统,所述多处理器系统包括至少两个处理器、所述内存控制器以及内存,所述至少两个处理器中每个处理器包括core以及cache,所述内存用于存储数据,所述cache用于存储内存中数据的拷贝或修改版本;所述内存控制器包括:
通信模块,用于接收第一处理器的第一cache发送的获得第一数据的独占态拷贝的第一请求,所述第一数据的独占态拷贝表示所述多处理器的cache中只有保存所述独占态拷贝的cache保存有所述第一数据;
处理模块,用于:若第二处理器的第二cache保存有所述第一数据的拷贝且没有cache保存所述第一数据的修改版本,则根据所述第一请求包括的指示所述第一数据的第一指示参数从内存读取所述第一数据,向所述第一cache发送所述第一数据的独占态拷贝;
所述通信模块,还用于向所述第二cache发送无效侦听请求,所述无效侦听请求用于指示所述第二cache将第一数据的拷贝设置为无效状态。
6.根据权利要求5所述的内存控制器,其特征在于,所述通信模块还用于:接收所述第二cache发送的无效侦听响应,所述无效侦听响应表示所述第二cache保存的所述第一数据的拷贝处于无效状态;
所述处理模块,还用于在所述通信模块接收所述无效侦听响应之后,将维护的所述第一数据的状态修改为由所述第一cache独占所述第一数据的拷贝。
7.根据权利要求5或6所述的内存控制器,其特征在于,在所述通信模块向所述第二cache发送所述无效侦听请求之前,所述第二cache保存的所述第一数据的拷贝为独占态拷贝或共享态拷贝,所述第一数据的共享态拷贝表示存在至少一个cache保存所述第一数据的拷贝。
8.根据权利要求5-7任一项所述的内存控制器,其特征在于,所述通信模块还用于:在接收所述第一请求之后,接收所述第二cache发送的获得第二数据的拷贝的第二请求,其中,在所述第二数据为第一值时第二core不访问第一数据,且在所述第二数据为第二值时所述第二core访问所述第一数据;
所述处理模块还用于:响应所述第二请求,指示所述通信模块向所述第二cache发送所述无效侦听请求或接收所述第二cache返回的所述无效侦听响应之后,向所述第二cache发送所述第二数据的拷贝。
9.一种内存控制器,其特征在于,包括处理器以及与所述处理器通信连接的存储器、通信接口;
所述存储器用于存储有计算机指令;
所述通信接口用于与多处理器系统中的cache以及内存通信;
所述处理器用于:执行所述存储器中的所述计算机指令,使得所述内存控制器执行如权利要求1-4任一项所述的方法。
10.一种多处理器系统,其特征在于,包括至少两个处理器、内存控制器以及内存,所述至少两个处理器中每个处理器包括core以及cache,所述内存用于存储数据,所述cache用于存储内存中数据的拷贝或修改版本;
其中,所述至少两个处理器中第一处理器的第一cache用于:向所述内存控制器发送获得第一数据的独占态拷贝的第一请求,所述第一数据的独占态拷贝表示所述多处理器的cache中只有保存所述独占态拷贝的cache保存有所述第一数据;
所述内存控制器用于:接收所述第一请求;若所述至少两个处理器中第二处理器的第二cache保存有所述第一数据的拷贝且没有cache保存所述第一数据的修改版本,则根据所述第一请求包括的指示所述第一数据的第一指示参数从内存读取所述第一数据,向所述第一cache发送所述第一数据的独占态拷贝,并向所述第二cache发送无效侦听请求,所述无效侦听请求用于指示所述第二cache将第一数据的拷贝设置为无效状态;
所述第二cache用于:接收所述无效侦听请求,将保存的所述第一数据的拷贝设置为无效状态。
11.根据权利要求10所述的系统,其特征在于,所述第二cache还用于:在将保存的所述第一数据的拷贝设置为无效状态之后,向所述内存控制器返回无效侦听响应,所述无效侦听响应表示所述第二cache保存的所述第一数据的拷贝处于无效状态;
所述内存控制器还用于:接收所述无效侦听响应,将维护的所述第一数据的状态修改为由所述第一cache独占所述第一数据的拷贝。
12.根据权利要求10或11所述的系统,其特征在于,所述第二cache还用于:在所述第一cache发送所述第一请求之后,向所述内存控制器发送获得第二数据的拷贝的第二请求,其中,在所述第二数据为第一值时第二core不访问第一数据,且在所述第二数据为第二值时所述第二core访问所述第一数据;
所述内存控制器还用于:接收所述第二请求,响应所述第二请求,在向所述第二cache发送所述无效侦听请求或接收所述第二cache返回的所述无效侦听响应之后,向所述第二cache发送所述第二数据的拷贝。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710938599.7A CN109597776B (zh) | 2017-09-30 | 2017-09-30 | 一种数据操作方法、内存控制器以及多处理器系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710938599.7A CN109597776B (zh) | 2017-09-30 | 2017-09-30 | 一种数据操作方法、内存控制器以及多处理器系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109597776A true CN109597776A (zh) | 2019-04-09 |
CN109597776B CN109597776B (zh) | 2020-12-08 |
Family
ID=65956559
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710938599.7A Active CN109597776B (zh) | 2017-09-30 | 2017-09-30 | 一种数据操作方法、内存控制器以及多处理器系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109597776B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1514349A (zh) * | 2003-02-11 | 2004-07-21 | �ǻ۵�һ��˾ | 意图进行存储的预取机制 |
US7991963B2 (en) * | 2007-12-31 | 2011-08-02 | Intel Corporation | In-memory, in-page directory cache coherency scheme |
CN103294611A (zh) * | 2013-03-22 | 2013-09-11 | 浪潮电子信息产业股份有限公司 | 一种基于有限数据一致性状态的服务器节点数据缓存方法 |
CN103645996A (zh) * | 2013-12-09 | 2014-03-19 | 龙芯中科技术有限公司 | 内存拷贝的方法、装置和片上系统 |
CN104679669A (zh) * | 2014-11-27 | 2015-06-03 | 华为技术有限公司 | 高速缓存cache存储器系统及访问缓存行cache line的方法 |
CN104899160A (zh) * | 2015-05-30 | 2015-09-09 | 华为技术有限公司 | 一种缓存数据控制方法、节点控制器和系统 |
CN104991868A (zh) * | 2015-06-09 | 2015-10-21 | 浪潮(北京)电子信息产业有限公司 | 一种多核处理器系统和缓存一致性处理方法 |
US9292444B2 (en) * | 2013-09-26 | 2016-03-22 | International Business Machines Corporation | Multi-granular cache management in multi-processor computing environments |
CN105677580A (zh) * | 2015-12-30 | 2016-06-15 | 杭州华为数字技术有限公司 | 访问缓存的方法和装置 |
CN107315694A (zh) * | 2016-04-22 | 2017-11-03 | 华为技术有限公司 | 一种缓存一致性管理方法及节点控制器 |
-
2017
- 2017-09-30 CN CN201710938599.7A patent/CN109597776B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1514349A (zh) * | 2003-02-11 | 2004-07-21 | �ǻ۵�һ��˾ | 意图进行存储的预取机制 |
US7991963B2 (en) * | 2007-12-31 | 2011-08-02 | Intel Corporation | In-memory, in-page directory cache coherency scheme |
CN103294611A (zh) * | 2013-03-22 | 2013-09-11 | 浪潮电子信息产业股份有限公司 | 一种基于有限数据一致性状态的服务器节点数据缓存方法 |
US9292444B2 (en) * | 2013-09-26 | 2016-03-22 | International Business Machines Corporation | Multi-granular cache management in multi-processor computing environments |
CN103645996A (zh) * | 2013-12-09 | 2014-03-19 | 龙芯中科技术有限公司 | 内存拷贝的方法、装置和片上系统 |
CN104679669A (zh) * | 2014-11-27 | 2015-06-03 | 华为技术有限公司 | 高速缓存cache存储器系统及访问缓存行cache line的方法 |
CN104899160A (zh) * | 2015-05-30 | 2015-09-09 | 华为技术有限公司 | 一种缓存数据控制方法、节点控制器和系统 |
CN104991868A (zh) * | 2015-06-09 | 2015-10-21 | 浪潮(北京)电子信息产业有限公司 | 一种多核处理器系统和缓存一致性处理方法 |
CN105677580A (zh) * | 2015-12-30 | 2016-06-15 | 杭州华为数字技术有限公司 | 访问缓存的方法和装置 |
CN107315694A (zh) * | 2016-04-22 | 2017-11-03 | 华为技术有限公司 | 一种缓存一致性管理方法及节点控制器 |
Also Published As
Publication number | Publication date |
---|---|
CN109597776B (zh) | 2020-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7814279B2 (en) | Low-cost cache coherency for accelerators | |
KR102398912B1 (ko) | 데이터를 프로세싱하기 위한 방법 및 프로세서 | |
US20230195633A1 (en) | Memory management device | |
US7350036B2 (en) | Technique to perform concurrent updates to a shared data structure | |
JP6514329B2 (ja) | メモリアクセス方法、スイッチ、およびマルチプロセッサシステム | |
US9183150B2 (en) | Memory sharing by processors | |
JP7126136B2 (ja) | 再構成可能なキャッシュアーキテクチャおよびキャッシュコヒーレンシの方法 | |
CN109840216B (zh) | 针对高速缓存的数据处理方法及相关元件、设备、系统 | |
US20090083496A1 (en) | Method for Improved Performance With New Buffers on NUMA Systems | |
CN107967220A (zh) | 具有对高速缓存线拥有者cpu的跟踪的多cpu设备 | |
CN110083548B (zh) | 数据处理方法及相关网元、设备、系统 | |
US8627016B2 (en) | Maintaining data coherence by using data domains | |
US20180189181A1 (en) | Data read method and apparatus | |
CN109597776A (zh) | 一种数据操作方法、内存控制器以及多处理器系统 | |
EP4124963A1 (en) | System, apparatus and methods for handling consistent memory transactions according to a cxl protocol | |
CN107526528B (zh) | 一种片上低延迟存储器的实现机制 | |
US20140281234A1 (en) | Serving memory requests in cache coherent heterogeneous systems | |
CN113168400A (zh) | 一种数据读取方法、装置及多核处理器 | |
TWI758317B (zh) | 用於提供資料存取行為原子集的裝置及方法 | |
WO2022246769A1 (zh) | 一种访问数据的方法和装置 | |
CN115543201A (zh) | 一种共享存储器系统中加速核心请求完成的方法 | |
JP6565729B2 (ja) | 演算処理装置、制御装置、情報処理装置及び情報処理装置の制御方法 | |
WO2020010540A1 (zh) | 原子操作的执行方法及装置 | |
JP2008140258A (ja) | バス制御装置 |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200415 Address after: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant after: HUAWEI TECHNOLOGIES Co.,Ltd. Address before: 301, A building, room 3, building 301, foreshore Road, No. 310052, Binjiang District, Zhejiang, Hangzhou Applicant before: Huawei Technologies Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |