CN104156322B - 一种缓存管理方法及缓存管理装置 - Google Patents
一种缓存管理方法及缓存管理装置 Download PDFInfo
- Publication number
- CN104156322B CN104156322B CN201410382467.7A CN201410382467A CN104156322B CN 104156322 B CN104156322 B CN 104156322B CN 201410382467 A CN201410382467 A CN 201410382467A CN 104156322 B CN104156322 B CN 104156322B
- Authority
- CN
- China
- Prior art keywords
- page
- cpu
- local
- memory region
- local memory
- 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
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种缓存管理方法及缓存管理装置,涉及计算机应用技术领域,合理迁移内存页,使得数据尽量集中在各CPU的本地内存区域,避免过多异地访问内存导致的数据访问速率下降,提高数据访问速率。所述方法包括:记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率;检测所述各内存页中是否存在待迁移内存页,若所述各内存页中存在所述待迁移内存页,则将对所述待迁移内存页的访问频率最大的CPU确定为目标CPU;将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
Description
技术领域
本发明涉及计算机应用技术领域,尤其涉及一种缓存管理方法及缓存管理装置。
背景技术
随着计算机应用技术的迅速发展,会给服务器配置2个、4个甚至是8个CPU,进而就产生了NUMA(Non Uniform Memory Access Architecture,非统一内存访问架构)。在NUMA架构下,处理器会划分出一个内存较大的地址空间作为数据缓冲区,将这个数据缓冲区划分成多个内存区域且每个CPU对应有一个内存区域。NUMA架构能够降低各CPU之间的链接延迟,且具有良好扩展性以及易编程的特点。
NUMA架构中将各CPU与其对应的内存区域划分为一个NUMA节点,每两个NUMA节点之间通过QPI(Quick Path Interconnect,快速通道互联)links(链接)实现高速通信链接。通常,各CPU可以通过内部的QPI总线快速访问到本地内存中的数据。若节点A、B分别为两个NUMA节点。当节点A中的CPU1需要访问节点B对应的内存区域中的数据时,节点A首先通过QPIlinks将数据请求发送给节点B,之后节点B再通过其内部的QPI总线访问其对应的内存区域,获得数据之后再发送给节点A。这样,导致跨NUMA节点访问内存时需要通过QPI的中转才能实现,速度较慢,即NUMA系统中处理器访问其本地内存的速度远大于访问非本地内存的速度。
因此,现有NUMA系统跨NUMA节点访问非本地内存时,数据访问速度下降,系统性能下降。
发明内容
本发明实施例提供一种缓存管理方法及缓存管理装置,避免各CPU过多的访问除其对应的本地内存区域外的内存区域,提高数据访问的速率,进而提高系统性能。
为达到上述目的,本发明实施例采用的技术方案是,
第一方面,公开了一种缓存管理方法,应用于非统一内存访问架构NUMA设备,所述NUMA设备包含至少两个中央处理器CPU以及数据缓冲区,所述数据缓冲区包含至少两个本地内存区域,每个CPU对应一个本地内存区域,其特征在于,针对每个CPU,所述方法包括:
记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率;
检测所述各内存页中是否存在待迁移内存页,其中,所述待迁移内存页被所述本地CPU访问的频率小于被其他CPU访问的频率;
若所述各内存页中存在所述待迁移内存页,则将对所述待迁移内存页的访问频率最大的CPU确定为目标CPU;
将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
结合第一方面,在第一方面的第一种可能的实现方式中,所述检测所述各内存页中是否存在待迁移内存页具体包括:
检测所述本地CPU的本地内存区域中是否存在被所述本地CPU访问的频率为零的内存页;
若存在,则将所述被所述本地CPU访问的频率为零的内存页确定为所述待迁移内存页。
结合第一方面、第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述方法还包括:
所述本地CPU利用局部索引记录所述本地CPU的本地内存区域中各内存页在本地内存区域中的存储地址,与所述各内存页的编号之间的对应关系;利用全局索引记录所述本地CPU的本地内存区域中各内存页在除所述本地CPU的本地内存区域外的缓存区域中的存储地址,与所述各内存页的编号之间的对应关系。
结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述方法还包括:
所述本地CPU访问其本地内存区域中的第一内存页时,将所述本地CPU对所述第一内存页的访问频率值加1,将其他访问所述第一内存页的CPU对所述第一内存页的访问频率值均减1。
结合第一方面、第一方面的第一至第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述将所述待迁移内存页迁移至所述目标CPU的本地内存区域具体包括:
若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存不能容纳内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页删除之后,所述本地CPU再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
结合第一方面、第一方面的第一至第四种可能的实现方式,在第一方面的第五种可能的实现方式中,所述将所述待迁移内存页迁移至所述目标CPU的本地内存区域具体包括:
若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存区域能容纳至少一个内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页迁移至所述数据缓冲区的空闲内存区域中之后,所述本地CPU再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
结合第一方面的第二种可能的实现方式,在第一方面的第六种可能的实现方式中,所述方法还包括:
所述本地CPU生成数据访问指令,所述数据访问指令携带所述本地CPU的待访问内存页的编号M;
所述本地CPU检测所述局部索引中是否记录有编号为所述M的内存页的存储地址;
若所述局部索引中记录有编号为所述M的内存页的存储地址,则根据记录的编号为所述M的内存页的存储地址获取所述待访问内存页;若所述局部索引中没有记录编号为所述M的内存页的存储地址,则检测所述全局索引中是否记录有编号为所述M的内存页的存储地址;
若所述全局索引中记录有编号为所述M的内存页的存储地址,则根据记录的编号为所述M的内存页的存储地址查找到所述待访问内存页。
结合第一方面的第六种可能的实现方式,在第一方面的第七种可能的实现方式中,若所述全局索引中没有记录编号为所述M的内存页的存储地址,则所述本地CPU访问物理磁盘,查找到所述待访问内存页。
结合第一方面的第七种可能的实现方式,在第一方面的第八种可能的实现方式中,在所述本地CPU则访问物理磁盘,查找到所述待访问内存页之后,所述方法还包括:
若所述本地CPU的本地内存区域已饱和,则判断所述数据缓冲区是否饱和;
若判断所述数据缓冲区未饱和,则将所述待访问内存页迁移至所述数据缓冲区中除所述本地CPU的本地内存区域外的缓存区域。
第二方面,公开了一种缓存管理装置,应用于非统一内存访问架构NUMA设备,所述NUMA设备包含至少两个中央处理器CPU以及数据缓冲区,所述NUMA设备包含数据缓冲区,所述数据缓冲区包含至少一个本地内存区域,每个CPU对应一个本地内存区域,其特征在于,包括:
记录单元,用于记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率;
检测单元,用于检测所述各内存页中是否存在待迁移内存页,其中,所述待迁移内存页被所述本地CPU访问的频率小于被其他CPU访问的频率;
确定单元,用于在所述检测单元检测到所述各内存页中存在所述待迁移内存页之后,将对所述待迁移内存页的访问频率最大的CPU确定为目标CPU;
迁移单元,用于将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
结合第二方面,在第二方面的第一种可能的实现方式中,
所述检测单元具体用于,检测所述本地CPU的本地内存区域中是否存在被所述本地CPU访问的频率为零的内存页;
所述确定单元具体用于,在所述检测单元检测到所述本地CPU的本地内存区域中存在被所述本地CPU访问的频率为零的内存页之后,将所述被所述本地CPU访问的频率为零的内存页确定为所述待迁移内存页。
结合第二方面、第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,
所述记录单元还用于,利用局部索引记录所述本地CPU的本地内存区域中各内存页在本地内存区域中的存储地址,与所述各内存页的编号之间的对应关系;利用全局索引记录所述本地CPU的本地内存区域中各内存页在除所述本地CPU的本地内存区域外的缓存区域中的存储地址,与所述各内存页的编号之间的对应关系。
结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,
所述记录单元还用于,在所述本地CPU访问其本地内存区域中的第一内存页时,将所述本地CPU对所述第一内存页的访问频率值加1,将其他访问所述第一内存页的CPU对所述第一内存页的访问频率值均减1。
结合第二方面、第二方面的第一至第三种可能的实现方式,在第二方面的第四种可能的实现方式中,
所述迁移单元具体用于,若确定所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存不能容纳内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页删除之后,再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
结合第二方面、第二方面的第一至第四种可能的实现方式,在第二方面的第五种可能的实现方式中,
所述迁移单元具体用于,若确定所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存区域能容纳至少一个内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页迁移至所述数据缓冲区的空闲内存区域中之后,再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
结合第二方面的第二种可能的实现方式,在第二方面的第六种可能的实现方式中,
还包括生成单元和获取单元,
所述生成单元,用于生成数据访问指令,所述数据访问指令携带所述本地CPU的待访问内存页的编号M;
所述检测单元还用于,检测所述局部索引中是否记录有编号为所述M的内存页的存储地址;
所述获取单元用于,在所述检测单元确定所述局部索引中记录有编号为所述M的内存页的存储地址之后,根据记录的编号为所述M的内存页的存储地址获取所述待访问内存页;
所述检测单元还用于,在确定所述局部索引中没有记录编号为所述M的内存页的存储地址,检测所述全局索引中是否记录有编号为所述M的内存页的存储地址;
所述获取单元还用于,在所述检测单元确定所述全局索引中记录有编号为所述M的内存页的存储地址之后,根据记录的编号为所述M的内存页的存储地址查找到所述待访问内存页。
结合第二方面的第六种可能的实现方式,在第二方面的第七种可能的实现方式中,
所述获取单元还用于,在所述检测单元确定所述全局索引中没有记录编号为所述M的内存页的存储地址之后,访问物理磁盘,查找到所述待访问内存页。
结合第二方面的第七种可能的实现方式,在第二方面的第八种可能的实现方式中,
所述检测单元还用于,在确定所述本地CPU的本地内存区域已饱和之后,判断所述数据缓冲区是否饱和;
所述迁移单元具体用于,在所述检测单元判断所述数据缓冲区未饱和之后,将所述待访问内存页迁移至所述数据缓冲区中除所述本地CPU的本地内存区域外的缓存区域。
本发明实施例提供的缓存管理方法及缓存管理装置,针对设备中的每个CPU,记录所述CPU本地内存区域中各内存页被各CPU访问的频率,并将所述CPU的各内存页中存在的待迁移内存页迁移至对所述待迁移内存页访问频率最大的CPU的本地内存区域中,进而使得各CPU访问的数据尽量集中在各CPU的本地内存区域中,减少了现有技术中由于各CPU访问异地内存而导致的数据访问速率下降,提高数据访问的速率,进而提高系统性能。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的NUMA系统的结构示意图;
图2为本发明实施例1提供的缓存管理方法的流程示意图;
图3为本发明实施例2提供的缓存管理方法的流程示意图;
图4为本发明实施例3提供的另一缓存管理方法的流程示意图;
图5为本发明实施例4提供的缓存管理装置的结构框图;
图6为本发明实施例5提供的另一缓存管理装置的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例将传统数据库的单一数据缓冲区依照其NUMA属性划分为多个区域。即处理器会划分出一个内存较大的地址空间作为数据缓冲区,将这个数据缓冲区划分成多个内存区域,每个CPU对应有一个内存区域,并且只使用该CPU对应的局部内存。其中,本发明所述的数据缓冲区实为设备中的内存条等硬件。实现时,每一个应用程序与DBMS(database management system,数据库管理系统)的连接都被绑定到一个特定的CPU上,并且尽可能地从该CPU的局部内存中查找数据。对于数据缓冲区中的各个页面,使用两个索引记录其位置,一个索引记录的是该内存页本地缓冲区的存储位置,只供本地缓存区域对应的CPU使用。另一个为全局索引,记录了该内存页相对于整个数据缓冲区的存储地址,所有CPU都可以通过该索引访问该内存页。需要说明的是本发明实施例中提到的第一、第二无先后顺序之分,仅用以区分不同的内存页或者不同的CPU。
所谓NUMA架构指的是服务器配置有多个CPU。图1所示的NUMA系统,服务器的处理器包含4个CPU,服务器的处理器将数据缓冲区划分为四个区域分别是内存区域1、内存区域2、内存区域3以及内存区域4,每个CPU对应一个内存区域。将各CPU与其对应的内存区域划分为一个NUMA节点,各CPU通过QPI总线把数据访问异地数据(即不在该CPU对应的内存区域中的数据)。具体地,若节点A、B分别为两个NUMA节点。当节点A中的CPU1需要访问节点B对应的内存区域中的数据时,节点A首先通过QPI links将数据请求发送给节点B,之后节点B再通过其内部的QPI总线访问其对应的内存区域,获得数据之后再发送给节点A。
实施例1:
本发明实施例提供了一种缓存管理方法,应用于NUMA架构的设备,所述设备包含至少两个中央处理器CPU,所述设备包含数据缓冲区,所述数据缓冲区被划分为至少两个本地内存区域,每个CPU对应一个本地内存区域,针对每个CPU。如图2所述,所述方法包括以下步骤:
101、记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率。
针对服务器(缓存管理装置)中的每个CPU,对应本发明实施例提供的方法,当将某CPU作为执行主体时,就将该CPU称为本地CPU。各CPU均会记录其本地内存区域中的内存页被各CPU访问的频率,这样方便各CPU对各内存页的被访问频率进行检测,进而对自身不常访问的内存页进行合理迁移。
102、检测所述各内存页中是否存在待迁移内存页,其中,所述待迁移内存页被所述本地CPU访问的频率小于被其他CPU访问的频率。
这里,若某内存页被本地CPU访问的频率小于被其他CPU(处理器中除了本地CPU外的CPU)访问的频率,则说明该内存页对于本地CPU来说可能是一个不常访问的内存页,可以考虑将该内存页迁移至对其访问频率高的CPU的本地内存区域。
需要说明的是,在本发明实施例中数据库系统划分数据缓冲区域时各CPU就会记录其对应的本地内存区域中各内存页的编号以及其本地内存区域中的各内存页的被访问频率,以便本地CPU能够根据各内存页的编号以及各CPU对内存页的访问频率对内存页进行合理迁移,减少异地访问数据导致的数据访问速率的下降。
103、若所述各内存页中存在所述待迁移内存页,则将对所述待迁移内存页的访问频率最大的CPU确定为目标CPU。
若本地CPU的各内存页中不存在待迁移内存页,则不改变所述CPU中的内存页。
104、将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
由于所述目标CPU对所述待迁移的访问频率大于本地CPU对所述待迁移内存页的访问频率,且所述目标CPU又多次访问所述待迁移内存页,因此若是将所述待迁移内存页迁移至所述目标CPU的本地内存区域,则会提高所述目标CPU访问所述待迁移内存页的速率,进而提高服务器的数据访问速率,进而提高整个设备的数据访问效率。
具体实现中,所述CPU根据预先存储的所述CPU的本地内存区域中的所述各内存页的编号与所述各内存页的本地存储地址间的对应关系,查找到与所述待迁移内存页的编号对应的存储地址,即所述待迁移内存页的本地存储地址。所述CPU再访问其本地内存区域中,所述待迁移内存页的本地存储地址对应的内存区域,就可以获取所述待迁移内存页,进而将所述待迁移内存页迁移至所述目标CPU对应的本地内存区域,所述目标CPU就可以通过QPI总线访问本地内存区域获得数据,避免访问异地内存,大大提高了数据访问数据。
参考上述结合图1所做的阐述,由于CPU1通过QPI总线中转访问数据速度较慢,因此,本发明实施例提供的方案通过使得各CPU尽量通过访问本地内存获得数据,就可以提高数据访问的速率。
进一步地,在本发明的优选实施例中,
本地CPU的检测自身本地内存区域中是否存在被所述本地CPU访问的频率为零的内存页。若存在被所述本地CPU访问的频率为零的内存页,本地CPU则将所述被所述本地CPU访问的频率为零的内存页确定为所述待迁移内存页。
进一步地,在本发明的优选实施例中,
所述本地CPU利用局部索引记录本地CPU的本地内存区域中各内存页在本地内存区域中的存储地址,与所述各内存页的编号之间的对应关系;利用全局索引记录本地CPU的本地内存区域中各内存页在除所述本地CPU的本地内存区域外的缓存区域中的存储地址,与所述各内存页的编号之间的对应关系。
需要说明的是,局部索引只能供本地CPU使用,全局索引是各CPU共享的。
也就是说,每个CPU之前会记录其对应的本地内存区域中各内存页的本地存储地址(即本地内存区域中各内存页在本地内存区域中的存储地址)、全局存储地址(即本地内存区域中各内存页在除所述本地CPU的本地内存区域外的缓存区域中的存储地址)以及各内存页的编号之间的对应关系。
进一步地,在本发明的优选实施例中:
所述本地CPU访问其本地内存区域中的第一内存页时,将所述本地CPU对所述第一内存页的访问频率值加1,将其他访问所述第一内存页的CPU对所述第一内存页的访问频率值均减1。
这样也是为了方便本地CPU对各内存页的访问情况进行准确的把控,以便对本地内存页进行合理迁移,提高整体设备的数据访问速率。
进一步地,在本发明的优选实施例中:
若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存不能容纳内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页删除之后,所述本地CPU再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
进一步地,在本发明的优选实施例中:
若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存区域能容纳至少一个内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页迁移至所述数据缓冲区的空闲内存区域中之后,所述本地CPU再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
进一步地,在本发明的优选实施例中:
所述本地CPU生成数据访问指令,所述数据访问指令携带所述本地CPU的待访问内存页的编号M。
所述本地CPU检测所述局部索引中是否记录有编号为所述M的内存页的存储地址。
若所述局部索引中记录有编号为所述M的内存页的存储地址,则根据记录的编号为所述M的内存页的存储地址获取所述待访问内存页;若所述局部索引中没有记录编号为所述M的内存页的存储地址,则检测所述全局索引中是否记录有编号为所述M的内存页的存储地址。
若所述全局索引中记录有编号为所述M的内存页的存储地址,则根据记录的编号为所述M的内存页的存储地址查找到所述待访问内存页。
进一步地,在本发明的优选实施例中:
若所述局部索引中记录有编号为所述M的内存页的存储地址,且所述本地CPU需要访问所述待访问内存页的次数大于预设门限值,则将所述待访问内存页迁移至所述本地CPU的本地内存区域中。
其中,NUMA设备中不同的应用程序对应不同的预设门限值。示例地,对于内存页1而言,应用程序A和应用程序B对应的预设门限值分别为5和4。当应用程序A通过本地CPU访问该待访问内存页时,一旦本地CPU判断应用程序A要访问该待访问内存页的次数大于5,则将该待访问内存页迁移至本地CPU对应的本地内存区域。当应用程序B通过本地CPU访问该待访问内存页时,一旦本地CPU判断应用程序B要访问该待访问内存页的次数大于4,则将该待访问内存页迁移至本地CPU对应的本地内存区域。综上,是否将该待访问内存页迁移至本地CPU对应的本地内存区域取决于当前调用CPU的应用程序的具体情况。
进一步地,在本发明的优选实施例中:
若所述全局索引中没有记录编号为所述M的内存页的存储地址,所述本地CPU则访问物理磁盘,查找到所述待访问内存页。
进一步地,在本发明的优选实施例中:
在所述本地CPU则访问物理磁盘,查找到所述待访问内存页之后,若所述本地CPU的本地内存区域已饱和,则判断所述数据缓冲区是否饱和;
若判断所述数据缓冲区未饱和,则将所述待访问内存页迁移至所述数据缓冲区中除所述本地CPU的本地内存区域外的缓存区域。
进一步地,在本发明的优选实施例中:
在所述本地CPU则访问物理磁盘,查找到所述待访问内存页具体之后,
若所述CPU的本地内存区域未饱和,且所述本地CPU访问所述待访问内存页的次数大于所述预设门限值,所述本地CPU则将所述待访问内存页迁移至所述本地CPU的本地内存区域。
同上所述,NUMA设备中不同的应用程序对应不同的预设门限值。
进一步地,在本发明的优选实施例中:
在所述本地CPU则访问物理磁盘,查找到所述待访问内存页之后,若所述本地CPU访问所述待访问内存页的次数大于所述预设门限值,且所述数据缓冲区已饱和,所述本地CPU则删除所述本地CPU的本地内存区域中的一个内存页,再将所述待访问内存页迁移至所述本地CPU的本地内存区域。
本发明实施例提供的缓存管理方法及缓存管理装置,针对设备中的每个CPU,记录所述CPU本地内存区域中各内页被各CPU访问的频率,并将所述CPU的各内存页中存在的待迁移内存页迁移至对所述待迁移内存页访问频率最大的CPU的本地内存区域中,进而使得各CPU访问的数据尽量集中在各CPU的本地内存区域中,减少了现有技术中由于各CPU访问异地内存而导致的数据访问速率下降,提高数据访问的速率,进而提高系统性能。
实施例2:
本发明实施例提供了一种缓存管理方法,应用于非统一内存访问架构NUMA设备,所述NUMA设备包含至少两个中央处理器CPU以及数据缓冲区,所述NUMA设备包含数据缓冲区,所述数据缓冲区包含至少一个本地内存区域,每个CPU对应一个本地内存区域。如图3所述,针对每个CPU,执行主体为本地CPU,所述方法包括以下步骤:
201、记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率。
需要说明的是,将本发明提供的内存管理方法应用于一个CPU时,就会将该CPU称为本地CPU。即当该CPU是执行主体时,将该CPU称为本地CPU。
参照上述结合图1的描述可以获知,CPU访问异地内存区域(即数据缓冲区中除所述CPU的本地内存区域外的内存区域)会导致数据访问速率下降,因此有必要通过记录各内存页被访问的频对内存页进行合理迁移,使得各CPU访问的内存页尽可能在本地内存区域,减少异地访问,进而提高数据访问速率。
具体实现中,数据库系统中划分数据缓冲区域时各CPU就会记录其对应的本地内存区域中各内存页的编号以及其本地内存区域中的各内存页的被访问频率,以便所述CPU能够根据内存页的编号以及各CPU对内存页的访问频率对内存页进行合理迁移,减少异地访问数据导致的数据访问速率的下降。
202、检测所述本地CPU的本地内存区域中是否存在被所述本地CPU访问的频率为零的内存页。
由于之前各CPU记录了各自对应的本地内存区域中各内存页被各CPU访问的频率,因此所述CPU可以逐一判断对应的本地内存区域中的各个内存页被所述CPU访问的频率,若存在未被所述CPU访问的内存页(即待迁移内存页),则将所述待迁移内存页迁移到合适的内存区域。
若存在,则进行步骤203;若不存在,所述CPU则不改变其本地内存区域中的内存页。
203、将所述被所述本地CPU访问的频率为零的内存页确定为所述待迁移内存页,将对所述待迁移内存页的访问频率最大的CPU确定为目标CPU。
由于所述CPU对所述待迁移的访问频率为零,且所述目标CPU又多次访问所述待迁移内存页,因此若是将所述待迁移内存页迁移至所述目标CPU的本地内存区域,则会提高所述目标CPU访问所述待迁移内存页的速率,进而提高服务器的数据访问速率。
204、将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
本地CPU根据预先存储的局部索引(即本地CPU的本地内存区域中的所述各内存页的编号,与本地内存区域中各内存页在本地内存区域中的存储地址),查找到与所述待迁移内存页的编号对应的存储地址,即所述待迁移内存页的本地存储地址。本地CPU再访问其本地内存区域中,所述待迁移内存页的本地存储地址对应的内存区域,就可以获取所述待迁移内存页,进而将所述待迁移内存页迁移至所述目标CPU对应的本地内存区域,所述目标CPU就可以通过QPI总线访问本地内存区域查找到数据,避免访问异地内存,大大提高了数据访问数据。
另外,每个CPU之前会利用局部索引记录本地内存区域中各内存页在本地内存区域中的存储地址,与所述各内存页的编号之间的对应关系。利用全局索引记录所述各内存页在除所述本地CPU的本地内存区域外的缓存区域中的存储地址,与所述各内存页的编号之间的对应关系。其中,各CPU可以根据内存页的本地存储地址访问本地内存区域查找到数据。当CPU要访问的内存页不在本地内存区域,CPU可以根据所述全局存储地址判断CPU要访问的内存页在不在数据缓冲区中,除该CPU的本地内存区域外的缓存区域中,或者根据所述全局存储地址判断CPU要访问的内存页在不在所述数据缓冲区中。
本发明实施例还提供了以下缓存管理方法,执行主体为服务器中的任一个CPU,包括以下几种:
一、CPU访问其本地内存区域中的目标内存页时,将该CPU对该目标内存页的访问频率加1,将其他访问该目标内存页的CPU对所述目标内存页的访问频率均减1。
二、当CPU需要从所述物理磁盘中导出新的内存页且该CPU对应的本地内存区域已饱和,则判断所述数据缓冲区是否饱和。
若该CPU判断所述数据缓冲区未饱和,则将所述新的内存页迁移至所述数据缓冲区中除该CPU对应的本地内存区域外的缓存区域。
三、当CPU需要从所述物理磁盘中导出新的内存页且访问所述新的内存页的次数大于预设门限值时,若该CPU的本地内存区域未饱和,该CPU将所述新的内存页迁移至自身的本地内存区域。
四、若CPU需要从所述物理磁盘中导出新的内存页且所述数据缓冲区已饱和,该CPU删除自身的本地内存区域中的一个内存页,将所述新的内存页迁移至自身的本地内存区域,访问本地内存区域获得数据。
五、当CPU需要将除该CPU的本地内存区域外的缓存区域中的内存页迁移至所述CPU对应的本地内存区域中(即进行异地调页),若除该CPU的本地内存区域外的缓存区域不能容纳内存页(也可认为是除该CPU的本地内存区域外的缓存区域的空闲内存小于预设值),该CPU将其本地内存区域中的一个内存页删除,再将需要的内存页迁移至该CPU的本地内存区域。
六、当CPU需要将除该CPU的本地内存区域外的缓存区域中的内存页迁移至该CPU对应的本地内存区域中,若除该CPU对应的本地内存区域外的缓存区域能容纳至少一个内存页(也可以认为除该CPU对应的本地内存区域外的缓存区域的空闲内存大于门限值),该CPU将其本地内存区域中的一个内存页迁移至除该CPU的本地内存区域外的缓存区域,再将需要的内存页迁移至该CPU对应的本地内存区域。
结合本发明实施例提供的缓存管理方法,本发明实施例还提供了一种数据访问方法,执行主体为服务器中的任一CPU,包括:
所述CPU生成数据访问指令,所述数据访问指令携带所述本地CPU的待访问内存页的编号M。
所述CPU检测所述局部索引中是否记录有编号为所述M的内存页的存储地址。
若所述局部索引中记录有编号为所述M的内存页的存储地址,则根据记录的编号为所述M的内存页的存储地址获取所述待访问内存页;若所述局部索引中没有记录编号为所述M的内存页的存储地址,则检测所述全局索引中是否记录有编号为所述M的内存页的存储地址。
若所述全局索引中记录有编号为所述M的内存页的存储地址,则根据记录的编号为所述M的内存页的存储地址查找到所述待访问内存页。
另外,若所述数据缓冲区中除所述CPU的本地内存区域外的其他内存区域中存在编号为所述M的内存页,且所述CPU需要访问所述待访问内存页的次数大于预设门限值,则将所述待访问内存页迁移至所述CPU的本地内存区域中。这样,就可使得所述CPU通过访问本地内存区域查找到需要访问的内存页,进而避免了过多的异地内存访问,提高了数据访问速率。
本发明实施例提供的缓存管理方法,针对设备中的每个CPU,记录所述CPU本地内存区域中各内页被各CPU访问的频率,并将所述CPU的各内存页中存在的待迁移内存页迁移至对所述待迁移内存页访问频率最大的CPU的本地内存区域中,进而使得各CPU访问的数据尽量集中在各CPU的本地内存区域中,减少了现有技术中由于各CPU访问异地内存而导致的数据访问速率下降,提高数据访问的速率,进而提高系统性能。
实施例3:
本发明实施例提供了一种缓存管理方法,如图4所示,针对服务器中的每个CPU,当某CPU作为执行主体时,就将该CPU称为本地CPU,所述方法包括以下步骤:
301、所述本地CPU利用局部索引以及全局索引来记录本地内存区域中各内存页的存储地址与各内存页的编号之间的对应关系。
其中,所述本地CPU利用局部索引记录本地内存区域中各内存页在本地内存区域中的存储地址,与所述各内存页的编号之间的对应关系;利用全局索引记录所述各内存页在除所述本地CPU的本地内存区域外的缓存区域中的存储地址,与所述各内存页的编号之间的对应关系。
在实现中,本发明实施例将传统数据库的数据缓冲区按照其NUMA划分为多个内存区域,且每个CPU对应一个内存区域,各CPU仅使用其对应的内存区域。对于数据缓冲区中的各个内存页,使用两个索引来记录其位置。一个是局部索引,为内存页的本地存储地址(该内存页在本地内存区域的存储位置)与内存页的编号之间的对应关系,仅供本地内存区域对应的CPU使用。一个是全局索引,记录内存页的全局存储地址(即内存页在数据缓冲区的存储地址)与内存页的编号之间的对应关系,由所有CPU共同使用。
需要说明的是,索引也是一种数据结构,它本身需要耗费内存来存储,一个缓冲区大概占用12个字节,所以管理的缓冲区越多索引占用的存储就越大。
数据缓冲区的局部索引一般可以放入L3高速缓存。假定一个NUMA节点所对应的内存空间为8GB,一个内存页大小为32KB,一个索引项的大小为32Byte,那么索引的大小为:8GB/32KB*32Byte=8MB。一般而言,服务器配备CPU的L3高速缓存大小都超过20MB,再加上数据访问通常有较高的局部性,因此大部分对局部索引的访问都可以在L3高速缓存中进行。
全局索引一般分散在不同的NUMA节点上,当数据量较小时,它也可以被放置在L3高速缓存中。当全局索引占内存较大时(索引是一种数据结构,服务器的数据缓冲区被划分成极其多个本地内存区域时,就会导致索引较大,),对它的访问往往需要跨节点,代价相对较高。但是,我们的缓存机制将尽可能确保数据放置在本地缓冲池中,从而最小化对全局索引的访问频率。
302、记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率。
示例地,处理器为每个内存页配备一个短数组,用于记录各CPU最近访问该内存页的频率,并通过该数组的内容决定是否对内存页进行迁移。具体地,对于CPU1,若用于记录CPU1访问内存页A频率的数组为零,即内存页A近期内没有被CPU1访问,因此考虑将内存页A迁移,以便减少系统异地访问内存。
303、检测所述本地CPU的本地内存区域中是否存在被所述本地CPU访问的频率为零的内存页。
若存在,则进行304。所述CPU对应的本地内存区域中各内存页中存在被所述CPU访问的频率为零的内存页,则需要检测近期访问该内存页的CPU对该内存页的访问频率,以便合理迁移该内存页,减少异地内存访问。若不存在,则不改变所述CPU本地内存区域中的内存页。
304、将所述被所述本地CPU访问的频率为零的内存页确定为所述待迁移内存页。
示例地,所述CPU检测到某内存页的数组中本地CPU的访问频度为零,而正在发出访问请求的异地CPU的访问频度最高,则将该异地CPU指定为目标CPU,并将页面迁移至所述目标CPU对应的本地内存区域中,以便目标CPU通过QPI直接访问本地内存获取数据,提高数据访问的效率。
需要说明的是,每个所述CPU对应的本地内存区域中的各内存页被所述CPU访问的频率小于等于预设门限值K;在所述CPU访目标内存页时,处理器需要将所述CPU对所述目标内存页的访问频率加1,将其他访问所述目标内存页的CPU对所述目标内存页的访问频率均减1。即处理器在某CPU每次访问内存页时都需要将该CPU对内存页的访问频率增加1,而将其它CPU对该内存页的访问频率减1。另外,需要设置访问频率的预设门限值K,以防止对某内存页访问频率过大(例如,K=3)。
示例地,若服务器的处理器包含4个CPU,如表1所示,内存页p的访问统计数据为,CPU1:2;CPU2:3;CPU3:1;CPU4:1(即指定时间段内CPU1、CPU2、CPU3、CPU4对内存页p的访问次数依次为2、3、1、1),其中CPU3是本地CPU。
表1
若属于CPU1的进程访问页面p,如表2所示,针对p的访问统计数据变为:CPU1:3;CPU2:2;local CPU:0;CPU4:0。
表2
305、根据局部索引以及所述待迁移内存页的编号,获取所述待迁移内存页,将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
示例地,如步骤304中在属于CPU1的进程访问页面p之后。对于本地CPU3而言对页面p的访问频度为0,且CPU1对内存页p的访问频度最高,因此处理器可以将内存页p迁移至CPU1对应的本地内存区域,以便CPU1可以访问其本地内存区域获得数据,进而提高数据访问速率。
306、生成数据访问指令,所述数据访问指令携带本地CPU需要的待访问内存页的编号M。
通常,数据库中每个内存页都唯一对应一个编号,因此根据所述数据访问指令携带的所述CPU需要的待读数据对应的待访问内存页的编号M,就可以对应得到所述CPU需要访问的内存页。
307、所述本地CPU检测所述局部索引中是否记录有编号为所述M的内存页的存储地址。
在实现中,所述CPU首先查询局部索引,判断其本地内存区域中是否存在所述CPU需要访问的内存页。
若所述局部索引中记录有编号为所述M的内存页的存储地址,则进行308;若所述局部索引中没有记录有编号为所述M的内存页的存储地址,则进行步骤309。
308、根据记录的编号为所述M的内存页的存储地址获取所述待访问内存页。
若所述CPU需要访问的内存页在本地内存区域,所述CPU就可以在本地内存区域锁定该内存页,然后获得数据。
309、检测所述全局索引中是否记录有编号为所述M的内存页的存储地址。
即就是确定编号为所述M的内存页是否在所述数据缓冲区中除本地CPU的本地内存区域外的其他内存区域中。
若本地CPU需要访问的内存页不在本地内存区域,则需要进一步判断本地CPU访问的内存页是否在数据缓冲区。在实现中,本地CPU通过查询全局索引,可以判断所述CPU需要访问的内存页是否在其他CPU的本地内存区域中。如果在全局索引中没有记录该内存页,则需要访问物理磁盘查找到该内存页。
若所述全局索引中记录有编号为所述M的内存页的存储地址,则进行步骤310;若所述全局索引中没有记录编号为所述M的内存页的存储地址,则进行步骤312。
310、根据记录的编号为所述M的内存页的存储地址查找到所述待访问内存页。
即本地CPU根据预先存储的各内存页的编号与各内存页的全局存储地址(内存页在除本地CPU的内存区域外的缓存区域中的存储地址)的对应关系,获得所述待访问内存页的全局存储地址,并访问内存,查找到所述待读数据。
311、所述本地CPU确定需要访问所述待访问内存页的次数大于预设门限值,将所述待访问内存页迁移至所述本地CPU的本地内存区域中。
其中,所述预设门限值是根据调用所述待访问内存页的应用程序预先设定的。
这样,在之后当所述CPU需要访问所述待访问内存页时,就可以直接访问本地内存区域,而不需要进行异地内存访问,提高数据访问速率。
具体实现中,可以通过两种情况来实现对待迁移内存页的迁移,一种是,若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存不能容纳内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页删除之后,所述本地CPU再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
另一种是,若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存区域能容纳至少一个内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页迁移至所述数据缓冲区的空闲内存区域中之后,所述本地CPU再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
当然,此处本地CPU迁移待迁移内存页的方法适用于服务器中的每一个CPU,基于此,提出一种内部换页机制。所谓内部换页,即需要从数据缓冲区中其他内存区域导入新的内存页到本地内存区域。所述内部换页机制包括:
一、针对任一CPU,当需要将除所述CPU对应的本地内存区域外的缓存区域中的内存页迁移至所述CPU对应的本地内存区域时,若除所述CPU对应的本地内存区域外的缓存区域的空闲内存区域不能容纳内存页(也可以认为除所述CPU对应的本地内存区域外的缓存区域的空闲内存小于预设值),则将所述CPU对应的本地内存区域中的一个内存页删除,再将需要的内存页迁移至所述CPU对应的本地内存区域。
二、当需要将除所述CPU对应的本地内存区域外的缓存区域中的内存页迁移至所述CPU对应的本地内存区域中时,若除所述CPU对应的本地内存区域外的缓存区域的空闲内存区域能容纳至少一个内存页(也可以认为除所述CPU对应的本地内存区域外的缓存区域的空闲内存大于门限值),则将所述CPU对应的本地内存区域中的一个内存页迁移至除所述CPU对应的本地内存区域外的缓存区域,再将需要的内存页迁移至所述CPU对应的本地内存区域。
其中,上述预设值、门限值均为经验值。
具体实现中,可以采取三种以下方式:
1、将本地内存区域的一个LRU页删除,再将新页读入。
2、将本地内存区域的一个LRU页迁移至异地,再将新页读入。
如果异地内存区域(数据缓冲去中除本地内存区域外的内存区域)比较满(如超过90%),则选择1。如果异地内存区域比较空闲,则选择2。
312、访问物理磁盘,查找到所述待访问内存页。
具体实现中,本地CPU查找到所述待访问内存页之后,可以通过以下几种方式存储所述待访问内存页。
一种是,若所述CPU的本地内存区域未饱和,且所述本地CPU访问所述待访问内存页的次数大于所述预设门限值,所述本地CPU则将所述待访问内存页迁移至所述本地CPU的本地内存区域。
一种是,若所述本地CPU的本地内存区域已饱和,则判断所述数据缓冲区是否饱和。
若判断所述数据缓冲区未饱和,则将所述待访问内存页迁移至所述数据缓冲区中除所述本地CPU的本地内存区域外的缓存区域。
另一种是,若所述本地CPU访问所述待访问内存页的次数大于所述预设门限值,且所述数据缓冲区已饱和,所述本地CPU则删除所述本地CPU的本地内存区域中的一个内存页,再将所述待访问内存页迁移至所述本地CPU的本地内存区域。
当然,此处本地CPU访问物理磁盘查找到所述待访问内存页之后,存储待访问的方法适用于服务器中的每一个CPU,基于此,提出一种外部换页机制。所谓外部换页,即需要从物理磁盘导入新的内存页。所述外部换页机制包括:
一、当所述CPU需要从所述物理磁盘中导出新的内存页且所述CPU对应的本地内存区域已饱和,则判断所述数据缓冲区是否饱和。
若所述数据缓冲区未饱和,则将所述新的内存页迁移至所述数据缓冲区中除所述CPU对应的本地内存区域外的缓存区域。
二、当所述CPU需要从所述物理磁盘中导出新的内存页且访问所述新的内存页多于一次时,若所述CPU对应的本地内存区域未饱和,则将所述新的内存页迁移至所述CPU对应的本地内存区域。
三、若所述CPU需要从所述物理磁盘中导出新的内存页且所述数据缓冲区已饱和,则删除所述CPU对应的本地内存区域中的一个内存页,将所述新的内存页迁移至所述CPU对应的本地内存区域,访问所述CPU对应的本地内存区域查找到数据。
具体实现中,可以采取三种以下方式:
1、将新内存页放置到异地内存区域,并进行异地访问。
2、将本地内存区域的一个LRU页删除,再将新页读入。
3、将本地内存区域的一个LRU页迁移到异地,再将新页读入。
如果数据缓冲区已满,则选择2。如果数据缓冲区空闲,并且处理器允许内存页的异地迁移,则选择1。如果新内存页被连续访问,处理器会自动将新页迁移至本地。如果数据缓冲区空闲,并且处理器不允许内存页进行迁移,则选择3。
本发明实施例提供的缓存管理方法,针对设备中的每个CPU,记录所述CPU本地内存区域中各内页被各CPU访问的频率,并将所述CPU的各内存页中存在的待迁移内存页迁移至对所述待迁移内存页访问频率最大的CPU的本地内存区域中,进而使得各CPU访问的数据尽量集中在各CPU的本地内存区域中,减少了现有技术中由于各CPU访问异地内存而导致的数据访问速率下降,提高数据访问的速率,进而提高系统性能。
实施例4:
本发明实施提供了一种处理器缓存管理装置,应用于非统一内存访问架构NUMA设备,所述NUMA设备包含至少两个中央处理器CPU以及数据缓冲区,所述NUMA设备包含数据缓冲区,所述数据缓冲区包含至少一个本地内存区域,每个CPU对应一个本地内存区域。其中,每个CPU通过其对应的一个缓存管理装置实现缓存管理以及内存页迁移。
如图5所示,所述缓存管理装置包括:记录单元401、检测单元402、确定单元403与迁移单元404。
记录单元401,用于记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率。
具体地,记录单元401为每个内存页配备一个短数组,用于记录各CPU最近访问该内存页的频率,并使得迁移单元404通过该数组的内容决定是否对内存页进行迁移。具体地,对于CPU1,若用于记录CPU1访问内存页A频率的数组为零,即内存页A近期内没有被CPU1访问,因此考虑将内存页A迁移,以便减少系统异地访问内存。
检测单元402,用于检测所述各内存页中是否存在待迁移内存页,其中,所述待迁移内存页被所述本地CPU访问的频率小于被其他CPU访问的频率。
确定单元403,用于在所述检测单元检测到所述各内存页中存在所述待迁移内存页之后,将对所述待迁移内存页的访问频率最大的CPU确定为目标CPU。
迁移单元404,用于将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
优选地,在本发明的优选实施例中,
所述检测单元402具体用于,检测所述本地CPU的本地内存区域中是否存在被所述本地CPU访问的频率为零的内存页。
所述确定单元403具体用于,在所述检测单元402检测到所述本地CPU的本地内存区域中存在被所述本地CPU访问的频率为零的内存页之后,将所述被所述本地CPU访问的频率为零的内存页确定为所述待迁移内存页。
参照说明书实施例开头结合图1的描述,CPU访问异地内存区域(即数据缓冲区中除本地CPU的本地内存区域外的内存区域)会导致数据访问速率下降,因此有必要通过记录各内存页被访问的频对内存页进行合理迁移,使得各CPU访问的内存页尽可能在本地内存区域,减少异地访问,进而提高数据访问速率。
具体实现中,所述记录单元401还用于,利用局部索引记录本地CPU的本地内存区域中各内存页在本地内存区域中的存储地址,与所述各内存页的编号之间的对应关系;利用全局索引记录本地CPU的本地内存区域中各内存页在除所述本地CPU的本地内存区域外的缓存区域中的存储地址,与所述各内存页的编号之间的对应关系。
另外,数据库系统中划分数据缓冲区域时各CPU的记录单元401就会记录其对应的本地内存区域中各内存页的编号以及其本地内存区域中的各内存页的被访问频率,以便所述CPU能够根据内存页的编号以及各CPU对内存页的访问频率对内存页进行合理迁移,减少异地访问数据导致的数据访问速率的下降。
在实现中,本发明实施例将传统数据库的数据缓冲区按照其NUMA划分为多个内存区域,且每个CPU对应一个内存区域,各CPU仅使用其对应的内存区域。对于数据缓冲区中的各个内存页,使用两个索引来记录其位置。一个是局部索引,为该内存页在本地内存区域的存储位置,即所述本地存储地址,仅供本地内存区域对应的CPU使用。一个是全局索引,记录该内存页在数据缓冲区的存储地址,即所述全局存储地址,由所述CPU共同使用。其中,索引也是一种数据结构,它本身需要耗费内存来存储,一个缓冲区大概占用12个字节,所以管理的缓冲区越多索引占用的存储就越大。
数据缓冲区的局部索引一般可以放入L3高速缓存。假定一个NUMA节点所对应的内存空间为8GB,一个内存页大小为32KB,一个索引项的大小为32Byte,那么索引的大小为:8GB/32KB*32Byte=8MB。一般而言,服务器配备CPU的L3高速缓存大小都超过20MB,再加上数据访问通常有较高的局部性,因此大部分对局部索引的访问都可以在L3高速缓存中进行。
全局索引一般分散在不同的NUMA节点上,当数据量较小时,它也可以被放置在L3高速缓存中。当全局索引占内存较大时(索引是一种数据结构,服务器的数据缓冲区被划分成极其多个本地内存区域时,就会导致索引较大,),对它的访问往往需要跨节点,代价相对较高。但是,我们的缓存机制将尽可能确保数据放置在本地缓冲池中,从而最小化对全局索引的访问频率。
实现中,当检测单元402检测到某内存页的数组中本地CPU的访问频度为零,而正在发出访问请求的异地CPU的访问频度最高,确定单元403则将该异地CPU指定为目标CPU,迁移单元405将页面迁移至所述目标CPU对应的本地内存区域中,以便目标CPU通过QPI直接访问本地内存获取数据,提高数据访问的效率。
所述记录单元401还用于,在所述CPU访问其本地内存区域中的目标内存页时,将所述CPU对所述目标内存页的访问频率加1,将其他访问所述目标内存页的CPU对所述目标内存页的访问频率均减1。示例地,若服务器的处理器包含4个CPU,内存页p的访问统计数据为,CPU1:2;CPU2:3;CPU3:1;CPU4:1(即指定时间段内CPU1、CPU2、CPU3、CPU4对内存页p的访问次数依次为2、3、1、1),其中CPU3是本地CPU。若属于CPU1的进程访问页面p,记录单元401则将针对p的访问统计数据变为:CPU1:3;CPU2:2;local CPU:0;CPU4:0。
所述迁移单元404具体用于,若确定所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存不能容纳内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页删除之后,再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
所述迁移单元404具体用于,若确定所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存区域能容纳至少一个内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页迁移至所述数据缓冲区的空闲内存区域中之后,再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
所述缓存管理装置还包括生成单元和获取单元,
所述生成单元,用于生成数据访问指令,所述数据访问指令携带所述本地CPU的待访问内存页的编号M。
所述检测402单元还用于,检测所述局部索引中是否记录有编号为所述M的内存页的存储地址。
所述获取单元用于,在所述检测单元402确定所述局部索引中记录有编号为所述M的内存页的存储地址之后,根据记录的编号为所述M的内存页的存储地址获取所述待访问内存页。
所述检测单元402还用于,在确定所述局部索引中没有记录编号为所述M的内存页的存储地址,检测所述全局索引中是否记录有编号为所述M的内存页的存储地址。
所述获取单元还用于,在所述检测单元402确定所述全局索引中记录有编号为所述M的内存页的存储地址之后,根据记录的编号为所述M的内存页的存储地址查找到所述待访问内存页。
所述迁移单元404还用于,在所述在确定所述局部索引中记录有编号为所述M的内存页的存储地址,且所述本地CPU需要访问所述待访问内存页的次数大于预设门限值之后,将所述待访问内存页迁移至所述本地CPU的本地内存区域中,其中,NUMA设备中不同的应用程序对应不同的预设门限值。
示例地,对于内存页1而言,应用程序A和应用程序B对应的预设门限值分别为5和4。当应用程序A通过本地CPU访问该待访问内存页时,一旦本地CPU判断应用程序A要访问该待访问内存页的次数大于5,则将该待访问内存页迁移至本地CPU对应的本地内存区域。当应用程序B通过本地CPU访问该待访问内存页时,一旦本地CPU判断应用程序B要访问该待访问内存页的次数大于4,则将该待访问内存页迁移至本地CPU对应的本地内存区域。综上,是否将该待访问内存页迁移至本地CPU对应的本地内存区域取决于当前调用CPU的应用程序的具体情况。
所述获取单元还用于,在所述检测单元确定所述全局索引中没有记录编号为所述M的内存页的存储地址之后,访问物理磁盘,查找到所述待访问内存页。
所述检测单元402还用于,在确定所述本地CPU的本地内存区域已饱和之后,判断所述数据缓冲区是否饱和;
所述迁移单元404具体用于,在所述检测单元402判断所述数据缓冲区未饱和之后,将所述待访问内存页迁移至所述数据缓冲区中除所述本地CPU的本地内存区域外的缓存区域。
所述迁移单元404还用于,若确定所述CPU的本地内存区域未饱和,且所述本地CPU访问所述待访问内存页的次数大于所述预设门限值,则将所述待访问内存页迁移至所述本地CPU的本地内存区域。
所述删除单元用于,在确定所述本地CPU访问所述待访问内存页的次数大于所述预设门限值,且所述数据缓冲区已饱和之后,删除所述本地CPU的本地内存区域中的一个内存页。
所述迁移单元404用于,将所述待访问内存页迁移至所述本地CPU的本地内存区域。
本发明实施例还提供了适用于所述缓存管理装置的外部换页机制和内部换页机制。
所谓外部换页,即需要从物理磁盘导入新的内存页。所述外部换页机制包括:
1)、当所述CPU需要从所述物理磁盘中导出新的内存页且所述CPU对应的本地内存区域已饱和,检测单元402判断所述数据缓冲区是否饱和。
若所述数据缓冲区未饱和,迁移单元404则将所述新的内存页迁移至所述数据缓冲区中除所述CPU对应的本地内存区域外的缓存区域。
2)当所述CPU需要从所述物理磁盘中导出新的内存页且访问所述新的内存页的次数大于预设门限值时,若检测单元402检测到所述CPU对应的本地内存区域未饱和,所述迁移单元404则将所述新的内存页迁移至所述CPU对应的本地内存区域。
3)、若所述CPU需要从所述物理磁盘中导出新的内存页且所述数据缓冲区已饱和,删除单元则删除所述CPU对应的本地内存区域中的一个内存页,随后迁移单元404将所述新的内存页迁移至所述CPU对应的本地内存区域,访问所述CPU对应的本地内存区域查找到数据。
具体实现中,如果检测单元402检测到数据缓冲区已满,删除单元将本地内存区域的一个LRU页删除,再由迁移单元404将新页读入。如果检测单元402检测到数据缓冲区空闲,并且处理器允许内存页的异地迁移,迁移单元404将新内存页放置到异地内存区域,并由获取单元进行异地访问查找到内存页。如果新内存页被连续访问,迁移单元404会自动将新页迁移至本地。如果检测单元402检测到数据缓冲区空闲,并且处理器不允许内存页进行迁移,迁移单元则将本地内存区域的一个LRU页迁移到异地,再将新页迁移至本地内存区域。
所谓内部换页,即需要从数据缓冲区中其他内存区域导入新的内存页到本地内存区域。所述内部换页机制包括:
1)、当需要将除所述CPU对应的本地内存区域外的缓存区域中的内存页迁移至所述CPU对应的本地内存区域时,若检测单元402检测到除所述CPU对应的本地内存区域外的缓存区域的空闲区域不能容纳内存页,删除单元则将所述CPU对应的本地内存区域中的一个内存页删除,再由迁移单元404将需要的内存页迁移至所述CPU对应的本地内存区域。
2)、当需要将除所述CPU对应的本地内存区域外的缓存区域中的内存页迁移至所述CPU对应的本地内存区域中时,若检测单元检测到除所述CPU对应的本地内存区域外的缓存区域的空闲内存区域至少能容纳至少一个内存页,迁移单元404则将所述CPU对应的本地内存区域中的一个内存页迁移至除所述CPU对应的本地内存区域外的缓存区域,再将需要的内存页迁移至所述CPU对应的本地内存区域。
具体实现中,如果检测单元402检测到异地内存区域(数据缓冲去中除本地内存区域外的内存区域)比较满(如超过90%),删除单元则将本地内存区域的一个LRU页删除,再由迁移单元404将新页迁移至本地内存区域。如果检测单元402检测到异地内存区域比较空闲,迁移单元404则将本地内存区域的一个LRU页迁移至异地,再将新页迁移至本地内存区域。
本发明实施例提供的缓存管理方法,针对设备中的每个CPU,记录所述CPU本地内存区域中各内页被各CPU访问的频率,并将所述CPU的各内存页中存在的待迁移内存页迁移至对所述待迁移内存页访问频率最大的CPU的本地内存区域中,进而使得各CPU访问的数据尽量集中在各CPU的本地内存区域中,减少了现有技术中由于各CPU访问异地内存而导致的数据访问速率下降,提高数据访问的速率,进而提高系统性能。
实施例5:
本发明实施提供了一种缓存管理装置,应用于非统一内存访问架构NUMA设备,所述NUMA设备包含至少两个中央处理器CPU以及数据缓冲区,所述NUMA设备包含数据缓冲区,所述数据缓冲区包含至少一个本地内存区域,每个CPU对应一个本地内存区域。其中,每个CPU通过其对应的一个缓存管理装置实现缓存管理以及内存页迁移。
如图6所示,所述缓存管理装置包括:处理器501和存储器502。其中,存储器502中存储一组代码,处理器调用存储器中的代码用以执行以下操作:
处理器501,用于记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率。
具体地,处理器501为每个内存页配备一个短数组,用于记录各CPU最近访问该内存页的频率,并使得处理器501通过该数组的内容决定是否对内存页进行迁移。具体地,对于CPU1,若用于记录CPU1访问内存页A频率的数组为零,即内存页A近期内没有被CPU1访问,因此考虑将内存页A迁移,以便减少系统异地访问内存。
处理器501,用于检测所述各内存页中是否存在待迁移内存页,其中,所述待迁移内存页被所述本地CPU访问的频率小于被其他CPU访问的频率。
处理器501,用于在检测到所述各内存页中存在所述待迁移内存页之后,将对所述待迁移内存页的访问频率最大的CPU确定为目标CPU。
处理器501,用于将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
优选地,在本发明的优选实施例中,
所述处理器501具体用于,检测所述本地CPU的本地内存区域中是否存在被所述本地CPU访问的频率为零的内存页。
所述处理器501具体用于,在检测到所述本地CPU的本地内存区域中存在被所述本地CPU访问的频率为零的内存页之后,将所述被所述本地CPU访问的频率为零的内存页确定为所述待迁移内存页。
参照说明书实施例开头结合图1的描述,CPU访问异地内存区域(即数据缓冲区中除本地CPU的本地内存区域外的内存区域)会导致数据访问速率下降,因此有必要通过记录各内存页被访问的频对内存页进行合理迁移,使得各CPU访问的内存页尽可能在本地内存区域,减少异地访问,进而提高数据访问速率。
具体实现中,所述处理器501还用于,利用局部索引记录本地内存区域中各内存页在本地内存区域中的存储地址,与所述各内存页的编号之间的对应关系;利用全局索引记录所述各内存页在除所述本地CPU的本地内存区域外的缓存区域中的存储地址,与所述各内存页的编号之间的对应关系。
另外,数据库系统中划分数据缓冲区域时各CPU的处理器501就会记录其对应的本地内存区域中各内存页的编号以及其本地内存区域中的各内存页的被访问频率,以便所述CPU能够根据内存页的编号以及各CPU对内存页的访问频率对内存页进行合理迁移,减少异地访问数据导致的数据访问速率的下降。
在实现中,本发明实施例将传统数据库的数据缓冲区按照其NUMA划分为多个内存区域,且每个CPU对应一个内存区域,各CPU仅使用其对应的内存区域。对于数据缓冲区中的各个内存页,使用两个索引来记录其位置。一个是局部索引,为该内存页在本地内存区域的存储位置,即所述本地存储地址,仅供本地内存区域对应的CPU使用。一个是全局索引,记录该内存页在数据缓冲区的存储地址,即所述全局存储地址,由所述CPU共同使用。其中,索引也是一种数据结构,它本身需要耗费内存来存储,一个缓冲区大概占用12个字节,所以管理的缓冲区越多索引占用的存储就越大。
数据缓冲区的局部索引一般可以放入L3高速缓存。假定一个NUMA节点所对应的内存空间为8GB,一个内存页大小为32KB,一个索引项的大小为32Byte,那么索引的大小为:8GB/32KB*32Byte=8MB。一般而言,服务器配备CPU的L3高速缓存大小都超过20MB,再加上数据访问通常有较高的局部性,因此大部分对局部索引的访问都可以在L3高速缓存中进行。
全局索引一般分散在不同的NUMA节点上,当数据量较小时,它也可以被放置在L3高速缓存中。当全局索引占内存较大时(索引是一种数据结构,服务器的数据缓冲区被划分成极其多个本地内存区域时,就会导致索引较大,),对它的访问往往需要跨节点,代价相对较高。但是,我们的缓存机制将尽可能确保数据放置在本地缓冲池中,从而最小化对全局索引的访问频率。
实现中,当处理器501检测到某内存页的数组中本地CPU的访问频度为零,而正在发出访问请求的异地CPU的访问频度最高,则将该异地CPU指定为目标CPU,再将页面迁移至所述目标CPU对应的本地内存区域中,以便目标CPU通过QPI直接访问本地内存获取数据,提高数据访问的效率。
所述处理器501还用于,在所述CPU访问其本地内存区域中的目标内存页时,将所述CPU对所述目标内存页的访问频率加1,将其他访问所述目标内存页的CPU对所述目标内存页的访问频率均减1。示例地,若服务器的处理器包含4个CPU,内存页p的访问统计数据为,CPU1:2;CPU2:3;CPU3:1;CPU4:1(即指定时间段内CPU1、CPU2、CPU3、CPU4对内存页p的访问次数依次为2、3、1、1),其中CPU3是本地CPU。若属于CPU1的进程访问页面p,处理器501则将针对p的访问统计数据变为:CPU1:3;CPU2:2;localCPU:0;CPU4:0。
所述处理器501具体用于,若确定所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存不能容纳内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页删除之后,再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
所述处理器501具体用于,若确定所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存区域能容纳至少一个内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页迁移至所述数据缓冲区的空闲内存区域中之后,再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
处理器501,用于生成数据访问指令,所述数据访问指令携带所述本地CPU的待访问内存页的编号M。
所述处理器501还用于,检测所述局部索引中是否记录有编号为所述M的内存页的存储地址。
所述处理器501用于,在确定所述局部索引中记录有编号为所述M的内存页的存储地址之后,根据记录的编号为所述M的内存页的存储地址获取所述待访问内存页。
所述处理器501还用于,在确定所述局部索引中没有记录编号为所述M的内存页的存储地址,检测所述全局索引中是否记录有编号为所述M的内存页的存储地址。
所述处理器501还用于,在确定所述全局索引中记录有编号为所述M的内存页的存储地址之后,根据记录的编号为所述M的内存页的存储地址查找到所述待访问内存页。
所述处理器501还用于,在确定所述局部索引中记录有编号为所述M的内存页的存储地址,且所述本地CPU需要访问所述待访问内存页的次数大于预设门限值之后,将所述待访问内存页迁移至所述本地CPU的本地内存区域中,其中,所述预设门限值是根据调用所述待访问内存页的应用程序预先设定的。
所述处理器501还用于,在确定所述全局索引中没有记录编号为所述M的内存页的存储地址之后,访问物理磁盘,查找到所述待访问内存页。
所述处理器501还用于,在确定所述本地CPU的本地内存区域已饱和之后,判断所述数据缓冲区是否饱和;
所述处理器501具体用于,在判断所述数据缓冲区未饱和之后,将所述待访问内存页迁移至所述数据缓冲区中除所述本地CPU的本地内存区域外的缓存区域。
所述处理器501还用于,若确定所述CPU的本地内存区域未饱和,且所述本地CPU访问所述待访问内存页的次数大于所述预设门限值,则将所述待访问内存页迁移至所述本地CPU的本地内存区域。
所述处理器501用于,在确定所述本地CPU访问所述待访问内存页的次数大于所述预设门限值,且所述数据缓冲区已饱和之后,删除所述本地CPU的本地内存区域中的一个内存页。
所述处理器501用于,将所述待访问内存页迁移至所述本地CPU的本地内存区域。
本发明实施例还提供了适用于所述缓存管理装置的外部换页机制和内部换页机制。
所谓外部换页,即需要从物理磁盘导入新的内存页。所述外部换页机制包括:
1)、当所述CPU需要从所述物理磁盘中导出新的内存页且所述CPU对应的本地内存区域已饱和,处理器501判断所述数据缓冲区是否饱和。
若所述数据缓冲区未饱和,处理器501则将所述新的内存页迁移至所述数据缓冲区中除所述CPU对应的本地内存区域外的缓存区域。
2)当所述CPU需要从所述物理磁盘中导出新的内存页且访问所述新的内存页的次数大于预设门限值时,若处理器501检测到所述CPU对应的本地内存区域未饱和,则将所述新的内存页迁移至所述CPU对应的本地内存区域。
3)、若所述CPU需要从所述物理磁盘中导出新的内存页且所述数据缓冲区已饱和,删除单元则删除所述CPU对应的本地内存区域中的一个内存页,随后处理器501将所述新的内存页迁移至所述CPU对应的本地内存区域,访问所述CPU对应的本地内存区域查找到数据。
具体实现中,如果处理器501检测到数据缓冲区已满,删除单元将本地内存区域的一个LRU页删除,再由处理器501将新页读入。如果处理器501检测到数据缓冲区空闲,并且处理器允许内存页的异地迁移,处理器501将新内存页放置到异地内存区域,并由获取单元进行异地访问查找到内存页。如果新内存页被连续访问,处理器501会自动将新页迁移至本地。如果处理器501检测到数据缓冲区空闲,并且处理器不允许内存页进行迁移,迁移单元则将本地内存区域的一个LRU页迁移到异地,再将新页迁移至本地内存区域。
所谓内部换页,即需要从数据缓冲区中其他内存区域导入新的内存页到本地内存区域。所述内部换页机制包括:
1)、当需要将除所述CPU对应的本地内存区域外的缓存区域中的内存页迁移至所述CPU对应的本地内存区域时,若处理器501检测到除所述CPU对应的本地内存区域外的缓存区域的空闲区域不能容纳内存页,删除单元则将所述CPU对应的本地内存区域中的一个内存页删除,再由处理器501将需要的内存页迁移至所述CPU对应的本地内存区域。
2)、当需要将除所述CPU对应的本地内存区域外的缓存区域中的内存页迁移至所述CPU对应的本地内存区域中时,若检测单元检测到除所述CPU对应的本地内存区域外的缓存区域的空闲内存区域至少能容纳至少一个内存页,处理器501则将所述CPU对应的本地内存区域中的一个内存页迁移至除所述CPU对应的本地内存区域外的缓存区域,再将需要的内存页迁移至所述CPU对应的本地内存区域。
具体实现中,如果处理器501检测到异地内存区域(数据缓冲去中除本地内存区域外的内存区域)比较满(如超过90%),删除单元则将本地内存区域的一个LRU页删除,再由迁移单元504将新页迁移至本地内存区域。如果处理器501检测到异地内存区域比较空闲,处理器501则将本地内存区域的一个LRU页迁移至异地,再将新页迁移至本地内存区域。
本发明实施例提供的缓存管理方法,针对设备中的每个CPU,记录所述CPU本地内存区域中各内页被各CPU访问的频率,并将所述CPU的各内存页中存在的待迁移内存页迁移至对所述待迁移内存页访问频率最大的CPU的本地内存区域中,进而使得各CPU访问的数据尽量集中在各CPU的本地内存区域中,减少了现有技术中由于各CPU访问异地内存而导致的数据访问速率下降,提高数据访问的速率,进而提高系统性能。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (16)
1.一种缓存管理方法,应用于非统一内存访问架构NUMA设备,所述NUMA设备包含至少两个中央处理器CPU以及数据缓冲区,所述数据缓冲区包含至少两个本地内存区域,每个CPU对应一个本地内存区域,其特征在于,针对每个CPU,所述方法包括:
记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率;
检测所述各内存页中是否存在待迁移内存页,其中,所述待迁移内存页被所述本地CPU访问的频率小于被其他CPU访问的频率;
若所述各内存页中存在所述待迁移内存页,则将对所述待迁移内存页的访问频率最大的CPU确定为目标CPU;
将所述待迁移内存页迁移至所述目标CPU的本地内存区域;
所述将所述待迁移内存页迁移至所述目标CPU的本地内存区域包括:若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存区域能容纳至少一个内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页迁移至所述数据缓冲区的空闲内存区域中之后,所述本地CPU再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
2.根据权利要求1所述的方法,其特征在于,所述检测所述各内存页中是否存在待迁移内存页具体包括:
检测所述本地CPU的本地内存区域中是否存在被所述本地CPU访问的频率为零的内存页;
若存在,则将所述被所述本地CPU访问的频率为零的内存页确定为所述待迁移内存页。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
所述本地CPU利用局部索引记录所述本地CPU的本地内存区域中各内存页在本地内存区域中的存储地址,与所述各内存页的编号之间的对应关系;利用全局索引记录所述本地CPU的本地内存区域中各内存页在除所述本地CPU的本地内存区域外的缓存区域中的存储地址,与所述各内存页的编号之间的对应关系。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
所述本地CPU访问其本地内存区域中的第一内存页时,将所述本地CPU对所述第一内存页的访问频率值加1,将访问所述第一内存页的其他CPU对所述第一内存页的访问频率值均减1。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存不能容纳内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页删除之后,所述本地CPU再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
6.根据权利要求3所述的方法,其特征在于,所述方法还包括:
所述本地CPU生成数据访问指令,所述数据访问指令携带所述本地CPU的待访问内存页的编号M;
所述本地CPU检测所述局部索引中是否记录有编号为所述M的内存页的存储地址;
若所述局部索引中记录有编号为所述M的内存页的存储地址,则根据记录的编号为所述M的内存页的存储地址获取所述待访问内存页;若所述局部索引中没有记录编号为所述M的内存页的存储地址,则检测所述全局索引中是否记录有编号为所述M的内存页的存储地址;
若所述全局索引中记录有编号为所述M的内存页的存储地址,则根据记录的编号为所述M的内存页的存储地址查找到所述待访问内存页。
7.根据权利要求6所述的方法,其特征在于,若所述全局索引中没有记录编号为所述M的内存页的存储地址,则所述本地CPU访问物理磁盘,查找到所述待访问内存页。
8.根据权利要求7所述的方法,其特征在于,在所述本地CPU则访问物理磁盘,查找到所述待访问内存页之后,所述方法还包括:
若所述本地CPU的本地内存区域已饱和,则判断所述数据缓冲区是否饱和;
若判断所述数据缓冲区未饱和,则将所述待访问内存页迁移至所述数据缓冲区中除所述本地CPU的本地内存区域外的缓存区域。
9.一种缓存管理装置,应用于非统一内存访问架构NUMA设备,所述NUMA设备包含至少两个中央处理器CPU以及数据缓冲区,所述NUMA设备包含数据缓冲区,所述数据缓冲区包含至少一个本地内存区域,每个CPU对应一个本地内存区域,其特征在于,包括:
记录单元,用于记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率;
检测单元,用于检测所述各内存页中是否存在待迁移内存页,其中,所述待迁移内存页被所述本地CPU访问的频率小于被其他CPU访问的频率;
确定单元,用于在所述检测单元检测到所述各内存页中存在所述待迁移内存页之后,将对所述待迁移内存页的访问频率最大的CPU确定为目标CPU;
迁移单元,用于若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存区域能容纳至少一个内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页迁移至所述数据缓冲区的空闲内存区域中之后,所述本地CPU再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
10.根据权利要求9所述的缓存管理装置,其特征在于,
所述检测单元具体用于,检测所述本地CPU的本地内存区域中是否存在被所述本地CPU访问的频率为零的内存页;
所述确定单元具体用于,在所述检测单元检测到所述本地CPU的本地内存区域中存在被所述本地CPU访问的频率为零的内存页之后,将所述被所述本地CPU访问的频率为零的内存页确定为所述待迁移内存页。
11.根据权利要求9或10所述的缓存管理装置,其特征在于,
所述记录单元还用于,利用局部索引记录所述本地CPU的本地内存区域中各内存页在本地内存区域中的存储地址,与所述本地CPU的本地内存区域中各内存页的编号之间的对应关系;利用全局索引记录所述各内存页在除所述本地CPU的本地内存区域外的缓存区域中的存储地址,与所述各内存页的编号之间的对应关系。
12.根据权利要求11所述的缓存管理装置,其特征在于,
所述记录单元还用于,在所述本地CPU访问其本地内存区域中的第一内存页时,将所述本地CPU对所述第一内存页的访问频率值加1,将其他访问所述第一内存页的CPU对所述第一内存页的访问频率值均减1。
13.根据权利要求9所述的缓存管理装置,其特征在于,
所述迁移单元具体用于,若确定所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存不能容纳内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页删除之后,再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
14.根据权利要求11所述的缓存管理装置,其特征在于,
还包括生成单元和获取单元,
所述生成单元,用于生成数据访问指令,所述数据访问指令携带所述本地CPU的待访问内存页的编号M;
所述检测单元还用于,检测所述局部索引中是否记录有编号为所述M的内存页的存储地址;
所述获取单元用于,在所述检测单元确定所述局部索引中记录有编号为所述M的内存页的存储地址之后,根据记录的编号为所述M的内存页的存储地址获取所述待访问内存页;
所述检测单元还用于,在确定所述局部索引中没有记录编号为所述M的内存页的存储地址,检测所述全局索引中是否记录有编号为所述M的内存页的存储地址;
所述获取单元还用于,在所述检测单元确定所述全局索引中记录有编号为所述M的内存页的存储地址之后,根据记录的编号为所述M的内存页的存储地址查找到所述待访问内存页。
15.根据权利要求14所述的缓存管理装置,其特征在于,
所述获取单元还用于,在所述检测单元确定所述全局索引中没有记录编号为所述M的内存页的存储地址之后,访问物理磁盘,查找到所述待访问内存页。
16.根据权利要求15所述的缓存管理装置,其特征在于,
所述检测单元还用于,在确定所述本地CPU的本地内存区域已饱和之后,判断所述数据缓冲区是否饱和;
所述迁移单元具体用于,在所述检测单元判断所述数据缓冲区未饱和之后,将所述待访问内存页迁移至所述数据缓冲区中除所述本地CPU的本地内存区域外的缓存区域。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410382467.7A CN104156322B (zh) | 2014-08-05 | 2014-08-05 | 一种缓存管理方法及缓存管理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410382467.7A CN104156322B (zh) | 2014-08-05 | 2014-08-05 | 一种缓存管理方法及缓存管理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104156322A CN104156322A (zh) | 2014-11-19 |
CN104156322B true CN104156322B (zh) | 2017-10-17 |
Family
ID=51881827
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410382467.7A Active CN104156322B (zh) | 2014-08-05 | 2014-08-05 | 一种缓存管理方法及缓存管理装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104156322B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106293953B9 (zh) * | 2015-06-08 | 2019-06-18 | 龙芯中科技术有限公司 | 一种访问共享显示数据的方法及系统 |
CN106936739B (zh) * | 2015-12-30 | 2020-02-11 | 新华三技术有限公司 | 一种报文转发方法及装置 |
CN108139872B (zh) | 2016-01-06 | 2020-07-07 | 华为技术有限公司 | 一种缓存管理方法、缓存控制器以及计算机系统 |
CN107291752A (zh) * | 2016-04-01 | 2017-10-24 | 中国电信股份有限公司 | 基于业务感知的数据迁移控制方法和系统 |
CN108572864A (zh) * | 2017-03-13 | 2018-09-25 | 龙芯中科技术有限公司 | 触发负载均衡调度的方法、装置及服务器 |
CN110888821B (zh) * | 2019-09-30 | 2023-10-20 | 华为技术有限公司 | 一种内存管理方法及装置 |
CN113050874A (zh) * | 2019-12-26 | 2021-06-29 | 华为技术有限公司 | 一种内存设置方法以及装置 |
CN114095574B (zh) * | 2022-01-20 | 2022-04-29 | 恒生电子股份有限公司 | 数据处理方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102326149A (zh) * | 2011-07-28 | 2012-01-18 | 华为技术有限公司 | 内存迁移的实现方法和装置 |
CN102834807A (zh) * | 2011-04-18 | 2012-12-19 | 华为技术有限公司 | 多处理器系统负载均衡的方法和装置 |
CN103324592A (zh) * | 2013-06-24 | 2013-09-25 | 华为技术有限公司 | 一种数据迁移控制方法、数据迁移方法及装置 |
CN103744799A (zh) * | 2013-12-26 | 2014-04-23 | 华为技术有限公司 | 一种内存数据访问方法、装置和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4304676B2 (ja) * | 2006-10-31 | 2009-07-29 | 日本電気株式会社 | データ転送装置、データ転送方法、及びコンピュータ装置 |
-
2014
- 2014-08-05 CN CN201410382467.7A patent/CN104156322B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102834807A (zh) * | 2011-04-18 | 2012-12-19 | 华为技术有限公司 | 多处理器系统负载均衡的方法和装置 |
CN102326149A (zh) * | 2011-07-28 | 2012-01-18 | 华为技术有限公司 | 内存迁移的实现方法和装置 |
CN103324592A (zh) * | 2013-06-24 | 2013-09-25 | 华为技术有限公司 | 一种数据迁移控制方法、数据迁移方法及装置 |
CN103744799A (zh) * | 2013-12-26 | 2014-04-23 | 华为技术有限公司 | 一种内存数据访问方法、装置和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104156322A (zh) | 2014-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104156322B (zh) | 一种缓存管理方法及缓存管理装置 | |
JP5006348B2 (ja) | 応答出力キャッシュに対するマルチキャッシュ協調 | |
US20130290643A1 (en) | Using a cache in a disaggregated memory architecture | |
CN100349150C (zh) | 通过直接存储器访问控制器传输数据的系统及方法 | |
US7886199B2 (en) | Recovery from a hang condition in a data processing system | |
CN105701219B (zh) | 一种分布式缓存的实现方法 | |
JPH05324471A (ja) | キャッシュ制御装置 | |
CN102326149A (zh) | 内存迁移的实现方法和装置 | |
JP2004192292A (ja) | プリフェッチアプライアンスサーバ | |
CN105718242B (zh) | 多核dsp中支持软硬件数据一致性的处理方法及系统 | |
CN101673192A (zh) | 时序化的数据处理方法、装置及系统 | |
CN104270412A (zh) | 一种基于Hadoop分布式文件系统的三级缓存方法 | |
CN109446114A (zh) | 一种空间数据缓存方法、装置和存储介质 | |
CN107341114A (zh) | 一种目录管理的方法、节点控制器和系统 | |
US20240012813A1 (en) | Dynamic prefetching for database queries | |
US11099998B2 (en) | Method and device for optimization of data caching | |
KR100851738B1 (ko) | 로우-레벨 캐시를 포함한 액세스 촉진용 리버스 디렉토리 | |
CN116955213A (zh) | 一种基于Caffeine优化的缓存方法及装置 | |
CN104978283B (zh) | 一种内存访问控制方法,及装置 | |
JP2019521447A (ja) | キャッシュエントリ転送のためにキャッシュ位置情報を記憶するシステム及び方法 | |
RU2484520C2 (ru) | Адаптивная организация кэша для однокристальных мультипроцессоров | |
CN107967220A (zh) | 具有对高速缓存线拥有者cpu的跟踪的多cpu设备 | |
CN108664217A (zh) | 一种降低固态盘存储系统写性能抖动的缓存方法及系统 | |
CN106339385B (zh) | 抓取网页的系统、网页抓取节点分配方法、抓取网页的方法 | |
GB2614676A (en) | Managing least-recently-used data cache with persistent body |
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 |