CN104978283B - 一种内存访问控制方法,及装置 - Google Patents
一种内存访问控制方法,及装置 Download PDFInfo
- Publication number
- CN104978283B CN104978283B CN201410142729.2A CN201410142729A CN104978283B CN 104978283 B CN104978283 B CN 104978283B CN 201410142729 A CN201410142729 A CN 201410142729A CN 104978283 B CN104978283 B CN 104978283B
- Authority
- CN
- China
- Prior art keywords
- directory
- directory entry
- memory
- entry
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种内存访问控制方法,及装置;其中方法的实现包括:接收内存访问请求,并确定所述内存访问请求指定的内存地址;查询目录缓存,确定所述目录缓存中是否存在与所述内存地址对应的目录项;查询目录容器,确定所述目录容器中是否存在与所述内存地址对应的记录项;所述目录项的信息指示缓存有所述内存访问请求访问的数据缓存的位置;所述记录项记录有在外部存储器中存有且对应的内存地址的状态为非无效状态的目录项的地址;若所述目录缓存中不存在与所述内存地址对应的目录项,且所述目录容器中不存在与所述内存地址对应的记录项,则确定所述内存地址对应的目录项为无效状态。可以降低内存访问延时,提高内存访问性能。
Description
技术领域
本发明涉及存储技术领域,特别涉及一种内存访问控制方法,及装置。
背景技术
一个多处理器系统通常包含有多个处理器、一个或多个内存控制器、连接各处理器和内存的网络。图1所示是一个多处理器系统的实例,在图1中有两个处理器:处理器(Processor)0(100)和处理器(Processor)1(101),内存控制器103、内存控制器103连接有内存104。各个组件通过特定的总线或者网络102连接起来。内存控制器103可以是独立的组件,也可以集成在各处理器中。
若Processor(100)要访问内存,则会执行如下流程:
1、Processor(100)通过网络102发送内存访问请求消息给内存控制器103。
2、内存控制器103为维护缓存一致性,首先根据目录项信息决定是否向其他处理器发起侦听;若需要发起侦听,则通过网络102发送侦听消息到Processor1(101),并获得侦听响应(109);
3、内存控制器(103)将内存数据响应110发送给请求者Processor0(100)。
在以上流程中,目录项信息显示的是哪些个处理器(或者任何需要使用系统内存的组件)缓存了某个系统内存块。存储目录信息的目录,其设计可以是多样化的,有的只显示缓存或者不缓存;有的能显示更多的状态,比如独占,共享,无效(等同于不缓存);有的除了显示状态外,还指示具体某个或几个处理器缓存了某个内存块。
在上述内存访问的流程中,内存控制器103需要根据目录信息来决定是否发起侦听。存储目录信息的目录,其设计一般分两大类,基于内存的和基于缓存的。基于内存的设计是内存全覆盖的,每个内存块都有对应的目录项;而基于缓存的一般是稀疏目录,只有缓存在处理器中的内存才有目录项。本发明实施例将要涉及的是应用在基于内存的目录设计中。
基于内存的目录设计有个特点,目录占用的存储空间比较大。假如内存控制器管理的是1T的内存,即使是最小的1bit目录设计,以一个内存块64字节计算也需要2G字节的目录存储空间。这么大的存储空间一般都存放在外部存储上,比如DIMM(Dual InlineMemory Modules,双列直插式存储模块)。
由于采用以上方案,访问存放在外部存储上的目录项进行,延时比较长,不利于性能的提升。所以,一般会在片上增加一个DC(Directory Cache,目录缓存)来降低目录项的访问延时。内存控制器103内包含了几个组件:负责缓存一致性的CC(Cache Coherence,缓存一致性)引擎,目录缓存DC;内存控制器对接了外部存储器。假如DC以后的访问控制方案如下:内存控制器在接收到内存访问请求消息后,CC引擎向目录缓存发起目录请求,由于目录缓存在初次使用时没有任何记录,此时需要向外部存储器发起目录请求得到目录项响应,从目录项响应中获得目录项;然后目录缓存再创建目录项缓存来缓存获得的目录项,并返回目录项给DC。那么,下次如果还有相同内存地址需要访问目录项时,由于能在目录缓存中命中,将不再需要向外部存储发起目录请求,从而达到降低延时的目的。
以上方案,如果需要访问的内存在目录缓存能够命中,则可以降低目录项的访问延时。但是,在目录缓存不能够命中的情况下,由于仍然需要向外部存储器发起目录请求来完成外部访问,因此延迟仍然较大,因此访问性能较低。
发明内容
本发明实施例提供了一种内存访问控制方法,及装置,用于减少对外部存储器的访问,从而降低访问延迟,提高访问性能。
一种内存访问控制方法,包括:
接收内存访问请求,并确定所述内存访问请求指定的内存地址;
查询目录缓存,确定所述目录缓存中是否存在与所述内存地址对应的目录项;查询目录容器,确定所述目录容器中是否存在与所述内存地址对应的记录项;所述目录项的信息指示缓存有所述内存访问请求访问的数据缓存的位置;所述记录项记录有在外部存储器中存有且对应的内存地址的状态为非无效状态的目录项的地址;
若所述目录缓存中不存在与所述内存地址对应的目录项,且所述目录容器中不存在与所述内存地址对应的记录项,则确定所述内存地址对应的目录项为无效状态。
一种内存访问控制装置,包括:
地址确定单元,用于确定接收到的内存访问请求指定的内存地址;
查询单元,用于查询目录缓存,确定所述目录缓存中是否存在与所述地址确定单元确定的内存地址对应的目录项;查询目录容器,确定所述目录容器中是否存在与所述内存地址对应的记录项;所述目录项的信息指示缓存有所述内存访问请求访问的数据缓存的位置;所述记录项记录有在外部存储器中存有且对应的内存地址的状态为非无效状态的目录项的地址;
访问控制单元,用于若所述查询单元确定所述目录缓存中不存在与所述内存地址对应的目录项,且所述目录容器中不存在与所述内存地址对应的记录项,则确定所述内存地址对应的目录项为无效状态。
从以上技术方案可以看出,本发明实施例具有以下优点:新增了目录容器,在目录容器的记录项记录有在外部存储器中存有且对应的内存地址的状态为非无效状态的目录项的地址;目录缓存中不存在与所述内存地址对应的目录项,且目录容器中不存在与所述内存地址对应的记录项的情况下,可以避免对无效状态的目录项对应地址的外部访问,从而降低内存访问延时,提高内存访问性能。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术多处理器系统的结构示意图;
图2为本发明实施例方法流程示意图;
图3为本发明实施例系统架构示意图;
图4为本发明实施例方法流程示意图;
图5为本发明实施例方法流程示意图;
图6为本发明实施例方法流程示意图;
图7为本发明实施例装置结构示意图;
图8为本发明实施例装置结构示意图;
图9为本发明实施例装置结构示意图;
图10为本发明实施例装置结构示意图;
图11为本发明实施例装置结构示意图;
图12为本发明实施例装置结构示意图;
图13为本发明实施例设备结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
发明人对背景技术中的技术方案进行了分析:对任意一个内存地址,第一次访问目录项时,在DC中不会命中,也即是说需要向外部存储器进行访问。事实上,对于一个没有被访问过的内存地址,目录项的状态是已知的,那就是无效状态,即没有任何处理器缓存该内存块。这个时候向外部存储器请求目录项的动作显得多余,这部分延时也显得浪费了。本发明实施例基于此给出了解决方案。
本发明实施例提供了一种内存访问控制方法,本方法的执行主体可以是执行内存访问控制的任何模块,本发明实施例不予限定,本实施例方法如图2所示,包括:
201:接收内存访问请求,并确定上述内存访问请求指定的内存地址;
上述内存访问请求通常可以来自于处理器。在多处理器系统中,内存访问请求可以来自于任意的处理器。
202:查询目录缓存,确定上述目录缓存中是否存在与上述内存地址对应的目录项;查询目录容器,确定上述目录容器中是否存在与上述内存地址对应的记录项;上述目录项的信息指示缓存有上述内存访问请求访问的数据缓存的位置;上述记录项记录有在外部存储器中存有且对应的内存地址的状态可能为非无效状态的目录项的地址;
在本实施例中,目录容器中的记录项,还可以记录在外部存储器中存有且对应的内存地址的状态为无效状态的目录项的地址;一条记录项可以记录多个内存块的地址,一个内存块的地址不必在两条以上的记录项中有记录。
可选地,为了进一步的减少对目录缓存的访问,本发明实施例可以先访问目录容器然后再访问目录缓存的方式来进行,具体如下:上述查询目录缓存,确定上述目录缓存中是否存在与上述内存地址对应的目录项;查询目录容器,确定上述目录容器中是否存在与上述内存地址对应的记录项;包括:查询目录容器,确定上述目录容器中是否存在与上述内存地址对应的记录项;若上述目录容器中不存在与上述内存地址对应的记录项,则查询目录缓存,确定上述目录缓存中是否存在与上述内存地址对应的目录项。
203:若上述目录缓存中不存在与上述内存地址对应的目录项,且上述目录容器中不存在与上述内存地址对应的记录项,则确定上述内存地址对应的目录项为无效状态。
以上实施例中,新增了目录容器,在目录容器的记录项记录有在外部存储器中存有且对应的内存地址的状态可能为非无效状态的目录项的地址;目录缓存中不存在与上述内存地址对应的目录项,且目录容器中不存在与上述内存地址对应的记录项的情况下,可以避免对无效状态的目录项对应地址的外部访问,从而降低内存访问延时,提高内存访问性能。
可以理解的是,如果在目录缓存中存在于上述内存地址对应的目录项,则可以直接向内存访问请求的发送端返回查询到的目录项。
进一步地,本发明实施例还提供了需要访问外部存储器来获取目录项的方案,如下:上述方法,还包括:若上述目录缓存中不存在与上述内存地址对应的目录项,且上述目录容器中存在与上述内存地址对应的记录项,则向外部存储器请求与上述内存地址对应的目录项,并接收外部存储器返回的目录项。
进一步地,本发明实施例还提供了如何在目录缓存中创建目录项的方案,具体如下:上述方法,还包括:若确定上述内存地址对应的目录项为无效状态,则在目录缓存中创建与上述内存地址对应的目录项并记录为无效状态;或者,在外部存储器返回目录项后,依据外部存储器返回的目录项,在目录缓存中创建与上述内存地址对应的目录项。
进一步地,由于目录缓存的空间有限,并不一定有空闲的空间来存储新的目录项,本发明实施例提供了解决方案。另外,由于创建了新的目录项,那么目录容器中记录的信息也可能需要更新,本发明实施例提供了如下解决方案:在创建目录项之前,上述方法,还包括:
确定当前目录缓存是否有空间用于存储新的目录项,若没有,则从上述目录缓存中选择目录项,将选择的目录项替换为创建的目录项;若上述选择的目录项为非无效状态,且上述目录容器中未记录上述选择的目录项的地址,则将上述目录项的地址记录在上述目录容器中。
进一步地,本发明实施例还提供了向内存访问请求的发送方返回目录项的具体实现方案如下:上述方法,还包括:若上述目录缓存中存在与上述内存地址对应的目录项,则获取与上述内存地址对应的目录项作为得到的目录项;若创建了目录项,则将创建的目录项作为得到的目录项;向上述内存访问请求的发送方返回得到的目录项。
进一步地,本发明实施例还提供了如何对目录缓存以及目录容器进行更新的方案(更新可以是新建、删除等改变目录项的任意操作)上述方法,还包括:若确定目录缓存中有目录项需要更新到上述外部存储器中,则确定需要更新的目录项是否为无效状态以及是否存在于上述目录容器中;
若上述需要更新到外部存储器中的目录项是无效状态,并且上述目录容器中存在上述需要更新到外部存储器中的目录项对应的地址,则删除上述需要更新到外部存储器中的目录项对应地址在上述目录容器中的记录,并将上述需要更新到外部存储器中的目录项更新到外部存储器;
若上述需要更新到外部存储器中的目录项是非无效状态,并且上述目录容器中不存在上述需要更新到外部存储器中的目录项对应的地址,则将上述需要更新到外部存储器中的目录项对应的地址记录在上述目录容器中,并将上述需要更新到外部存储器中的目录项更新到外部存储器。
以下实施例将结合系统架构对本发明实施例进行更详细的说明。如图3所示,为本发明实施例提供的系统架构图,内存控制器30内包含有:CC引擎301、目录缓存DC(302),以及DCC(Directory Cache Case,目录容器)303;以及外部存储器40;在图2所示的结构中,目录容器303是包含在缓存目录302所在的模块内的,实际上目录容器DCC使用单独的模块也是可以的,图3所示结构并不是唯一可实现的系统架构。上述外部存储器可以是DIMM,在后续实施例中也将以DIMM为例进行举例说明。
以上系统加载在目录缓存DC的基础上增加了一个目录容器(Directory CacheCase,DCC)的模块。该模块标记了被访问过的地址空间记录在DIMM对应的DCC的目录中的情况。由于片上内存有限,跟DC(Directory Cache,目录缓存)一样,DCC记录的信息也是有限的,甚至比DC占用的空间还要小得多。所以DCC记录的信息一般也是模糊的,在本发明实施例中,DCC记录的信息满足如下条件(或称为:特征):
1、某个内存块所对应的目录项记录在外部存储器中,且状态非无效态,则在DCC中有记录;
2、某个内存块所对应的目录项记录在外部存储器中,且状态是无效态,则可以记录在DCC中,也可以不记录;
3、多个内存块在DCC中的信息可以在DCC中的一个记录项中,也可以在多个记录项中,但同一个内存块不必出现在多个DCC记录项中。
基于以上记录规则,由DCC的要求可以知道,对于DCC中没有记录的内存块,该内存块的目录状态在外部存储器中的记录必定是无效态。所以对于这类内存块的访问,将不需要再从外部存储器中读取目录项,从而可以进一步降低了延时。
本发明实施例可以不对DCC模块的具体设计做限制,但是对DCC本身的特性及对其访问,创建,更新及删除做了保护。本发明实施例可以采用以下较为简单的数据结构为DCC的记录项来阐述,具体如下表1所示:
表1
成员 | 描述 |
state | Busy/Idle,表示占用还是空闲 |
start_addr | 第一内存块的开始地址 |
end_addr | 最后内存块的开始地址 |
基于以上图3的系统架构,本发明实施例提供了如下的几种处理方案。
方案一:如图4所示,图4为DCC的访问,更新(包括创建和删除)的流程,具体如下:
401:内存控制器接收来自处理器的内存访问请求消息;上述内存访问请求消息携带了需要访问的内存地址,内存控制器内的CC引擎向目录缓存发送携带上述内存地址的目录访问请求。
402:目录缓存接收到目录访问请求后,先根据上述内存地址检查DC是否存在与上述内存地址对应的目录项,检查的结果存在Hit(命中)与Miss(不命中)两种结果。在本发明实施例中,若存在与上述内存地址相同地址的目录项,则表示Hit,否则表示Miss,如果不命中,进入403,如果命中,进入409;
403:确定检查DC不命中,则检查DCC是否存在上述内存地址的记录项,检查结果存在Hit(命中)与Miss(不命中)两种结果。在本发明实施例中,若在DCC中存在记录项包含了上述内存地址,则表示Hit,否则表示Miss;如果Hit则进入404,否则进入405;
404:若检查DCC命中,则表示需要向外部存储请求目录项,并等待返回的目录项;
405:在DC中创建内存地址的目录项。在本步骤中,如果是因为DCC不命中,则创建状态为无效态的目录项;若是因为DCC命中,并且外部存储返回了目录项,则根据返回的目录项创建。
406:确定是否有足够的空间来放置创建的目录项。
由于在创建目录项时,DC有可能没有多余的空间来放置要创建的目录项,这时候需要选择某一已经存在的目录项替换出去。目前可选的替换算法很多,本领域技术人员可以依据需要自由选择,本发明实施例对此不予限定。这里存在Yes(需要替换)和No(不需要替换)两种结果,如果要替换,则进入407,否则进入408;
407:确定DC发生目录替换后,将被替换的目录项回写到外部存储器中;同时需要更新DCC。
可以理解的是,由于DCC存储了在外部存储器中存在并且非无效态的目录项,在步骤407中的回写步骤可能导致外部存储器中存在并且非无效态的目录项的变化,因此本步骤进行了DCC的更新。
408:向CC引擎返回得到的目录项。
方案二:本方案中涉及的是DCC的更新(包括删除和创建操作)。如图5所示,当有目录项需要更新到外部存储时,可能需要更新DCC,具体流程如下:
501:存储管理器确定有目录项需要更新到外部存储;
502:首先检查上述目录项是否为无效态;本步骤确定目录项是否为无效态的结果存在Yes(无效态)和No(非无效态)两种结果,如果为无效态进入503,如果为非无效态进入504;
503:确定目录项为无效态后,检查DCC的记录项中是否包含了上述目录项所对应的内存地址;本步骤检查的结果有两种:Yes(包含)和No(不包含)两种结果;如果包含,进入505,如果不包含,结束流程。
504:本步骤与503类似,检查DCC的记录项中是否包含了上述目录项所对应的内存地址;本步骤检查的结果有两种:Yes(包含)和No(不包含)两种结果;如果不包含,进入506,如果包含,结束流程。
505:确定需要执行的是DCC的删除操作。
对于不同的DCC设计,删除操作依赖于具体的算法。以本发明实施例中的表1结构示例,假设目录项的内存地址是addr:
如果相应的DCC记录项中start_addr==addr&&end_addr==addr,则删除DCC即可,即修改state为Idle;
如果start_addr==addr&&end_addr>addr,则修改start_addr=addr+1(这里的地址都以内存块为统一粒度)即可;
如果start_addr<addr&&end_addr==addr,则修改end_addr=addr–1;
如果start_addr<addr&&end_addr>addr,且又有其他空闲的DCC项,则该DCC项分拆成两个DCC项,状态都为Busy,其中一个的start_addr不变,end_addr=addr–1;另一个end_addr不变,start_addr=addr+1;如果不存在其他空闲的DCC项,则忽略删除操作。
506:确定需要执行的是DCC的创建操作。
对于不同的DCC设计,创建操作依赖于具体的算法。以本发明实施例中的表1结构示例,假设目录项的内存地址是addr:加入存在空闲的DCC项,则直接使用该DCC项,将state改为Busy,start_addr=addr,end_addr=addr;若不存在其他空闲的DCC项,则需要查找离addr最近的DCC项。所谓“最近”的地址,可以是两个地址差最小,也可以根据算法达到某种逻辑上最近,比如属于同一个页面,属于同一个DIMM条等。若找到的DCC项start_addr>addr,则start_addr=addr;若end_addr<addr,则end_addr=addr。
在以上实施例中,DC的设计可能允许正在被CC引擎访问的目录项被替换,那么目录项回写DC时有可能发生不命中的情况,使得需要额外的操作将目录项更新到外部存储,这个时候也需要更新DCC。此种情况下是被更新回DC的目录项需要缓存在DC中,那么有可能因为没有空闲的位置将另一目录项替换出来,更新到外部存储器中。在更新的同时需要更新DCC,更新具体步骤与图5所示的操作一样,在此不再赘述。
在以上实施例中,DC的设计可能允许正在被CC引擎访问的目录项被替换,那么目录项回写DC时有可能发生不命中的请求,使得需要额外的操作将目录项更新到外部存储,这个时候也需要更新DCC。此种情况下是被更新回DC的目录项不需要缓存在DC中,而是直接更新到外部存储器中,在更新到外部存储器的同时需要更新DCC,更新具体步骤与图5所示的操作一样,在此不再赘述。
为了进一步减少DC的访问(包括频率和空间),本发明实施例还提供了先对DCC进行访问,DCC命中的情况下才进一步访问DC或者外部存储的方案。那么本实施例的内存访问控制方法的流程如图6所示。对于其中任意单独步骤,与图4中对应的操作是相同的在此不进行赘述。其中在步骤607中,只需要更新目录项和外部存储器即可,不需要更新DCC。更新DCC的操作是在CC引擎更新目录项到DC时发生,流程参考图5所示流程,与图5流程不同点在于步骤501不是因为目录项更新到外部存储,而是因为更新到DC。
601:内存控制器接收来自处理器的内存访问请求消息;上述内存访问请求消息携带了需要访问的内存地址,内存控制器内的CC引擎向目录缓存发送携带上述内存地址的目录访问请求。
602:检查DCC是否存在上述内存地址的记录项,检查结果存在Hit(命中)与Miss(不命中)两种结果。在本发明实施例中,若在DCC中存在记录项包含了上述内存地址,则表示Hit,否则表示Miss;如果Hit则进入603,否则进入608;
603:根据上述内存地址检查DC是否存在与上述内存地址对应的目录项,检查的结果存在Hit(命中)与Miss(不命中)两种结果。在本发明实施例中,若存在与上述内存地址相同地址的目录项,则表示Hit,否则表示Miss,如果不命中,进入604,如果命中,进入608;
604:若检查DCC命中,则表示需要向外部存储请求目录项,并等待返回的目录项。
605:在DC中创建内存地址的目录项。在本步骤中,如果是因为DCC不命中,则创建状态为无效态的目录项;若是因为DCC命中,并且外部存储返回了目录项,则根据返回的目录项创建。
606:确定是否有足够的空间来放置创建的目录项。
由于在创建目录项时,DC有可能没有多余的空间来放置要创建的目录项,这时候需要选择某一已经存在的目录项替换出去。目前可选的替换算法很多,本领域技术人员可以依据需要自由选择,本发明实施例对此不予限定。这里存在Yes(需要替换)和No(不需要替换)两种结果,如果要替换,则进入607,否则进入608;
607:确定DC发生目录替换后,将被替换的目录项回写到外部存储器中;同时需要更新DCC。
可以理解的是,由于DCC存储了在外部存储器中存在并且非无效态的目录项,在步骤407中的回写步骤可能导致外部存储器中存在并且非无效态的目录项的变化,因此本步骤进行了DCC的更新。
608:向CC引擎返回得到的目录项。
本发明实施例中在有DC的基础上增加了DCC,用于对外部存储中无效态的目录进行过滤,从而减少访问目录的延时,进而降低访问内存的延时。本发明实施例中,DCC模块适用于使用基于内存的目录设计的任何组件,比如集成了内存的处理器,独立的内存控制器,具有目录管理的NC(Network Computer,网络计算机)等。
本发明实施例提供了一种内存访问控制装置,如图7所示,包括:
地址确定单元701,用于确定接收到的内存访问请求指定的内存地址;
查询单元702,用于查询目录缓存,确定上述目录缓存中是否存在与上述地址确定单元701确定的内存地址对应的目录项;查询目录容器,确定上述目录容器中是否存在与上述内存地址对应的记录项;上述目录项的信息指示缓存有上述内存访问请求访问的数据缓存的位置;上述记录项记录有在外部存储器中存有且对应的内存地址的状态为非无效状态的目录项的地址;
访问控制单元703,用于若上述查询单元702确定上述目录缓存中不存在与上述内存地址对应的目录项,且上述目录容器中不存在与上述内存地址对应的记录项,则确定上述内存地址对应的目录项为无效状态。
以上实施例,新增了目录容器,在目录容器的记录项记录有在外部存储器中存有且对应的内存地址的状态为非无效状态的目录项的地址;目录缓存中不存在与上述内存地址对应的目录项,且目录容器中不存在与上述内存地址对应的记录项的情况下,可以避免对无效状态的目录项对应地址的外部访问,从而降低内存访问延时,提高内存访问性能。
可以理解的是,如果在目录缓存中存在于上述内存地址对应的目录项,则可以直接向内存访问请求的发送端返回查询到的目录项。
在本实施例中,目录容器中的记录项,还可以记录在外部存储器中存有且对应的内存地址的状态为无效状态的目录项的地址;一条记录项可以记录多个内存块的地址,一个内存块的地址不必在两条以上的记录项中有记录。
可选地,为了进一步的减少对目录缓存的访问,本发明实施例可以先访问目录容器然后再访问目录缓存的方式来进行,具体如下:上述查询单元702,用于查询目录容器,确定上述目录容器中是否存在与上述内存地址对应的记录项;若上述目录容器中不存在与上述内存地址对应的记录项,则查询目录缓存,确定上述目录缓存中是否存在与上述内存地址对应的目录项。
进一步地,本发明实施例还提供了需要访问外部存储器来获取目录项的方案,如下:如图8所示,上述装置,还包括:
请求发送单元801,用于若上述目录缓存中不存在与上述内存地址对应的目录项,且上述目录容器中存在与上述内存地址对应的记录项,则向外部存储器请求与上述内存地址对应的目录项;
目录接收单元802,用于接收外部存储器返回的目录项。
进一步地,本发明实施例还提供了如何在目录缓存中创建目录项的方案,具体如下:如图9所示,上述装置,还包括:
目录创建单元901,用于若上述访问控制单元703确定上述内存地址对应的目录项为无效状态,则在目录缓存中创建与上述内存地址对应的目录项并记录为无效状态;或者,在目录接收单元802接收到外部存储器返回的目录项后,依据外部存储器返回的目录项,在目录缓存中创建与上述内存地址对应的目录项。
进一步地,由于目录缓存的空间有限,并不一定有空闲的空间来存储新的目录项,本发明实施例提供了解决方案。另外,由于创建了新的目录项,那么目录容器中记录的信息也可能需要更新,本发明实施例提供了如下解决方案:如图10所示,上述装置,还包括:
空间确定单元1001,用于在上述目录创建单元901创建目录项之前,确定当前目录缓存是否有空间用于存储新的目录项;
选择单元1002,用于若上述空间确定单元1001确定结果为没有,则从上述目录缓存中选择目录项;
替换单元1003,用于将上述选择单元1002选择的目录项替换为上述目录创建单元901创建的目录项;
容器更新单元,用于若上述选择单元1002选择的目录项为非无效状态,且上述目录容器中未记录上述选择的目录项的地址,则将上述目录项的地址记录在上述目录容器中。
进一步地,本发明实施例还提供了向内存访问请求的发送方返回目录项的具体实现方案如下:如图11所示,上述装置,还包括:
上述访问控制单元703,还用于若上述目录缓存中存在与上述内存地址对应的目录项,则获取与上述内存地址对应的目录项作为得到的目录项;若创建了目录项,则将创建的目录项作为得到的目录项;
目录发送单元1101,用于向上述内存访问请求的发送方返回得到的目录项。
进一步地,本发明实施例还提供了如何对目录缓存以及目录容器进行更新的方案(更新可以是新建、删除等改变目录项的任意操作)上述方法,还包括:如图12所示,上述装置,还包括:
上述查询单元702,还用于若确定目录缓存中有目录项需要更新到上述外部存储器中,则确定需要更新的目录项是否为无效状态以及是否存在于上述目录容器中;上述装置还包括:
更新控制单元1201,用于若上述查询单元702确定上述需要更新到外部存储器中的目录项是无效状态,并且上述目录容器中存在上述需要更新到外部存储器中的目录项对应的地址,则删除上述需要更新到外部存储器中的目录项对应地址在上述目录容器中的记录,并将上述需要更新到外部存储器中的目录项更新到外部存储器;若上述需要更新到外部存储器中的目录项是非无效状态,并且上述目录容器中不存在上述需要更新到外部存储器中的目录项对应的地址,则将上述需要更新到外部存储器中的目录项对应的地址记录在上述目录容器中,并将上述需要更新到外部存储器中的目录项更新到外部存储器。
本发明实施例还提供了另一种设备,该设备具有内存访问控制的功能,该设备可以是任意如图13所示,包括:两个或两个以上的处理器1301、内存控制器1302、存储器1303;发射器1304以及接收器1305;
其中,上述存储器1303,用于存储目录缓存以及目录容器,上述目录缓存的目录项的信息指示缓存有上述内存访问请求访问的数据缓存的位置;上述目录容器的记录项记录有在外部存储器中存有且对应的内存地址的状态为非无效状态的目录项的地址;
上述内存控制器1302,用于接收来自处理器1301的内存访问请求,并确定上述内存访问请求指定的内存地址;查询目录缓存,确定上述目录缓存中是否存在与上述内存地址对应的目录项;查询目录容器,确定上述目录容器中是否存在与上述内存地址对应的记录项;上述目录项的信息指示缓存有上述内存访问请求访问的数据缓存的位置;上述记录项记录有在外部存储器中存有且对应的内存地址的状态为非无效状态的目录项的地址;若上述目录缓存中不存在与上述内存地址对应的目录项,且上述目录容器中不存在与上述内存地址对应的记录项,则确定上述内存地址对应的目录项为无效状态。
以上实施例,新增了目录容器,在目录容器的记录项记录有在外部存储器中存有且对应的内存地址的状态为非无效状态的目录项的地址;目录缓存中不存在与上述内存地址对应的目录项,且目录容器中不存在与上述内存地址对应的记录项的情况下,可以避免对无效状态的目录项对应地址的外部访问,从而降低内存访问延时,提高内存访问性能。
可以理解的是,如果在目录缓存中存在于上述内存地址对应的目录项,则可以直接向内存访问请求的发送端返回查询到的目录项。
在本实施例中,目录容器中的记录项,还可以记录在外部存储器中存有且对应的内存地址的状态为无效状态的目录项的地址;一条记录项可以记录多个内存块的地址,一个内存块的地址不必在两条以上的记录项中有记录。
可选地,为了进一步的减少对目录缓存的访问,本发明实施例可以先访问目录容器然后再访问目录缓存的方式来进行,具体如下:上述内存控制器1302,用于查询目录缓存,确定上述目录缓存中是否存在与上述内存地址对应的目录项;查询目录容器,确定上述目录容器中是否存在与上述内存地址对应的记录项;包括:用于查询目录容器,确定上述目录容器中是否存在与上述内存地址对应的记录项;若上述目录容器中不存在与上述内存地址对应的记录项,则查询目录缓存,确定上述目录缓存中是否存在与上述内存地址对应的目录项。
进一步地,本发明实施例还提供了需要访问外部存储器来获取目录项的方案,如下:上述内存控制器1302,还用于若上述目录缓存中不存在与上述内存地址对应的目录项,且上述目录容器中存在与上述内存地址对应的记录项,则向外部存储器请求与上述内存地址对应的目录项,并接收外部存储器返回的目录项。
进一步地,本发明实施例还提供了如何在目录缓存中创建目录项的方案,具体如下:上述内存控制器1302,还用于若确定上述内存地址对应的目录项为无效状态,则在目录缓存中创建与上述内存地址对应的目录项并记录为无效状态;或者,在外部存储器返回目录项后,依据外部存储器返回的目录项,在目录缓存中创建与上述内存地址对应的目录项。
进一步地,由于目录缓存的空间有限,并不一定有空闲的空间来存储新的目录项,本发明实施例提供了解决方案。另外,由于创建了新的目录项,那么目录容器中记录的信息也可能需要更新,本发明实施例提供了如下解决方案:上述内存控制器1302,还用于在创建目录项之前,确定当前目录缓存是否有空间用于存储新的目录项,若没有,则从上述目录缓存中选择目录项,将选择的目录项替换为创建的目录项;若上述选择的目录项为非无效状态,且上述目录容器中未记录上述选择的目录项的地址,则将上述目录项的地址记录在上述目录容器中。
进一步地,本发明实施例还提供了向内存访问请求的发送方返回目录项的具体实现方案如下:上述内存控制器1302,还用于若上述目录缓存中存在与上述内存地址对应的目录项,则获取与上述内存地址对应的目录项作为得到的目录项;若创建了目录项,则将创建的目录项作为得到的目录项;向上述内存访问请求的发送方返回得到的目录项。
进一步地,本发明实施例还提供了如何对目录缓存以及目录容器进行更新的方案(更新可以是新建、删除等改变目录项的任意操作)上述方法,还包括:上述内存控制器1302,还用于若确定目录缓存中有目录项需要更新到上述外部存储器中,则确定需要更新的目录项是否为无效状态以及是否存在于上述目录容器中;
若上述需要更新到外部存储器中的目录项是无效状态,并且上述目录容器中存在上述需要更新到外部存储器中的目录项对应的地址,则删除上述需要更新到外部存储器中的目录项对应地址在上述目录容器中的记录,并将上述需要更新到外部存储器中的目录项更新到外部存储器;
若上述需要更新到外部存储器中的目录项是非无效状态,并且上述目录容器中不存在上述需要更新到外部存储器中的目录项对应的地址,则将上述需要更新到外部存储器中的目录项对应的地址记录在上述目录容器中,并将上述需要更新到外部存储器中的目录项更新到外部存储器。
值得注意的是,上述装置和设备实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
另外,本领域普通技术人员可以理解实现上述各方法实施例中的全部或部分步骤是可以通过程序来指令相关的硬件完成,相应的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明实施例揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (14)
1.一种内存访问控制方法,其特征在于,包括:
接收内存访问请求,并确定所述内存访问请求指定的内存地址;
查询目录缓存,确定所述目录缓存中是否存在与所述内存地址对应的目录项;查询目录容器,确定所述目录容器中是否存在与所述内存地址对应的记录项;所述目录项的信息指示缓存有所述内存访问请求访问的数据缓存的位置;所述记录项记录有在外部存储器中存有且对应的内存地址的状态为非无效状态的目录项的地址;
若所述目录缓存中不存在与所述内存地址对应的目录项,且所述目录容器中不存在与所述内存地址对应的记录项,则确定所述内存地址对应的目录项为无效状态,在所述目录缓存中创建与所述内存地址对应的目录项并记录为无效状态。
2.根据权利要求1所述方法,其特征在于,所述查询目录缓存,确定所述目录缓存中是否存在与所述内存地址对应的目录项;查询目录容器,确定所述目录容器中是否存在与所述内存地址对应的记录项;包括:
查询目录容器,确定所述目录容器中是否存在与所述内存地址对应的记录项;若所述目录容器中不存在与所述内存地址对应的记录项,则查询目录缓存,确定所述目录缓存中是否存在与所述内存地址对应的目录项。
3.根据权利要求1所述方法,其特征在于,还包括:
若所述目录缓存中不存在与所述内存地址对应的目录项,且所述目录容器中存在与所述内存地址对应的记录项,则向外部存储器请求与所述内存地址对应的目录项,并接收外部存储器返回的目录项。
4.根据权利要求3所述方法,其特征在于,还包括:
若确定所述内存地址对应的目录项为无效状态,在外部存储器返回目录项后,依据外部存储器返回的目录项,在目录缓存中创建与所述内存地址对应的目录项。
5.根据权利要求4所述方法,其特征在于,在创建目录项之前,还包括:
确定当前目录缓存是否有空间用于存储新的目录项,若没有,则从所述目录缓存中选择目录项,将选择的目录项替换为创建的目录项;若所述选择的目录项为非无效状态,且所述目录容器中未记录所述选择的目录项的地址,则将所述目录项的地址记录在所述目录容器中。
6.根据权利要求5所述方法,其特征在于,还包括:
若所述目录缓存中存在与所述内存地址对应的目录项,则获取与所述内存地址对应的目录项作为得到的目录项;若创建了目录项,则将创建的目录项作为得到的目录项;
向所述内存访问请求的发送方返回得到的目录项。
7.根据权利要求1至6任意一项所述方法,其特征在于,还包括:
若确定目录缓存中有目录项需要更新到所述外部存储器中,则确定需要更新的目录项是否为无效状态以及是否存在于所述目录容器中;
若所述需要更新到外部存储器中的目录项是无效状态,并且所述目录容器中存在所述需要更新到外部存储器中的目录项对应的地址,则删除所述需要更新到外部存储器中的目录项对应地址在所述目录容器中的记录,并将所述需要更新到外部存储器中的目录项更新到外部存储器;
若所述需要更新到外部存储器中的目录项是非无效状态,并且所述目录容器中不存在所述需要更新到外部存储器中的目录项对应的地址,则将所述需要更新到外部存储器中的目录项对应的地址记录在所述目录容器中,并将所述需要更新到外部存储器中的目录项更新到外部存储器。
8.一种内存访问控制装置,其特征在于,包括:
地址确定单元,用于确定接收到的内存访问请求指定的内存地址;
查询单元,用于查询目录缓存,确定所述目录缓存中是否存在与所述地址确定单元确定的内存地址对应的目录项;查询目录容器,确定所述目录容器中是否存在与所述内存地址对应的记录项;所述目录项的信息指示缓存有所述内存访问请求访问的数据缓存的位置;所述记录项记录有在外部存储器中存有且对应的内存地址的状态为非无效状态的目录项的地址;
访问控制单元,用于若所述查询单元确定所述目录缓存中不存在与所述内存地址对应的目录项,且所述目录容器中不存在与所述内存地址对应的记录项,则确定所述内存地址对应的目录项为无效状态,在所述目录缓存中创建与所述内存地址对应的目录项并记录为无效状态。
9.根据权利要求8所述装置,其特征在于,
所述查询单元,用于查询目录容器,确定所述目录容器中是否存在与所述内存地址对应的记录项;若所述目录容器中不存在与所述内存地址对应的记录项,则查询目录缓存,确定所述目录缓存中是否存在与所述内存地址对应的目录项。
10.根据权利要求8所述装置,其特征在于,还包括:
请求发送单元,用于若所述目录缓存中不存在与所述内存地址对应的目录项,且所述目录容器中存在与所述内存地址对应的目录项,则向外部存储器请求与所述内存地址对应的目录项;
目录接收单元,用于接收外部存储器返回的目录项。
11.根据权利要求10所述装置,其特征在于,还包括:
目录创建单元,用于若所述访问控制单元确定所述内存地址对应的目录项为无效状态,在目录接收单元接收到外部存储器返回的目录项后,依据外部存储器返回的目录项,在目录缓存中创建与所述内存地址对应的目录项。
12.根据权利要求11所述装置,其特征在于,还包括:
空间确定单元,用于在所述目录创建单元创建目录项之前,确定当前目录缓存是否有空间用于存储新的目录项;
选择单元,用于若所述空间确定单元确定结果为没有,则从所述目录缓存中选择目录项;
替换单元,用于将所述选择单元选择的目录项替换为所述目录创建单元创建的目录项;
容器更新单元,用于若所述选择单元选择的目录项为非无效状态,且所述目录容器中未记录所述选择的目录项的地址,则将所述目录项的地址记录在所述目录容器中。
13.根据权利要求12所述装置,其特征在于,
所述访问控制单元,还用于若所述目录缓存中存在与所述内存地址对应的目录项,则获取与所述内存地址对应的目录项作为得到的目录项;若创建了目录项,则将创建的目录项作为得到的目录项;
目录发送单元,用于向所述内存访问请求的发送方返回得到的目录项。
14.根据权利要求8至13任意一项所述装置,其特征在于,
所述查询单元,还用于若确定目录缓存中有目录项需要更新到所述外部存储器中,则确定需要更新的目录项是否为无效状态以及是否存在于所述目录容器中;所述装置还包括:
更新控制单元,用于若所述查询单元确定所述需要更新到外部存储器中的目录项是无效状态,并且所述目录容器中存在所述需要更新到外部存储器中的目录项对应的地址,则删除所述需要更新到外部存储器中的目录项对应地址在所述目录容器中的记录,并将所述需要更新到外部存储器中的目录项更新到外部存储器;若所述需要更新到外部存储器中的目录项是非无效状态,并且所述目录容器中不存在所述需要更新到外部存储器中的目录项对应的地址,则将所述需要更新到外部存储器中的目录项对应的地址记录在所述目录容器中,并将所述需要更新到外部存储器中的目录项更新到外部存储器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410142729.2A CN104978283B (zh) | 2014-04-10 | 2014-04-10 | 一种内存访问控制方法,及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410142729.2A CN104978283B (zh) | 2014-04-10 | 2014-04-10 | 一种内存访问控制方法,及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104978283A CN104978283A (zh) | 2015-10-14 |
CN104978283B true CN104978283B (zh) | 2018-06-05 |
Family
ID=54274810
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410142729.2A Active CN104978283B (zh) | 2014-04-10 | 2014-04-10 | 一种内存访问控制方法,及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104978283B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107085535B (zh) * | 2017-03-30 | 2020-10-27 | 联想(北京)有限公司 | 一种信息处理方法及电子设备 |
CN109656832A (zh) * | 2017-10-11 | 2019-04-19 | 深圳市中兴微电子技术有限公司 | 一种查表方法、计算机可读存储介质 |
CN110232030B (zh) * | 2019-06-12 | 2021-08-10 | 上海兆芯集成电路有限公司 | 多芯片系统及缓存处理方法 |
CN112433961B (zh) * | 2020-12-02 | 2022-07-08 | 海光信息技术股份有限公司 | 复合缓存目录系统及其管理方法 |
CN117093511B (zh) * | 2023-09-04 | 2024-05-10 | 海光云芯集成电路设计(上海)有限公司 | 访存控制方法、访存控制装置、芯片及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1231443A (zh) * | 1998-02-17 | 1999-10-13 | 国际商业机器公司 | 垂直高速缓冲的伪精确i-高速缓存的包括性 |
CN101354682A (zh) * | 2008-09-12 | 2009-01-28 | 中国科学院计算技术研究所 | 一种用于解决多处理器访问目录冲突的装置和方法 |
CN102708190A (zh) * | 2012-05-15 | 2012-10-03 | 浪潮电子信息产业股份有限公司 | 一种CC-NUMA系统中结点控制芯片目录Cache的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7395375B2 (en) * | 2004-11-08 | 2008-07-01 | International Business Machines Corporation | Prefetch miss indicator for cache coherence directory misses on external caches |
-
2014
- 2014-04-10 CN CN201410142729.2A patent/CN104978283B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1231443A (zh) * | 1998-02-17 | 1999-10-13 | 国际商业机器公司 | 垂直高速缓冲的伪精确i-高速缓存的包括性 |
CN101354682A (zh) * | 2008-09-12 | 2009-01-28 | 中国科学院计算技术研究所 | 一种用于解决多处理器访问目录冲突的装置和方法 |
CN102708190A (zh) * | 2012-05-15 | 2012-10-03 | 浪潮电子信息产业股份有限公司 | 一种CC-NUMA系统中结点控制芯片目录Cache的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104978283A (zh) | 2015-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104978283B (zh) | 一种内存访问控制方法,及装置 | |
US10409728B2 (en) | File access predication using counter based eviction policies at the file and page level | |
US20150058570A1 (en) | Method of constructing share-f state in local domain of multi-level cache coherency domain system | |
CN103678523B (zh) | 分布式高速缓存cache数据访问方法和装置 | |
CN103076992B (zh) | 一种内存数据缓冲方法及装置 | |
US9170943B2 (en) | Selectively enabling write caching in a storage system based on performance metrics | |
CN105677580A (zh) | 访问缓存的方法和装置 | |
US8032708B2 (en) | Method and system for caching data in a storgae system | |
CN110232049A (zh) | 一种元数据缓存管理方法和装置 | |
CN106802955B (zh) | 一种图片数据缓存方法 | |
CN113934655B (zh) | 解决高速缓冲存储器地址二义性问题的方法和装置 | |
CN107341114A (zh) | 一种目录管理的方法、节点控制器和系统 | |
CN107992270B (zh) | 一种多控存储系统全局共享缓存的方法及装置 | |
CN109002503A (zh) | 一种元数据读取方法、装置、设备及可读存储介质 | |
US20230121843A1 (en) | Managing data stored in a cache using a reinforcement learning agent | |
CN108459972B (zh) | 一种多通道固态硬盘的高效缓存管理设计方法 | |
CN105915619A (zh) | 顾及访问热度的网络空间信息服务高性能内存缓存方法 | |
CN108733584B (zh) | 用于优化数据缓存的方法和设备 | |
CN103544117B (zh) | 一种数据读取方法及装置 | |
CN109669881B (zh) | 一种基于Cache空间预约算法的计算方法 | |
CN114390069B (zh) | 基于分布式缓存的数据访问方法与系统、设备及存储介质 | |
CN113791989B (zh) | 基于cache的缓存数据处理方法、存储介质及芯片 | |
CN109582233A (zh) | 一种数据的缓存方法和装置 | |
US20130173862A1 (en) | Method for cleaning cache of processor and associated processor | |
CN115080459A (zh) | 缓存管理方法及装置、计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |