首页> 中国专利> 改善缓存预取数据局部性的方法和系统及缓存访问方法

改善缓存预取数据局部性的方法和系统及缓存访问方法

摘要

本发明提供了改善缓存预取数据局部性的方法和系统。该方法统计缓存中每个预取数据记录集合的预取命中次数,以及对于其预取命中次数小于设定的命中阈值的预取数据记录集合,在将该集合换出缓存时,将该集合中被访问的数据记录写入到新的存储区域,与该存储区域中的其他数据形成新的预取数据记录集。该方法能有效降低预取次数,提高缓存命中率。

著录项

  • 公开/公告号CN103383666A

    专利类型发明专利

  • 公开/公告日2013-11-06

    原文格式PDF

  • 申请/专利权人 中国科学院计算技术研究所;

    申请/专利号CN201310298246.7

  • 发明设计人 严得辰;刘立坤;

    申请日2013-07-16

  • 分类号G06F12/08(20060101);

  • 代理机构11280 北京泛华伟业知识产权代理有限公司;

  • 代理人王勇

  • 地址 100190 北京市海淀区中关村科学院南路6号

  • 入库时间 2024-02-19 20:16:50

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-12-28

    授权

    授权

  • 2013-12-04

    实质审查的生效 IPC(主分类):G06F12/08 申请日:20130716

    实质审查的生效

  • 2013-11-06

    公开

    公开

说明书

技术领域

本发明涉及缓存技术,尤其涉及改善缓存命中率的预取数据局部性组 织方法。

背景技术

缓存是多级存储系统中非常重要的组成部分,缓存预取是一项重要的 提高缓存效率的技术。访问数据记录pij时首先查找其访问位置(索引查找 或元数据查找等),当未能在缓存中命中时,缓存预取通过一次存储访问 将pij所在低级存储层次中的预取数据记录集合Pi:{pi1,...,pin}预取到缓存中,并 将pi1pin的访问位置修改为缓存中对应的位置,期望其后出现较多对pi1~pin的访问。其中,称Pi为pi1,...,pin的预取入口,pij为此次预取的预取首记录。所 访问的数据记录可以是定长数据记录,也可以是变长数据记录。缓存预取 数据内的空间局部性决定了预取机制是否有效:具有较好空间局部性的缓 存预取数据能够使一次预取带来较多的缓存命中,减少低层次存储的访问, 而空间局部性较差的缓存预取数据使预取机制得不到收益。为了使预取机 制发挥更大的作用,需要改善预取数据的空间局部性。

发明内容

因此,本发明的目的在于克服上述现有技术的缺陷,提供一种改善缓 存预取数据局部性的方法。

本发明的目的是通过以下技术方案实现的:

一方面,本发明提供了一种改善缓存预取数据局部性的方法,所述方 法包括:

统计缓存中每个预取数据记录集合的预取命中次数,所述预取命中次 数为该集合中被访问的数据记录的总数;

对于其预取命中次数小于设定的命中阈值的预取数据记录集合,在将 该集合换出缓存时,将该集合中被访问的数据记录写入到新的存储区域, 与该存储区域中的其他数据形成新的预取数据记录集合。

上述方法中,还可包括:

对于缓存中每个预取数据记录集合:

将该集合中首次被访问的数据记录标记为特殊记录;

计算该集合中当前被访问的数据记录与上次被访问的数据记录之间 的访问间隔,如果该访问间隔大于设定的间隔阈值,则将当前被访问的数 据记录标记为特殊记录;

对于其预取命中次数小于命中阈值的预取数据记录集合,在将该集合 换出缓存时,将被标记为特殊记录的数据记录的预取入口修改为所述新的 预取数据记录集合。

上述方法中,所述访问间隔可为时间间隔、访问次数间隔、自定义的 逻辑间隔或者上述间隔的组合。

上述方法中,还可包括对于其预取命中次数小于命中阈值的预取数据 记录集合,在将该集合换出缓存时,将该集合中被访问的数据记录预取入 口都修改为所述新的预取数据记录集合。

又一方面,本发明还提供了一种改善缓存预取数据局部性的系统,所 述系统包括:

用于统计缓存中每个预取数据记录集合的预取命中次数的装置,所述 预取命中次数为该集合中被访问的数据记录的总数;

用于对于其预取命中次数小于设定的命中阈值的预取数据记录集合, 在将该集合换出缓存时,将该集合中被访问的数据记录写入到新的存储区 域,与该存储区域中的其他数据形成新的预取数据记录集合的装置。

上述系统中,还可包括标记装置和修改装置,所述标记装置可用于对 于缓存中每个预取数据记录集合:

将该集合中首次被访问的数据记录标记为特殊记录;

计算该集合中当前被访问的数据记录与上次被访问的数据记录之间 的访问间隔,如果该访问间隔大于设定的间隔阈值,则将当前被访问的数 据记录标记为特殊记录;

所述修改装置可用于对于其预取命中次数小于命中阈值的预取数据 记录集合,在将该集合换出缓存时,将被标记为特殊记录的数据记录的预 取入口修改为所述新的预取数据记录集合。

在又一方面,本发明还提供了一种缓存访问方法,该方法包括:

对于待访问的数据记录,如果缓存命中,则将缓存中包含该待访问的 数据记录的预取数据记录集合的预取命中次数增加1;

如果缓存未命中且有空的缓存项,则将包含该待访问的数据记录的预 取数据记录集合预取到该缓存项中,并将该预取数据记录集合的预取命中 次数增加1;

如果缓存未命中且没有空的缓存项,则执行:

判断选定的缓存项中预取数据记录集合的预取命中次数是否小于设 定的命中阈值,如果小于,则将该集合中被访问的数据记录写入到新的存 储区域,与该存储区域中的其他数据形成新的预取数据记录集合;以及

将包含该待访问的数据记录的预取数据记录集合预取到该选定的缓 存项中,并将该预取数据记录集合的预取命中次数增加1。

上述缓存访问方法中,还可包括:

对于缓存中每个预取数据记录集合:

将该集合中首次被访问的数据记录标记为特殊记录;

计算该集合中当前被访问的数据记录与上次被访问的数据记录之间 的访问间隔,如果该访问间隔大于设定的间隔阈值,则将当前被访问的数 据记录标记为特殊记录;

在将其预取命中次数小于命中阈值的预取数据记录集合换出缓存时, 将被标记为特殊记录的数据记录的预取入口修改为所述新的预取数据记 录集合。

上述缓存访问方法中,还可包括在将其预取命中次数小于命中阈值的 预取数据记录集合换出缓存时,将该集合中被访问的数据记录预取入口都 修改为所述新的预取数据记录集合。

上述缓存访问方法,还可包括:

当所述新的预取数据记录集合中的数据记录个数达到设定的阈值时, 对于缓存中其预取命中次数小于设定的命中阈值的每个预取数据记录集 合,将该集合中被访问的数据记录写入到该新的预取数据记录集合中;

停止对该新的预取数据记录集合的写入,获取空闲的缓存空间用于存 储另一个新的预取数据记录集合。

与现有技术相比,本发明提供的改善缓存预取数据局部性的方法能有 效降低预取次数,提高缓存命中率。

附图说明

以下参照附图对本发明实施例作进一步说明,其中:

图1为根据本发明实施例的改善缓存预取数据局部性的方法的流程示 意图;

图2为根据本发明实施例的缓存访问方法的流程示意图。

具体实施方式

为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图 通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体 实施例仅仅用以解释本发明,并不用于限定本发明。

要改善缓存预取数据局部性需要解决两个问题:确定哪些缓存预取数 据的局部性较差,需要对其进行改善;以及如何改善这些缓存预取数据的 局部性。从某个预取数据记录集合(例如,Pi)被预取到缓存中,到其被换 出缓存之前,该集合中将会有若干个数据记录被访问,这些被访问的数据 记录的集合(例如,Hi:{pij1,...,pijm},)可称为此次预取的预取命中数据, 这些被访问的数据记录的个数(例如,m)可以被称为此次预取的预取命 中次数。例如,在将预取数据记录集合Pi预取到缓存中后,期望此次预取 的预取命中次数较快地超过一个阈值,如果未达到此要求,则说明预取Pi没 有发挥作用或者发挥了较少的作用,称此种情况为未达到预取效果,表明 此次预取数据内部的空间局部性较差,应当对这些预取数据进行适当的重 新布局从而改善局部性。

图1给出了根据本发明的一个实施例的改善缓存预取数据局部性的方 法的流程示意图。该方法统计缓存中每个预取数据记录集合的预取命中次 数,对于其预取命中次数小于设定的命中阈值的预取数据记录集合(例如 Pi),在将该集合换出缓存时,将该集合中被访问的数据记录(即预取命中 数据,例如Hi)冗余写入到新的存储区域,与该存储区域中的其他数据形 成新的预取数据记录集合(例如为P)。

其中,所述命中阈值可以根据实际系统环境或用户需求来进行设置, 可以为静态阈值,也可以是动态阈值,例如可以将命中阈值设定为某个预 定的整数值,也可以将命中阈值设置为预取数据记录集合中元素个数的百 分比,例如10%×|Pi|,20%×|Pi|,30%×|Pi|等。所述预取命中次数为该 集合中被访问的数据记录的总数。在其他实施例中,所述预取命中次数也 可以是对该预取数据记录集合的访问次数。通过上述方法被冗余写入到该 新的预取数据记录集合中的预取命中数据与该集合中其他数据记录形成 一批新的空间局部性较好的预取数据;该集合中的其他数据记录可以是通 过同样的方法写入的冗余数据,也可以是写入的新产生的数据记录,该集 合中可以存在重复的数据记录,也可以通过某种方法去除重复的数据记录。 在其他实施例中,可以同时存在一个或多个这样的新的预取数据记录集合。 当存在多个时,将所确定的要改善局部性的预取数据记录集合中被访问的 数据记录按照某种分类写入到其中一个集合中。另外,不限定所形成的新 的预取数据记录集合所在的存储介质,可以在写缓存中,也可以在其他层 次的存储介质中,还可以从写缓存转入到其他层次的存储介质中;当访问 存在多个副本的数据记录时优先从缓存中访问,如不在缓存中,则通过预 取方式进入到缓存中后访问。

在冗余写入这些预取命中数据(例如Hi)之后,同一条数据记录可能 存在于多个预取数据记录集合中,此时被冗余的预取命中数据中每一条数 据记录的预取入口有多种选择,可以不做更改(例如,仍然为Pi),也可 以定位到新的预取位置(例如P),还可以根据访问的情况做出选择,不同 的预取入口定位策略所适用的环境不同。在本发明的一个优选实施例中, 该方法还包括下列步骤:对于缓存中每个预取数据记录集合:将该集合中 首次被访问的数据记录标记为特殊记录;以及计算该集合中当前被访问的 数据记录与上次被访问的数据记录之间的访问间隔,如果该访问间隔大于 设定的间隔阈值,则将当前被访问的数据记录标记为特殊记录。这样,对 于其预取命中次数小于命中阈值的预取数据记录集合,在将该集合换出缓 存时,将该集合中被访问的数据记录冗余写入到新的存储区域,与该存储 区域中的其他数据形成新的预取数据记录集合,同时还可以将该集合中被 标记为特殊记录的数据记录的预取入口修改为所述新的预取数据记录集 合。其中,访问间隔可以是时间间隔、访问次数间隔以及自定义的某种逻 辑间隔中的一种,也可以是多种间隔类型组合(其中一种间隔过长即可标 记为特殊记录)。间隔阈值可以根据访问间隔的类型来设置。在其他实施 例中,也可以将进行上述冗余写入的所有数据记录的预取入口都修改为所 述新的预取数据记录集合。或者也可以全部不修改。

从上文所述可以看出,该改善缓存预取数据局部性的方法可以伴随缓 存访问和缓存替换过程而运行。在本发明的又一个实施例中,还提供了一 种结合上述改善缓存预取数据局部性方法的缓存访问方法。该缓存访问方 法执行过程如下:当访问某个数据记录(假设为pij)时,分三种情况进 行处理:(1)当访问未能在缓存中命中时(即该数据记录pij不在缓存中), 如果存在空的缓存项,例如缓存项Ck,则将pij所在预取数据记录集合 Pi:{pi1,...,pin}预取到缓存项Ck中,此时在预取完成后将pij加入到Hk中,递 增hk,并标记pij为特殊记录;其中,Hk是与缓存项Ck对应的记录预取命中 数据的集合,其数据结构可以例如为队列,位图等,hk用于记录预取命中 次数计数。如果没有空的缓存项,则执行缓存替换步骤(将在下文中介绍), 用Pi替换所选的缓存项Ck中的原有内容。(2)访问在缓存中命中(例如, Pi已经被预取到缓存项Ck中)且hk<Ti时,此时如果pij还未在Hk中,则将 其加入到Hk中,递增hk,并计算上次访问Pi中的元素和当前访问的间隔I, 如果I>TI,则标记pij为特殊记录;其中,Ti为命中阈值,TI为间隔阈值, 其可根据访问间隔类型来确定,两者可以是静态阈值,也可以是动态阈值。 (3)访问在缓存中命中且预取命中次数hk≥Ti时,此时递增hk。其中, 将pij加入到Hk中例如可以指将pij在缓存中的逻辑或物理指针保存到记录 Hk的数据结构中(加入之前判断pij是否已经Hk中存在,不存在时加入)。

当要将缓存项Ck的内容将要从Pi替换为Pl时(例如,要访问的数据记 录在Pl中,需要将Pl预取到缓存项Ck中),分两种情况处理:(1)如果hk<Ti, 则将Hk中的数据记录写入到冗余数据记录集合Pw中,同时更改Hk中标记为 特殊记录的预取入口为Pw,然后清空Hk并置hk为0;(2)如果hk≥Ti,则 清空Hk并置hk为0。其中,Pw的存储位置可以在缓存中(例如,写缓存), 也可以在其他层次的存储介质中,还可以从写缓存转入到其他层次的存储 介质中。Pw中除按上述方法冗余写入的数据记录外,还可以写入新产生的 数据记录;此时,冗余写入的数据记录可能存在两个副本(Pi和Pw中各一), 访问存在多个副本的数据记录时优先从缓存中访问,如不在缓存中,则通 过预取方式进入到缓存中后访问。当冗余数据记录集合Pw中的存储空间耗 尽或者其中的数据记录个数达到上限要求,此时扫描所有缓存项C1~Cn, 当扫描缓存项Ck(其中缓存集合为Pi)时,分两种情况处理:(1)如果hk<Ti, 则将Hk中的数据记录写入到Pw中,同时更改Hk中标记为特殊记录的预取入 口为Pw,最后清空Hk并置hk为0;(2)如果hk≥Ti,则不执行动作。然后, 停止向Pw中写入新的数据记录,继续获取空闲缓存存储空间使其成为新的 冗余数据记录集合Pw′

为更好地理解上述的缓存访问方法,参照图2对该缓存访问方法的执 行过程进行举例说明。在该示例中假设缓存项个数为4,所用缓存替换算 法为最近最少使用(LRU)算法,用j作为pij在缓存项Ck中的逻辑指针(通 过记录数字j即可实现将pij加入到集合Hk中),令命中阈值Ti=10%×|Pi|, 设定间隔阈值TI的值为4,可以写入的新的预取记录集合中记录个数上限 要求为10,该新的预取记录集合的存储空间位于写缓存中。初始状态时, 缓存全部为空,预取命中数据集合全部为空,预取命中次数为0。假设当 前系统中,已存在6个如表1所示预取数据记录集合P1-P6。表2给出了该 示例中要进行的访问序列1-20,其中访问序列1-7,12-20为读访问;访问 序列8-11为写访问。访问序列1表示读数据记录p1,2,访问序列8表示写 数据记录p7,1,以此类推。

表1

P1P2P3P4P5P6p1,1~p1,22p2,1~p2,18p3,1~p3,15p4,1~p4,12p5,1~p5,25p6,1~p6,21

表2

序号 1 2 3 4 5 6 7 8 9 10 类型 记录 p1,2p2,5p3,1p4,9p2,6p2,7p1,3p7,1p7,2p7,3序号 11 12 13 14 15 16 17 18 19 20 类型 记录 p7,4p5,10p5,11p5,10p1,2p6,3p1,4p3,2p3,11p4,12

继续参考图2,访问上述序列1-20的具体过程为:

1)执行步骤101,判断所访问数据p1,2是否在缓存中;

例如,缓存系统可通过查找操作确定所访问数据记录是否在缓存中。 如果p1,2不在缓存中,那么需要将p1,2所在的预取数据记录集合P1预期到缓 存中。假设系统选择将P1预期到缓存项C1中,转至步骤104继续执行。

2)执行步骤104,判断缓存项C1中是否为空;

也就是说,缓存系统在将P1预取到缓存项C1之前,要判断C1中是否有 数据。如果缓存项C1为空,则转到步骤110继续执行。

3)执行步骤110,将P1预取到缓存项C1中;

4)执行步骤111,将p1,2加入到C1的预取命中集合H1中;然后返回步骤 101,继续处理下一个访问序列。

具体地,在C1对应的预取命中数据集合H1中加入p1,2的逻辑指针2,标 记p1,2为特殊记录,递增预取命中次数h1

按照与过程1)~5)相同的方式,处理访问序列2~4,处理完毕后缓 存项中存储的预取数据记录集合,对应的预取命中数据集合,及对应预取 命中次数可如下表3所示(下划线表示特殊记录标记):

表3

缓存项 预取数据记录集合 预取命中数据集合 预取命中次数 C1P121 C2P251 C3P311 C4P491

参考图2以及表2所示的访问序列,下面继续处理访问序列5:

5)执行步骤101,判断p2,6是否在缓存中;这里p2,6已经在缓存中,则 转至步骤102继续执行。

6)执行步骤102,判断预取命中次数h2是否小于命中阈值;如果小于, 则转至步骤103继续执行,否则返回步骤101,处理下一个访问序列。

此时,h2此时为1,小于阈值T2=10%×|P2|=10%×18。

7)执行步骤103,将p2,6加入到C2的预取命中集合H2中;然后返回步骤 101,继续处理下一个访问序列。

在步骤103,还需要计算如上文所述的访问间隔I;这里与对C2的前一 次的访问间隔I为3,小于间隔阈值TI,因此在C2对应的预取命中数据集 合H2中记录p2,6的逻辑指针6,递增预取命中次数h2

按照与过程5)~7)相同的方式,继续处理访问序列6~7,不同的是, 对于访问序列6,在执行102时h2已经大于命中阈值T2,因此不需执行步 骤103;对于访问序列7,在执行103时,与对C1的前一次的访问间隔I 为6,大于间隔阈值TI,因此除将p1,3的逻辑指针3加入到H1中并递增h1以 外,还需要将其标记为特殊记录。

接着,继续处理访问序列8~11。对于写入序列8~11,缓存系统会生 成一个新的预取数据记录集合P7,将p7,1~p7,4写入到P7中(本示例中,假 设P7的存储位置在写缓存Pw中)。此时,各缓存项中存储的预取数据记录 集合,对应的预取命中数据集合,及对应的预取命中次数如下表4所示(下 划线表示特殊记录标记,连字符表示信息为空):

表4

接着处理访问序列12,即读数据记录p5,10

8)执行步骤101,判断p5,10是否在缓存中;这里p5,10不再缓存中,假 设系统选择p5,10所在的预取数据访问记录集合P5预取到缓存项C1中,接 着转至步骤104执行。

9)执行步骤104,判断缓存项C1是否为空;如果缓存项为空,则转至 步骤110;如果缓存项不为空,则需要将缓存项C1中的内容换出缓存,此 时转至步骤105继续执行。

10)执行步骤105,判断预取命中次数h1是否小于或等于命中阈值; 如果小于或等于命中阈值,则执行步骤106;如果大于命中阈值,则转至 步骤110继续执行。

具体地,此时h1为2,小于命中阈值T1=10%×|P1|=10%×22。这 说明此时C1中的预取数据访问记录集合P1中的数据局部性较差,需要进 行改善。反之,如果大于命中阈值,则说明不需要改善这部分数据的局部 性,即不需要对现在缓存项C1的数据进行额外处理,直接将P5换入到C1即可。

11)执行步骤106,将H1中的数据记录写入集合P7中;

具体地,从缓存项C1对应的预取命中数据集合H1中依次读出逻辑指针 2和3,并据此从C1中读出第2和第3个记录p1,2和p1,3,将其写入到P7中(成 为P7中的p7,5和p7,6),并更改p1,2和p1,3的预取入口为P7(本实施例将这些冗 余的数据记录和新产生的记录写入同一预取数据记录集合)。此时p1,2,p1,3和p7,5,p7,6互为副本,由于后者在写缓存Pw中而P1已经被换出缓存,所以 优先访问p7,5,p7,6

12)执行步骤107,清空预取命中集合H1,并置h1为0;

13)执行步骤108,判断写入集合P7是否已满;如果未满,则转至步 骤110继续执行;如果已满,则转至步骤109继续执行。

这里,P7中数据记录个数为4,小于10,未达到个数上限。

14)执行步骤110,将P5换入到缓存项C1中;

15)执行步骤111,将p5,10加入到C1的预取命中集合H1中;

按照与过程5)~7)相同的方式,处理访问序列13,14,不同的是,对 于访问序列14,执行步骤103过程中向H1中加入p5,10的逻辑指针10时, 发现该数字已经被记录(与序列12访问相同数据记录),因此,跳过步骤 103中其他操作。处理完成后,各缓存项中存储的预取数据记录集合,对 应的预取命中数据集合,及对应预取命中次数如下表5所示(下划线表示 特殊记录标记,连字符表示信息为空):

表5

对于访问序列15,由于p1,2和p1,3在P7中存在副本p7,5和p7,6(通过缓存 查找找到副本),因此访问会从P7中读取数据记录p7,5,p7,6,不执行其他操 作。

按照与过程8)~15)相同的方式,处理访问序列16~18,在处理过程 中,按照LRU缓存替换算法,P3,P4,P2先后被换出缓存,在此过程中将 p3,1,p4,9写入P7,由于p3,1,p4,9被标记为特殊记录其预取入口修改为P7,换 出P2时由于预取命中次数大于阈值T2,其中预取命中数据不写入P7

按照与过程5)~7)相同的方式,处理访问序列19,在处理过程中, p3,11在缓存项C2中命中,在C2对应的预取命中数据集合H2中加入p3,11的逻 辑指针11,递增预取命中次数h2

按照与过程8)~15)相同的方式,处理访问序列20,在处理过程中, 按照LRU缓存替换算法,P5被换出缓存,在此过程中将p5,10,p5,11写入P7, 由于p5,10被标记为特殊记录其预取入口修改为P7。不同的是,在执行步骤 108时,P7中的数据记录个数为10,达到了个数上限,需要执行步骤109, 具体地,扫描缓存项C1~C4,发现h1,h3,h4不满足阈值要求,因此将 p6,3,p1,4,p4,12写入P7(h2满足阈值要求,因此p3,2,p3,11不写入),由于 p6,3,p1,4,p4,12被标记为特殊记录,其预取入口修改为P7,最后清空C1,C3,C4对应的预取命中数据集合H,H3,H4,并置h1,h3,h4为0。步骤109执行完毕 之后,新的预取数据记录集合P7:{p7,1,...,p7,13}中包含13个数据记录,其 中四个为新写入记录,九个为副本记录。此时将停止对P7的写入操作, 当后续有新的数据产生或如上文所述需要冗余写入部分数据记录时,从新 空闲缓存存储空间分配新的存储区域,使其用于存储新的冗余数据记录集 合P8等。

处理完表2给出的所有访问序列之后,各缓存项中存储的预取数据记 录集合,对应的预取命中数据集合,及对应预取命中次数如下表6所示(下 划线表示特殊记录标记,连字符表示信息为空,在P7被换出写缓存之前将 其持久化到磁盘中):

表6

发明人还在内容寻找存储中的索引系统中,利用真实环境下的备份负 载对上述的方法进行了测试。测试结果表明,该方法减少了17.8%~56%的 索引预取次数,提升了8%~24%的读取带宽和2%~6%的写入带宽;在同样 的索引系统中,利用为期两周的数据同步负载的测试结果表明,预取次数 下降了96%。

虽然本发明已经通过优选实施例进行了描述,然而本发明并非局限于 这里所描述的实施例,在不脱离本发明范围的情况下还包括所作出的各种 改变以及变化。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号