一种缓存管理方法及缓存管理装置制造方法
【专利摘要】本发明实施例提供了一种缓存管理方法及缓存管理装置,涉及计算机应用【技术领域】,合理迁移内存页,使得数据尽量集中在各CPU的本地内存区域,避免过多异地访问内存导致的数据访问速率下降,提高数据访问速率。所述方法包括:记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率;检测所述各内存页中是否存在待迁移内存页,若所述各内存页中存在所述待迁移内存页,则将对所述待迁移内存页的访问频率最大的CPU确定为目标CPU;将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
【专利说明】一种缓存管理方法及缓存管理装置
【技术领域】
[0001] 本发明涉及计算机应用【技术领域】,尤其涉及一种缓存管理方法及缓存管理装置。
【背景技术】
[0002] 随着计算机应用技术的迅速发展,会给服务器配置2个、4个甚至是8个CPU,进而 就产生了 NUMA (Non Uniform Memory Access Architecture,非统一内存访问架构)。在 NUMA架构下,处理器会划分出一个内存较大的地址空间作为数据缓冲区,将这个数据缓冲 区划分成多个内存区域且每个CPU对应有一个内存区域。NUMA架构能够降低各CPU之间的 链接延迟,且具有良好扩展性以及易编程的特点。
[0003] 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系统中处理器访问其本地内存的速度远大 于访问非本地内存的速度。
[0004] 因此,现有NUMA系统跨NUMA节点访问非本地内存时,数据访问速度下降,系统性 能下降。
【发明内容】
[0005] 本发明实施例提供一种缓存管理方法及缓存管理装置,避免各CPU过多的访问除 其对应的本地内存区域外的内存区域,提高数据访问的速率,进而提高系统性能。
[0006] 为达到上述目的,本发明实施例采用的技术方案是,
[0007] 第一方面,公开了一种缓存管理方法,应用于非统一内存访问架构NUMA设备,所 述NUMA设备包含至少两个中央处理器CPU以及数据缓冲区,所述数据缓冲区包含至少两 个本地内存区域,每个CPU对应一个本地内存区域,其特征在于,针对每个CPU,所述方法包 括:
[0008] 记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率;
[0009] 检测所述各内存页中是否存在待迁移内存页,其中,所述待迁移内存页被所述本 地CPU访问的频率小于被其他CPU访问的频率;
[0010] 若所述各内存页中存在所述待迁移内存页,则将对所述待迁移内存页的访问频率 最大的CPU确定为目标CPU;
[0011] 将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
[0012] 结合第一方面,在第一方面的第一种可能的实现方式中,所述检测所述各内存页 中是否存在待迁移内存页具体包括:
[0013] 检测所述本地CPU的本地内存区域中是否存在被所述本地CPU访问的频率为零的 内存页;
[0014] 若存在,则将所述被所述本地CPU访问的频率为零的内存页确定为所述待迁移内 存页。
[0015] 结合第一方面、第一方面的第一种可能的实现方式,在第一方面的第二种可能的 实现方式中,所述方法还包括:
[0016] 所述本地CPU利用局部索引记录所述本地CPU的本地内存区域中各内存页在本地 内存区域中的存储地址,与所述各内存页的编号之间的对应关系;利用全局索引记录所述 本地CPU的本地内存区域中各内存页在除所述本地CPU的本地内存区域外的缓存区域中的 存储地址,与所述各内存页的编号之间的对应关系。
[0017] 结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式 中,所述方法还包括:
[0018] 所述本地CPU访问其本地内存区域中的第一内存页时,将所述本地CPU对所述第 一内存页的访问频率值加1,将其他访问所述第一内存页的CPU对所述第一内存页的访问 频率值均减1。
[0019] 结合第一方面、第一方面的第一至第三种可能的实现方式,在第一方面的第四种 可能的实现方式中,所述将所述待迁移内存页迁移至所述目标CPU的本地内存区域具体包 括:
[0020] 若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存不能容纳 内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页删除之后,所述 本地CPU再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
[0021] 结合第一方面、第一方面的第一至第四种可能的实现方式,在第一方面的第五种 可能的实现方式中,所述将所述待迁移内存页迁移至所述目标CPU的本地内存区域具体包 括:
[0022] 若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存区域能容 纳至少一个内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页迁 移至所述数据缓冲区的空闲内存区域中之后,所述本地CPU再将所述待迁移内存页迁移至 所述目标CPU的本地内存区域。
[0023] 结合第一方面的第二种可能的实现方式,在第一方面的第六种可能的实现方式 中,所述方法还包括:
[0024] 所述本地CPU生成数据访问指令,所述数据访问指令携带所述本地CPU的待访问 内存页的编号Μ ;
[0025] 所述本地CPU检测所述局部索引中是否记录有编号为所述Μ的内存页的存储地 址;
[0026] 若所述局部索引中记录有编号为所述Μ的内存页的存储地址,则根据记录的编号 为所述Μ的内存页的存储地址获取所述待访问内存页;若所述局部索引中没有记录编号为 所述Μ的内存页的存储地址,则检测所述全局索引中是否记录有编号为所述Μ的内存页的 存储地址;
[0027] 若所述全局索引中记录有编号为所述Μ的内存页的存储地址,则根据记录的编号 为所述Μ的内存页的存储地址查找到所述待访问内存页。
[0028] 结合第一方面的第六种可能的实现方式,在第一方面的第七种可能的实现方式 中,若所述全局索引中没有记录编号为所述Μ的内存页的存储地址,则所述本地CPU访问物 理磁盘,查找到所述待访问内存页。
[0029] 结合第一方面的第七种可能的实现方式,在第一方面的第八种可能的实现方式 中,在所述本地CPU则访问物理磁盘,查找到所述待访问内存页之后,所述方法还包括:
[0030] 若所述本地CPU的本地内存区域已饱和,则判断所述数据缓冲区是否饱和;
[0031] 若判断所述数据缓冲区未饱和,则将所述待访问内存页迁移至所述数据缓冲区中 除所述本地CPU的本地内存区域外的缓存区域。
[0032] 第二方面,公开了一种缓存管理装置,应用于非统一内存访问架构NUMA设备,所 述NUMA设备包含至少两个中央处理器CPU以及数据缓冲区,所述NUMA设备包含数据缓冲 区,所述数据缓冲区包含至少一个本地内存区域,每个CPU对应一个本地内存区域,其特征 在于,包括:
[0033] 记录单元,用于记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频 率;
[0034] 检测单元,用于检测所述各内存页中是否存在待迁移内存页,其中,所述待迁移内 存页被所述本地CPU访问的频率小于被其他CPU访问的频率;
[0035] 确定单元,用于在所述检测单元检测到所述各内存页中存在所述待迁移内存页之 后,将对所述待迁移内存页的访问频率最大的CPU确定为目标CPU ;
[0036] 迁移单元,用于将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
[0037] 结合第二方面,在第二方面的第一种可能的实现方式中,
[0038] 所述检测单元具体用于,检测所述本地CPU的本地内存区域中是否存在被所述本 地CPU访问的频率为零的内存页;
[0039] 所述确定单元具体用于,在所述检测单元检测到所述本地CPU的本地内存区域中 存在被所述本地CPU访问的频率为零的内存页之后,将所述被所述本地CPU访问的频率为 零的内存页确定为所述待迁移内存页。
[0040] 结合第二方面、第二方面的第一种可能的实现方式,在第二方面的第二种可能的 实现方式中,
[0041] 所述记录单元还用于,利用局部索引记录所述本地CPU的本地内存区域中各内存 页在本地内存区域中的存储地址,与所述各内存页的编号之间的对应关系;利用全局索引 记录所述本地CPU的本地内存区域中各内存页在除所述本地CPU的本地内存区域外的缓存 区域中的存储地址,与所述各内存页的编号之间的对应关系。
[0042] 结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式 中,
[0043] 所述记录单元还用于,在所述本地CPU访问其本地内存区域中的第一内存页时, 将所述本地CPU对所述第一内存页的访问频率值加1,将其他访问所述第一内存页的CPU对 所述第一内存页的访问频率值均减1。
[0044] 结合第二方面、第二方面的第一至第三种可能的实现方式,在第二方面的第四种 可能的实现方式中,
[0045] 所述迁移单元具体用于,若确定所述目标CPU的本地内存区域已饱和,且所述数 据缓冲区的空闲内存不能容纳内存页,则在所述目标CPU将所述目标CPU的本地内存区域 中的一个内存页删除之后,再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
[0046] 结合第二方面、第二方面的第一至第四种可能的实现方式,在第二方面的第五种 可能的实现方式中,
[0047] 所述迁移单元具体用于,若确定所述目标CPU的本地内存区域已饱和,且所述数 据缓冲区的空闲内存区域能容纳至少一个内存页,则在所述目标CPU将所述目标CPU的本 地内存区域中的一个内存页迁移至所述数据缓冲区的空闲内存区域中之后,再将所述待迁 移内存页迁移至所述目标CPU的本地内存区域。
[0048] 结合第二方面的第二种可能的实现方式,在第二方面的第六种可能的实现方式 中,
[0049] 还包括生成单元和获取单元,
[0050] 所述生成单元,用于生成数据访问指令,所述数据访问指令携带所述本地CPU的 待访问内存页的编号Μ ;
[0051] 所述检测单元还用于,检测所述局部索引中是否记录有编号为所述Μ的内存页的 存储地址;
[0052] 所述获取单元用于,在所述检测单元确定所述局部索引中记录有编号为所述Μ的 内存页的存储地址之后,根据记录的编号为所述Μ的内存页的存储地址获取所述待访问内 存页;
[0053] 所述检测单元还用于,在确定所述局部索引中没有记录编号为所述Μ的内存页的 存储地址,检测所述全局索引中是否记录有编号为所述Μ的内存页的存储地址;
[0054] 所述获取单元还用于,在所述检测单元确定所述全局索引中记录有编号为所述Μ 的内存页的存储地址之后,根据记录的编号为所述Μ的内存页的存储地址查找到所述待访 问内存页。
[0055] 结合第二方面的第六种可能的实现方式,在第二方面的第七种可能的实现方式 中,
[0056] 所述获取单元还用于,在所述检测单元确定所述全局索引中没有记录编号为所述 Μ的内存页的存储地址之后,访问物理磁盘,查找到所述待访问内存页。
[0057] 结合第二方面的第七种可能的实现方式,在第二方面的第八种可能的实现方式 中,
[0058] 所述检测单元还用于,在确定所述本地CPU的本地内存区域已饱和之后,判断所 述数据缓冲区是否饱和;
[0059] 所述迁移单元具体用于,在所述检测单元判断所述数据缓冲区未饱和之后,将所 述待访问内存页迁移至所述数据缓冲区中除所述本地CPU的本地内存区域外的缓存区域。
[0060] 本发明实施例提供的缓存管理方法及缓存管理装置,针对设备中的每个CPU,记录 所述CPU本地内存区域中各内存页被各CPU访问的频率,并将所述CPU的各内存页中存在 的待迁移内存页迁移至对所述待迁移内存页访问频率最大的CPU的本地内存区域中,进而 使得各(PU访问的数据尽量集中在各CPU的本地内存区域中,减少了现有技术中由于各CPU 访问异地内存而导致的数据访问速率下降,提高数据访问的速率,进而提高系统性能。
【专利附图】
【附图说明】
[0061] 为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用 的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本 领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的 附图。
[0062] 图1为本发明实施例提供的NUMA系统的结构示意图;
[0063] 图2为本发明实施例1提供的缓存管理方法的流程示意图;
[0064] 图3为本发明实施例2提供的缓存管理方法的流程示意图;
[0065] 图4为本发明实施例3提供的另一缓存管理方法的流程示意图;
[0066] 图5为本发明实施例4提供的缓存管理装置的结构框图;
[0067] 图6为本发明实施例5提供的另一缓存管理装置的结构框图。
【具体实施方式】
[0068] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描 述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明 中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施 例,都属于本发明保护的范围。
[0069] 本发明实施例将传统数据库的单一数据缓冲区依照其NUMA属性划分为多个区 域。即处理器会划分出一个内存较大的地址空间作为数据缓冲区,将这个数据缓冲区划 分成多个内存区域,每个CPU对应有一个内存区域,并且只使用该CPU对应的局部内存。 其中,本发明所述的数据缓冲区实为设备中的内存条等硬件。实现时,每一个应用程序与 DBMS (database management system,数据库管理系统)的连接都被绑定到一个特定的CPU 上,并且尽可能地从该CPU的局部内存中查找数据。对于数据缓冲区中的各个页面,使用两 个索引记录其位置,一个索引记录的是该内存页本地缓冲区的存储位置,只供本地缓存区 域对应的CPU使用。另一个为全局索引,记录了该内存页相对于整个数据缓冲区的存储地 址,所有CPU都可以通过该索引访问该内存页。需要说明的是本发明实施例中提到的第一、 第二无先后顺序之分,仅用以区分不同的内存页或者不同的CPU。
[0070] 所谓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。
[0071] 实施例1 :
[0072] 本发明实施例提供了 一种缓存管理方法,应用于NUMA架构的设备,所述设备包含 至少两个中央处理器CPU,所述设备包含数据缓冲区,所述数据缓冲区被划分为至少两个本 地内存区域,每个CPU对应一个本地内存区域,针对每个CPU。如图2所述,所述方法包括以 下步骤:
[0073] 101、记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率。
[0074] 针对服务器(缓存管理装置)中的每个CPU,对应本发明实施例提供的方法,当将 某CPU作为执行主体时,就将该CPU称为本地CPU。各CPU均会记录其本地内存区域中的内 存页被各CPU访问的频率,这样方便各CPU对各内存页的被访问频率进行检测,进而对自身 不常访问的内存页进行合理迁移。
[0075] 102、检测所述各内存页中是否存在待迁移内存页,其中,所述待迁移内存页被所 述本地CPU访问的频率小于被其他CPU访问的频率。
[0076] 这里,若某内存页被本地CPU访问的频率小于被其他CPU(处理器中除了本地CPU 外的CPU)访问的频率,则说明该内存页对于本地CPU来说可能是一个不常访问的内存页, 可以考虑将该内存页迁移至对其访问频率高的CPU的本地内存区域。
[0077] 需要说明的是,在本发明实施例中数据库系统划分数据缓冲区域时各CPU就会记 录其对应的本地内存区域中各内存页的编号以及其本地内存区域中的各内存页的被访问 频率,以便本地CPU能够根据各内存页的编号以及各CPU对内存页的访问频率对内存页进 行合理迁移,减少异地访问数据导致的数据访问速率的下降。
[0078] 103、若所述各内存页中存在所述待迁移内存页,则将对所述待迁移内存页的访问 频率最大的CPU确定为目标CPU。
[0079] 若本地CPU的各内存页中不存在待迁移内存页,则不改变所述CPU中的内存页。
[0080] 104、将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
[0081] 由于所述目标CPU对所述待迁移的访问频率大于本地CPU对所述待迁移内存页的 访问频率,且所述目标CPU又多次访问所述待迁移内存页,因此若是将所述待迁移内存页 迁移至所述目标CPU的本地内存区域,则会提高所述目标CPU访问所述待迁移内存页的速 率,进而提高服务器的数据访问速率,进而提高整个设备的数据访问效率。
[0082] 具体实现中,所述CPU根据预先存储的所述CPU的本地内存区域中的所述各内存 页的编号与所述各内存页的本地存储地址间的对应关系,查找到与所述待迁移内存页的编 号对应的存储地址,即所述待迁移内存页的本地存储地址。所述CPU再访问其本地内存区 域中,所述待迁移内存页的本地存储地址对应的内存区域,就可以获取所述待迁移内存页, 进而将所述待迁移内存页迁移至所述目标CPU对应的本地内存区域,所述目标CPU就可以 通过QPI总线访问本地内存区域获得数据,避免访问异地内存,大大提高了数据访问数据。
[0083] 参考上述结合图1所做的阐述,由于CPU1通过QPI总线中转访问数据速度较慢, 因此,本发明实施例提供的方案通过使得各CPU尽量通过访问本地内存获得数据,就可以 提高数据访问的速率。
[0084] 进一步地,在本发明的优选实施例中,
[0085] 本地CPU的检测自身本地内存区域中是否存在被所述本地CPU访问的频率为零的 内存页。若存在被所述本地CPU访问的频率为零的内存页,本地CPU则将所述被所述本地 (PU访问的频率为零的内存页确定为所述待迁移内存页。
[0086] 进一步地,在本发明的优选实施例中,
[0087] 所述本地CPU利用局部索引记录本地CPU的本地内存区域中各内存页在本地内存 区域中的存储地址,与所述各内存页的编号之间的对应关系;利用全局索引记录本地CPU 的本地内存区域中各内存页在除所述本地CPU的本地内存区域外的缓存区域中的存储地 址,与所述各内存页的编号之间的对应关系。
[0088] 需要说明的是,局部索引只能供本地CPU使用,全局索引是各CPU共享的。
[0089] 也就是说,每个CPU之前会记录其对应的本地内存区域中各内存页的本地存储地 址(即本地内存区域中各内存页在本地内存区域中的存储地址)、全局存储地址(即本地内 存区域中各内存页在除所述本地CPU的本地内存区域外的缓存区域中的存储地址)以及各 内存页的编号之间的对应关系。
[0090] 进一步地,在本发明的优选实施例中:
[0091] 所述本地CPU访问其本地内存区域中的第一内存页时,将所述本地CPU对所述第 一内存页的访问频率值加1,将其他访问所述第一内存页的CPU对所述第一内存页的访问 频率值均减1。
[0092] 这样也是为了方便本地CPU对各内存页的访问情况进行准确的把控,以便对本地 内存页进行合理迁移,提高整体设备的数据访问速率。
[0093] 进一步地,在本发明的优选实施例中:
[0094] 若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存不能容纳 内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页删除之后,所述 本地CPU再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
[0095] 进一步地,在本发明的优选实施例中:
[0096] 若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存区域能容 纳至少一个内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页迁 移至所述数据缓冲区的空闲内存区域中之后,所述本地CPU再将所述待迁移内存页迁移至 所述目标CPU的本地内存区域。
[0097] 进一步地,在本发明的优选实施例中:
[0098] 所述本地CPU生成数据访问指令,所述数据访问指令携带所述本地CPU的待访问 内存页的编号M。
[0099] 所述本地CPU检测所述局部索引中是否记录有编号为所述Μ的内存页的存储地 址。
[0100] 若所述局部索引中记录有编号为所述Μ的内存页的存储地址,则根据记录的编号 为所述Μ的内存页的存储地址获取所述待访问内存页;若所述局部索引中没有记录编号为 所述Μ的内存页的存储地址,则检测所述全局索引中是否记录有编号为所述Μ的内存页的 存储地址。
[0101] 若所述全局索引中记录有编号为所述Μ的内存页的存储地址,则根据记录的编号 为所述Μ的内存页的存储地址查找到所述待访问内存页。
[0102] 进一步地,在本发明的优选实施例中:
[0103] 若所述局部索引中记录有编号为所述Μ的内存页的存储地址,且所述本地CPU需 要访问所述待访问内存页的次数大于预设门限值,则将所述待访问内存页迁移至所述本地 CPU的本地内存区域中。
[0104] 其中,NUMA设备中不同的应用程序对应不同的预设门限值。示例地,对于内存页 1而言,应用程序A和应用程序B对应的预设门限值分别为5和4。当应用程序A通过本地 (PU访问该待访问内存页时,一旦本地CPU判断应用程序A要访问该待访问内存页的次数大 于5,则将该待访问内存页迁移至本地CPU对应的本地内存区域。当应用程序B通过本地 (PU访问该待访问内存页时,一旦本地CPU判断应用程序B要访问该待访问内存页的次数大 于4,则将该待访问内存页迁移至本地CPU对应的本地内存区域。综上,是否将该待访问内 存页迁移至本地CPU对应的本地内存区域取决于当前调用CPU的应用程序的具体情况。 [0105] 进一步地,在本发明的优选实施例中:
[0106] 若所述全局索引中没有记录编号为所述Μ的内存页的存储地址,所述本地CPU则 访问物理磁盘,查找到所述待访问内存页。
[0107] 进一步地,在本发明的优选实施例中:
[0108] 在所述本地CPU则访问物理磁盘,查找到所述待访问内存页之后,若所述本地CPU 的本地内存区域已饱和,则判断所述数据缓冲区是否饱和;
[0109] 若判断所述数据缓冲区未饱和,则将所述待访问内存页迁移至所述数据缓冲区中 除所述本地CPU的本地内存区域外的缓存区域。
[0110] 进一步地,在本发明的优选实施例中:
[0111] 在所述本地CPU则访问物理磁盘,查找到所述待访问内存页具体之后,
[0112] 若所述CPU的本地内存区域未饱和,且所述本地CPU访问所述待访问内存页的次 数大于所述预设门限值,所述本地CPU则将所述待访问内存页迁移至所述本地CPU的本地 内存区域。
[0113] 同上所述,NUMA设备中不同的应用程序对应不同的预设门限值。
[0114] 进一步地,在本发明的优选实施例中:
[0115] 在所述本地CPU则访问物理磁盘,查找到所述待访问内存页之后,若所述本地CPU 访问所述待访问内存页的次数大于所述预设门限值,且所述数据缓冲区已饱和,所述本地 (PU则删除所述本地CPU的本地内存区域中的一个内存页,再将所述待访问内存页迁移至 所述本地CPU的本地内存区域。
[0116] 本发明实施例提供的缓存管理方法及缓存管理装置,针对设备中的每个CPU,记录 所述CPU本地内存区域中各内页被各CPU访问的频率,并将所述CPU的各内存页中存在的 待迁移内存页迁移至对所述待迁移内存页访问频率最大的CPU的本地内存区域中,进而使 得各CPU访问的数据尽量集中在各CPU的本地内存区域中,减少了现有技术中由于各CPU 访问异地内存而导致的数据访问速率下降,提高数据访问的速率,进而提高系统性能。
[0117] 实施例2:
[0118] 本发明实施例提供了一种缓存管理方法,应用于非统一内存访问架构NUMA设备, 所述NUMA设备包含至少两个中央处理器CPU以及数据缓冲区,所述NUMA设备包含数据缓 冲区,所述数据缓冲区包含至少一个本地内存区域,每个CPU对应一个本地内存区域。如图 3所述,针对每个CPU,执行主体为本地CPU,所述方法包括以下步骤:
[0119] 201、记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率。
[0120] 需要说明的是,将本发明提供的内存管理方法应用于一个CPU时,就会将该CPU称 为本地CPU。即当该CPU是执行主体时,将该CPU称为本地CPU。
[0121] 参照上述结合图1的描述可以获知,CPU访问异地内存区域(即数据缓冲区中除 所述CPU的本地内存区域外的内存区域)会导致数据访问速率下降,因此有必要通过记录 各内存页被访问的频对内存页进行合理迁移,使得各CPU访问的内存页尽可能在本地内存 区域,减少异地访问,进而提高数据访问速率。
[0122] 具体实现中,数据库系统中划分数据缓冲区域时各CPU就会记录其对应的本地内 存区域中各内存页的编号以及其本地内存区域中的各内存页的被访问频率,以便所述CPU 能够根据内存页的编号以及各CPU对内存页的访问频率对内存页进行合理迁移,减少异地 访问数据导致的数据访问速率的下降。
[0123] 202、检测所述本地CPU的本地内存区域中是否存在被所述本地CPU访问的频率为 零的内存页。
[0124] 由于之前各CPU记录了各自对应的本地内存区域中各内存页被各CPU访问的频 率,因此所述CPU可以逐一判断对应的本地内存区域中的各个内存页被所述CPU访问的频 率,若存在未被所述CPU访问的内存页(即待迁移内存页),则将所述待迁移内存页迁移到 合适的内存区域。
[0125] 若存在,则进行步骤203 ;若不存在,所述CPU则不改变其本地内存区域中的内存 页。
[0126] 203、将所述被所述本地CPU访问的频率为零的内存页确定为所述待迁移内存页, 将对所述待迁移内存页的访问频率最大的CPU确定为目标CPU。
[0127] 由于所述CPU对所述待迁移的访问频率为零,且所述目标CPU又多次访问所述待 迁移内存页,因此若是将所述待迁移内存页迁移至所述目标CPU的本地内存区域,则会提 高所述目标CPU访问所述待迁移内存页的速率,进而提高服务器的数据访问速率。
[0128] 204、将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
[0129] 本地CPU根据预先存储的局部索引(即本地CPU的本地内存区域中的所述各内存 页的编号,与本地内存区域中各内存页在本地内存区域中的存储地址),查找到与所述待迁 移内存页的编号对应的存储地址,即所述待迁移内存页的本地存储地址。本地CPU再访问 其本地内存区域中,所述待迁移内存页的本地存储地址对应的内存区域,就可以获取所述 待迁移内存页,进而将所述待迁移内存页迁移至所述目标CPU对应的本地内存区域,所述 目标CPU就可以通过QPI总线访问本地内存区域查找到数据,避免访问异地内存,大大提高 了数据访问数据。
[0130] 另外,每个CPU之前会利用局部索引记录本地内存区域中各内存页在本地内存区 域中的存储地址,与所述各内存页的编号之间的对应关系。利用全局索引记录所述各内存 页在除所述本地CPU的本地内存区域外的缓存区域中的存储地址,与所述各内存页的编号 之间的对应关系。其中,各CPU可以根据内存页的本地存储地址访问本地内存区域查找到 数据。当CPU要访问的内存页不在本地内存区域,CPU可以根据所述全局存储地址判断CPU 要访问的内存页在不在数据缓冲区中,除该CPU的本地内存区域外的缓存区域中,或者根 据所述全局存储地址判断CPU要访问的内存页在不在所述数据缓冲区中。
[0131] 本发明实施例还提供了以下缓存管理方法,执行主体为服务器中的任一个CPU,包 括以下几种:
[0132] 一、CPU访问其本地内存区域中的目标内存页时,将该CPU对该目标内存页的访问 频率加1,将其他访问该目标内存页的CPU对所述目标内存页的访问频率均减1。
[0133] 二、当CPU需要从所述物理磁盘中导出新的内存页且该CPU对应的本地内存区域 已饱和,则判断所述数据缓冲区是否饱和。
[0134] 若该CPU判断所述数据缓冲区未饱和,则将所述新的内存页迁移至所述数据缓冲 区中除该CPU对应的本地内存区域外的缓存区域。
[0135] 三、当CPU需要从所述物理磁盘中导出新的内存页且访问所述新的内存页的次数 大于预设门限值时,若该CPU的本地内存区域未饱和,该CPU将所述新的内存页迁移至自身 的本地内存区域。
[0136] 四、若CPU需要从所述物理磁盘中导出新的内存页且所述数据缓冲区已饱和,该 (PU删除自身的本地内存区域中的一个内存页,将所述新的内存页迁移至自身的本地内存 区域,访问本地内存区域获得数据。
[0137] 五、当CPU需要将除该CPU的本地内存区域外的缓存区域中的内存页迁移至所述 CPU对应的本地内存区域中(即进行异地调页),若除该CPU的本地内存区域外的缓存区域 不能容纳内存页(也可认为是除该CPU的本地内存区域外的缓存区域的空闲内存小于预设 值),该CPU将其本地内存区域中的一个内存页删除,再将需要的内存页迁移至该CPU的本 地内存区域。
[0138] 六、当CPU需要将除该CPU的本地内存区域外的缓存区域中的内存页迁移至该CPU 对应的本地内存区域中,若除该CPU对应的本地内存区域外的缓存区域能容纳至少一个内 存页(也可以认为除该CPU对应的本地内存区域外的缓存区域的空闲内存大于门限值), 该CPU将其本地内存区域中的一个内存页迁移至除该CPU的本地内存区域外的缓存区域, 再将需要的内存页迁移至该CPU对应的本地内存区域。
[0139] 结合本发明实施例提供的缓存管理方法,本发明实施例还提供了一种数据访问方 法,执行主体为服务器中的任一 CPU,包括:
[0140] 所述CPU生成数据访问指令,所述数据访问指令携带所述本地CPU的待访问内存 页的编号M。
[0141] 所述CPU检测所述局部索引中是否记录有编号为所述Μ的内存页的存储地址。
[0142] 若所述局部索引中记录有编号为所述Μ的内存页的存储地址,则根据记录的编号 为所述Μ的内存页的存储地址获取所述待访问内存页;若所述局部索引中没有记录编号为 所述Μ的内存页的存储地址,则检测所述全局索引中是否记录有编号为所述Μ的内存页的 存储地址。
[0143] 若所述全局索引中记录有编号为所述Μ的内存页的存储地址,则根据记录的编号 为所述Μ的内存页的存储地址查找到所述待访问内存页。
[0144] 另外,若所述数据缓冲区中除所述CPU的本地内存区域外的其他内存区域中存在 编号为所述Μ的内存页,且所述CPU需要访问所述待访问内存页的次数大于预设门限值,则 将所述待访问内存页迁移至所述CPU的本地内存区域中。这样,就可使得所述CPU通过访 问本地内存区域查找到需要访问的内存页,进而避免了过多的异地内存访问,提高了数据 访问速率。
[0145] 本发明实施例提供的缓存管理方法,针对设备中的每个CPU,记录所述CPU本地内 存区域中各内页被各CPU访问的频率,并将所述CPU的各内存页中存在的待迁移内存页迁 移至对所述待迁移内存页访问频率最大的CPU的本地内存区域中,进而使得各CPU访问的 数据尽量集中在各CPU的本地内存区域中,减少了现有技术中由于各CPU访问异地内存而 导致的数据访问速率下降,提高数据访问的速率,进而提高系统性能。
[0146] 实施例3 :
[0147] 本发明实施例提供了一种缓存管理方法,如图4所示,针对服务器中的每个CPU, 当某CPU作为执行主体时,就将该CPU称为本地CPU,所述方法包括以下步骤:
[0148] 301、所述本地CPU利用局部索引以及全局索引来记录本地内存区域中各内存页 的存储地址与各内存页的编号之间的对应关系。
[0149] 其中,所述本地CPU利用局部索引记录本地内存区域中各内存页在本地内存区域 中的存储地址,与所述各内存页的编号之间的对应关系;利用全局索引记录所述各内存页 在除所述本地CPU的本地内存区域外的缓存区域中的存储地址,与所述各内存页的编号之 间的对应关系。
[0150] 在实现中,本发明实施例将传统数据库的数据缓冲区按照其NUMA划分为多个内 存区域,且每个CPU对应一个内存区域,各CPU仅使用其对应的内存区域。对于数据缓冲区 中的各个内存页,使用两个索引来记录其位置。一个是局部索引,为内存页的本地存储地址 (该内存页在本地内存区域的存储位置)与内存页的编号之间的对应关系,仅供本地内存 区域对应的CPU使用。一个是全局索引,记录内存页的全局存储地址(即内存页在数据缓 冲区的存储地址)与内存页的编号之间的对应关系,由所有CPU共同使用。
[0151] 需要说明的是,索引也是一种数据结构,它本身需要耗费内存来存储,一个缓冲区 大概占用12个字节,所以管理的缓冲区越多索引占用的存储就越大。
[0152] 数据缓冲区的局部索引一般可以放入L3高速缓存。假定一个NUMA节点所对应 的内存空间为8GB,一个内存页大小为32KB,一个索引项的大小为32Byte,那么索引的大小 为:8GB/32KB*32Byte = 8MB。一般而言,服务器配备CPU的L3高速缓存大小都超过20MB, 再加上数据访问通常有较高的局部性,因此大部分对局部索引的访问都可以在L3高速缓 存中进行。
[0153] 全局索引一般分散在不同的NUMA节点上,当数据量较小时,它也可以被放置在L3 高速缓存中。当全局索引占内存较大时(索引是一种数据结构,服务器的数据缓冲区被划 分成极其多个本地内存区域时,就会导致索引较大,),对它的访问往往需要跨节点,代价相 对较高。但是,我们的缓存机制将尽可能确保数据放置在本地缓冲池中,从而最小化对全局 索引的访问频率。
[0154] 302、记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率。
[0155] 示例地,处理器为每个内存页配备一个短数组,用于记录各CPU最近访问该内存 页的频率,并通过该数组的内容决定是否对内存页进行迁移。具体地,对于CPU1,若用于记 录CPU1访问内存页A频率的数组为零,即内存页A近期内没有被CPU1访问,因此考虑将内 存页A迁移,以便减少系统异地访问内存。
[0156] 303、检测所述本地CPU的本地内存区域中是否存在被所述本地CPU访问的频率为 零的内存页。
[0157] 若存在,则进行304。所述CPU对应的本地内存区域中各内存页中存在被所述CPU 访问的频率为零的内存页,则需要检测近期访问该内存页的CPU对该内存页的访问频率, 以便合理迁移该内存页,减少异地内存访问。若不存在,则不改变所述CPU本地内存区域中 的内存页。
[0158] 304、将所述被所述本地CPU访问的频率为零的内存页确定为所述待迁移内存页。
[0159] 示例地,所述CPU检测到某内存页的数组中本地CPU的访问频度为零,而正在发出 访问请求的异地CPU的访问频度最高,则将该异地CPU指定为目标CPU,并将页面迁移至所 述目标CPU对应的本地内存区域中,以便目标CPU通过QPI直接访问本地内存获取数据,提 高数据访问的效率。
[0160] 需要说明的是,每个所述CPU对应的本地内存区域中的各内存页被所述CPU访问 的频率小于等于预设门限值K ;在所述CPU访目标内存页时,处理器需要将所述CPU对所述 目标内存页的访问频率加1,将其他访问所述目标内存页的CPU对所述目标内存页的访问 频率均减1。即处理器在某CPU每次访问内存页时都需要将该CPU对内存页的访问频率增 加1,而将其它CPU对该内存页的访问频率减1。另外,需要设置访问频率的预设门限值K, 以防止对某内存页访问频率过大(例如,K = 3)。
[0161] 示例地,若服务器的处理器包含4个CPU,如表1所示,内存页p的访问统计数据 为,CPU1 :2 ;CPU2 :3 ;CPU3 :1 ;CPU4 :1(即指定时间段内 CPU1、CPU2、CPU3、CPU4 对内存页 p 的访问次数依次为2、3、1、1),其中CPU3是本地CPU。
[0162] 表 1
[0163]
【权利要求】
1. 一种缓存管理方法,应用于非统一内存访问架构NUMA设备,所述NUMA设备包含至少 两个中央处理器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-4任一项所述的方法,其特征在于,所述将所述待迁移内存页迁移至所 述目标CPU的本地内存区域具体包括: 若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存不能容纳内存 页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页删除之后,所述本地 (PU再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
6. 根据权利1-4任一项所述的方法,其特征在于,所述将所述待迁移内存页迁移至所 述目标CPU的本地内存区域具体包括: 若所述目标CPU的本地内存区域已饱和,且所述数据缓冲区的空闲内存区域能容纳至 少一个内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的一个内存页迁移至 所述数据缓冲区的空闲内存区域中之后,所述本地CPU再将所述待迁移内存页迁移至所述 目标CPU的本地内存区域。
7. 根据权利要求3所述的方法,其特征在于,所述方法还包括: 所述本地CPU生成数据访问指令,所述数据访问指令携带所述本地CPU的待访问内存 页的编号Μ ; 所述本地CPU检测所述局部索引中是否记录有编号为所述Μ的内存页的存储地址; 若所述局部索引中记录有编号为所述Μ的内存页的存储地址,则根据记录的编号为所 述Μ的内存页的存储地址获取所述待访问内存页;若所述局部索引中没有记录编号为所述 Μ的内存页的存储地址,则检测所述全局索引中是否记录有编号为所述Μ的内存页的存储 地址; 若所述全局索引中记录有编号为所述Μ的内存页的存储地址,则根据记录的编号为所 述Μ的内存页的存储地址查找到所述待访问内存页。
8. 根据权利要求7所述的方法,其特征在于,若所述全局索引中没有记录编号为所述Μ 的内存页的存储地址,则所述本地CPU访问物理磁盘,查找到所述待访问内存页。
9. 根据权利要求8所述的方法,其特征在于,在所述本地CPU则访问物理磁盘,查找到 所述待访问内存页之后,所述方法还包括: 若所述本地CPU的本地内存区域已饱和,则判断所述数据缓冲区是否饱和; 若判断所述数据缓冲区未饱和,则将所述待访问内存页迁移至所述数据缓冲区中除所 述本地CPU的本地内存区域外的缓存区域。
10. -种缓存管理装置,应用于非统一内存访问架构NUMA设备,所述NUMA设备包含至 少两个中央处理器CPU以及数据缓冲区,所述NUMA设备包含数据缓冲区,所述数据缓冲区 包含至少一个本地内存区域,每个CPU对应一个本地内存区域,其特征在于,包括: 记录单元,用于记录本地CPU对应的本地内存区域中各内存页被各CPU访问的频率; 检测单元,用于检测所述各内存页中是否存在待迁移内存页,其中,所述待迁移内存页 被所述本地CPU访问的频率小于被其他CPU访问的频率; 确定单元,用于在所述检测单元检测到所述各内存页中存在所述待迁移内存页之后, 将对所述待迁移内存页的访问频率最大的CPU确定为目标CPU ; 迁移单元,用于将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
11. 根据权利要求10所述的缓存管理装置,其特征在于, 所述检测单元具体用于,检测所述本地CPU的本地内存区域中是否存在被所述本地 (PU访问的频率为零的内存页; 所述确定单元具体用于,在所述检测单元检测到所述本地CPU的本地内存区域中存在 被所述本地CPU访问的频率为零的内存页之后,将所述被所述本地CPU访问的频率为零的 内存页确定为所述待迁移内存页。
12. 根据权利要求10或11所述的缓存管理装置,其特征在于, 所述记录单元还用于,利用局部索引记录所述本地CPU的本地内存区域中各内存页在 本地内存区域中的存储地址,与所述本地CPU的本地内存区域中各内存页的编号之间的对 应关系;利用全局索引记录所述各内存页在除所述本地CPU的本地内存区域外的缓存区域 中的存储地址,与所述各内存页的编号之间的对应关系。
13. 根据权利要求12所述的缓存管理装置,其特征在于, 所述记录单元还用于,在所述本地CPU访问其本地内存区域中的第一内存页时,将所 述本地CPU对所述第一内存页的访问频率值加1,将其他访问所述第一内存页的CPU对所述 第一内存页的访问频率值均减1。
14. 根据权利要求10-13任一项所述的缓存管理装置,其特征在于, 所述迁移单元具体用于,若确定所述目标CPU的本地内存区域已饱和,且所述数据缓 冲区的空闲内存不能容纳内存页,则在所述目标CPU将所述目标CPU的本地内存区域中的 一个内存页删除之后,再将所述待迁移内存页迁移至所述目标CPU的本地内存区域。
15. 根据权利要求10-13任一项所述的缓存管理装置,其特征在于, 所述迁移单元具体用于,若确定所述目标CPU的本地内存区域已饱和,且所述数据缓 冲区的空闲内存区域能容纳至少一个内存页,则在所述目标CPU将所述目标CPU的本地内 存区域中的一个内存页迁移至所述数据缓冲区的空闲内存区域中之后,再将所述待迁移内 存页迁移至所述目标CPU的本地内存区域。
16. 根据权利要求12所述的缓存管理装置,其特征在于, 还包括生成单元和获取单元, 所述生成单元,用于生成数据访问指令,所述数据访问指令携带所述本地CPU的待访 问内存页的编号Μ ; 所述检测单元还用于,检测所述局部索引中是否记录有编号为所述Μ的内存页的存储 地址; 所述获取单元用于,在所述检测单元确定所述局部索引中记录有编号为所述Μ的内 存页的存储地址之后,根据记录的编号为所述Μ的内存页的存储地址获取所述待访问内存 页; 所述检测单元还用于,在确定所述局部索引中没有记录编号为所述Μ的内存页的存储 地址,检测所述全局索引中是否记录有编号为所述Μ的内存页的存储地址; 所述获取单元还用于,在所述检测单元确定所述全局索引中记录有编号为所述Μ的内 存页的存储地址之后,根据记录的编号为所述Μ的内存页的存储地址查找到所述待访问内 存页。
17. 根据权利要求16所述的缓存管理装置,其特征在于, 所述获取单元还用于,在所述检测单元确定所述全局索引中没有记录编号为所述Μ的 内存页的存储地址之后,访问物理磁盘,查找到所述待访问内存页。
18. 根据权利要求16所述的缓存管理装置,其特征在于, 所述检测单元还用于,在确定所述本地CPU的本地内存区域已饱和之后,判断所述数 据缓冲区是否饱和; 所述迁移单元具体用于,在所述检测单元判断所述数据缓冲区未饱和之后,将所述待 访问内存页迁移至所述数据缓冲区中除所述本地CPU的本地内存区域外的缓存区域。
【文档编号】G06F13/16GK104156322SQ201410382467
【公开日】2014年11月19日 申请日期:2014年8月5日 优先权日:2014年8月5日
【发明者】周烜, 朱阅岸, 程广卫 申请人:华为技术有限公司