一种基于增强时间局部性的热点数据识别方法技术领域
本发明涉及热点数据识别技术领域,具体涉及一种基于增强时间局部性的热点数
据识别方法。
背景技术
热点数据识别技术对现代计算机系统的优化非常重要。传统的热点数据识别算法
只简单地把访问次数最多的数据作为热点数据,其它的作为冷数据。这样的识别方法是很
模糊的,它只考虑了数据的访问次数。然而就识别热点数据而言这里还有一个很重要的因
素--时间。通常,很多场景下的访问模式都呈现出很高的时间局部性,因此,最近被访问过
的数据很有可能在不久的将来会被再次访问,这就是识别热点数据时需要考虑时间因素的
原因。
每个具体应用中热点数据识别方法会有不同,这些方法可以运用在不同的领域
中。但是,总的来说它们都是用来做数据caching的。通过预先把这些热点数据缓存到内存
中,可以显著地提高系统的性能。闪存中针对垃圾回收机制和磨损均衡来采用热点数据识
别算法,通过把热点数据回收并存放到相同的块中,可以提高垃圾回收机制的效率,这也降
低了垃圾回收机制的运行时开销,不仅这样,还可以通过把回收到的热点数据放到擦除次
数比较低的闪存块中来提高闪存系统的可靠性。混合固态硬盘,例如SLC-MLC hybrid和
Flash-PCM hybrid是对热点数据识别技术的另外一种应用。可以把热点数据存储到SLC
(Single-Level Cell)或者PCM(Phase Change Memory)中,把冷数据存储到MLC(Multi-
Level Cell)or NAND flash中,这样就可以提高SSD的性能和可靠性。除了以上这些应用之
外,热点数据识别技术还在很多领域都具有被利用的潜质。
发明内容
本发明的目的是为了解决现有技术中的上述缺陷,提供一种基于增强时间局部性
的热点数据识别方法,该方法可以保证在有限的存储开销和较低的运行时开销的条件下准
确高效地捕捉数据的访问模式,通过特殊的数据结构以及优化过的算法过程有效地反映出
数据访问的时间局部性,对过去频繁访问以及最近频繁访问的数据能区别对待,增强时间
局部性的准确度。通过识别出热点数据,并对其进行缓存,有效提高系统整体性能。
本发明的目的可以通过采取如下技术方案达到:
一种基于增强时间局部性的热点数据识别方法,所述方法包括下列步骤:
R1、初始化HotList队列和CandidateList队列,其中,所述HotList队列和所述
CandidateList队列为LRU(Least recently used,最近最少使用)队列,队列中的每个节点
采用数据用长度为D的D-bit counter计数器和长度为1的recency-bit配合的数据结构,其
中,所述D-bit counter计数器用于记录数据的访问频度信息,存储范围为0到2D-1,所述
recency-bit用于标识节点关联的数据最近是否被访问过,初始时所有节点的counter为0,
recency-bit为0,当节点所关联的数据被访问时,则根据其节点的recency-bit状态来增加
其counter;
R2、将被访问的数据用长度为D的D-bit counter计数器和长度为1的recency-bit
配合的数据结构进行记录,并将经过概率筛选机制筛选的数据插入到队列中;
R3、根据所述recency-bit的状态更新所述D-bit counter的值;
R4、根据所述D-bit counter的值决定数据放置在所述HotList队列还是所述
CandidateList队列中,并把放置在所述HotList队列中的数据置为热数据;
R5、周期性地运行信息更新机制;
R6、当所述所述HotList队列或者所述CandidateList队列中任一队列因容量不足
而需要筛选一个节点离开时,运行筛选机制,根据各节点recency-bit的状态以及D-bit
counter的值来进行筛选。
双队列结构。使用HotList队列和CandidateList队列的双队列结构来保存热点数
据和候选热点数据的热度值信息,只有进入到HotList队列中的数据才被判定为热点数据,
并被系统缓存。所有离开HotList队列的数据都将加入到CandidateList队列,并被判定为
冷数据。离开CandidateList队列的数据不再跟踪它的访问模式,这种双队列结构使得系统
只需要保存部分数据集的访问信息,从而有效地降低了存储开销,同时这里只需要维护部
分数据集的信息,在查找,判定和信息更新等方面也有效降低了运行时开销。队列中的每个
节点包含一个叫做recency-bit的位和一个长度为D的counter计数器用以捕获数据访问模
式的访问频度和高精度的时间局部性信息。
其中,D-bit counter计数器和recency-bit数据结构设计如下:
D-bit counter计数器是用来记录数据的访问热度值信息的,长度为D,存储范围
为0到2D-1。而recency-bit则用来标识节点关联的数据最近是否被访问过,长度为1,当
recency-bit为1时表示数据最近被访问过,recency-bit为0时表示数据最近没被访问过,
算法可根据recency-bit的值进行信息更新。
进一步地,当新数据访问请求到达时,通过概率筛选机制进行筛选决定是否加入
到CandidateList队列,若新数据进入加入所述CandidateList队列,则把其对应节点的D-
bit counter和recency-bit置1。
进一步地,所述信息更新机制具体为:
当节点所关联的数据被访问时,则根据其节点的recency-bit状态来增加其
counter,若recency-bit为0,表示所关联的数据在之前较长一段时间内没被访问过,为其
counter递增1,同时将其recency-bit置1,表示其刚刚被访问过;若recency-bit为1,则所
关联的数据肯定是一个刚刚被访问过的数据,为其counter递增2。
初始时所有节点的counter为0,recency bit为0,当节点所关联的数据被访问时,
则根据其节点的recency-bit状态来增加其counter。若recency-bit为0,表示所关联的数
据在之前较长一段时间内没被访问过,为其counter递增1,同时将其recency-bit置1,表示
其刚刚被访问过。若recency-bit为1,则所关联的数据肯定是一个刚刚被访问过的数据,为
其counter递增2。如果counter的值超过了2D-1,就得不到其精确的访问频度,然而在热点
数据识别算法中,只需要简单地知道其counter是否超过某个给定的阈值。这使得本发明可
以用较低的存储开销就获得较高的识别准确率。
如果一个热点数据识别算法仅仅考虑数据的访问次数,它只能得到一个很粗糙的
识别准确度。在本发明中,D-bit counters并不是简单地存储数据的访问次数,其代表的是
数据的一个热度值。即使两个数据访问的总次数相等,一个是集中在过去访问的,另一个是
集中在最近访问的,那么它们将会得到不同的热度值。同时,考虑在一段时期内被连续访问
的数据比离散访问的数据更具有被缓存的价值,在本发明提出的算法中,它们也将得到不
同的热度值。例如一个数据在过去的一段短时间内被多次访问,相信这个数据很有可能是
一个潜在的热点数据,由于recency-bit被置1,其counter将会得到一个较大的热度值。相
反,如果一个数据在很长一段时间内只被访问过少数几次,那么认为它没有被缓存的价值,
由于算法中存在一个衰减机制(Decay period),其counter不仅没有随着访问次数的增加
而增加,反而随着时间推移变得越来越少。
进一步地,所述筛选机制具体为:
在recency-bit为0的节点中寻找counter值最少的节点作为筛选的节点;
若没有符合上述步骤条件中的节点,则在recency-bit为1的节点中寻找counter
值最少的节点作为筛选节点。
进一步地,所述概率筛选机制中在新数据通过概率筛选加入所述CandidateList
队列的概率不低于50%。
若新访问的数据不在任一队列中,则需要进行一个概率筛选,这里所用的概率筛
选只是简单地使数据有一定概率通过此筛选,目的是使队列不会太经常变动。例如采用
50%的通过几率来进行筛选。这样的筛选不会妨碍经常访问的数据晋升到CandidateList
队列的机会,因为经常被访问的数据,它通过筛选的几率也会比其它数据要大。当新的数据
通过概率筛选后,会加入到CandidateList队列,此时若CandidateList队列没有空位,则要
筛选一个节点离开。
进一步地,所述热点数据识别方法还包括衰减机制,通过所述衰减机制定期将所
述D-bit counter计数器的值减去一半,使得数据的访问频度信息随着时间的推移得到更
新。
每个热点数据识别算法都需要一个衰减机制来更新数据的访问频度信息。就像
multiple hash function算法一样,本发明的衰减机制也是定期地把counter的值减去一
半,这样就可以使得数据的访问频度信息随着时间的推移得到更新。因此,即使一个数据过
去被连续频繁地访问,只要它之后不再被频繁访问了,它最终也会成为一个冷数据,最后通
过筛选机制被踢出热点数据队列。
进一步地,所述筛选机制具体如下:
记录数据访问信息的结构中包括1位的recency bit和4位的counter,而recency
bit把队列Lx(x∈{0,1},L0表示HotList队列,L1表示CandidateList队列)中的数据分为两
个集合S1和S0(其中S1,且S1∪S0=Lx),S1代表recency bit为1的数据集合,即
最近被访问过的数据,S0代表较久未被访问过的数据,当Lx中的节点已经存满又有新数据
需要加入到队列中时,就需要进行一次筛选,整个筛选可以分为两个部分,先在recency
bit为0的节点中,选出counter最少的数据刷掉,即若则在集合S0中选出counter最
少的数据s即若无recency bit为0的
节点,则再在recency bit为1的节点中筛选。即则在集合S1中选出counter最少的数
据s,
进一步地,若数据的访问请求命中了所述CandidateList队列,将其访问信息更新
后其热度值超过了某个预定的阈值后,将其节点提升到所述HotList队列。
进一步地,算法运行过程中,当有新节点加入到某一队列时,将同一队列的其它节
点的recency-bit置0,从HotList队列中被筛选出来的数据都将被放入CandidateList队列
中并将其counter减去一半,若CandidateList队列不够位置存储被筛选出来的节点,则用
相同的方法来筛选腾出空位。
进一步地,所述筛选机制的优化机制具体为:
在recency-bit为0的节点中寻找counter值低于指定阈值的第一个节点近似作热
度值最低的筛选节点;
若没有符合上述步骤条件中的节点,则在recency-bit为1的节点中寻找counter
值低于指定阈值的第一个节点近似作热度值最低的筛选节点。
在筛选时并不一定要筛选出真正热度值最少的节点,只要找到低于某个阈值的节
点,就可以停止遍历了。例如在HotList队列中,找到一个热度值低于HotThreshold的节点
就可以停止遍历,在CandidateList中,找到热度值低于1的节点也可以停止遍历。最坏的情
况,若遍历完整个队列也没有符合优化条件的节点,因为此时已经得到整个队列中热度值
最少的节点,就可以直接将这个节点剔除掉。因为关心的是热度值高的节点,所以,这个对
筛选的简单优化并不会对算法的热点数据识别准确度有太大的影响。
算法在新访问到达时,采用了概率筛选的方式,提前将部分冷数据筛选走,进一步
降低冷热点数据转换时带来的读写闪存开销。
本发明相对于现有技术具有如下的优点及效果:
(1)本发明不需要记录下所有数据访问的记录,作为替代,本发明热点数据识别方
法采用了双队列的结构,只记录热点数据和有可能成为热点数据的数据访问信息,本发明
方法并不需要记录所有数据的访问信息,只关心热点数据和候选的热点数据的访问信息来
分辨出热点数据和冷数据,该双队列的结构使得算法具有较低的存储开销。
(2)本发明中的D-bit counter和recency-bit的组合可以精确地扑捉到数据访问
模式中的频度信息,信息更新机制对离散访问和连续访问的数据做出区别对待,并且充分
地利用了其访问模式中时间局部性,该发明中热点数据识别方法采用D-bit counter和
recency-bit的组合以及相适应的筛选机制使得算法具有较高的准确度。
(3)本发明中的概率筛选从早期开始就把部分冷数据筛选走,筛选优化机制利用
最简单的方法降低了运行时开销,使得算法在不降低识别准确度的前提下具有较低的运行
时开销。
附图说明
图1是基于增强时间局部性的热点数据识别的闪存存储系统结构示意图;
图2是基于增强时间局部性的热点数据识别方法的基本原理图;
图3是基于增强时间局部性的热点数据识别方法的工作流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例
中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是
本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员
在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例
热点数据识别对于现代计算机系统的优化非常重要。例如,热点数据识别可以用
于延长闪存的使用寿命。然而,在热点数据识别的研究领域存在着一个很大的挑战,如何在
低存储开销和低运行时开销的条件下高效准确地识别热点数据。本发明通过利用数据访问
模式中的时间局部性原理来实现高效地识别热点数据。它只需要维护一个热点数据队列和
一个候选热点数据队列来记录数据的访问模式,这种双队列的设计使得系统只需要保存部
分数据集的访问信息,从而有效地降低了存储开销。另外,本发明采用一个叫做recency
bit的位,和D-bit counter计数器来反映出热点数据访问模式中最近和频繁这两个特性,
信息更新机制对离散访问和连续访问的数据赋予不同的热度值,这样就可以更加准确地反
映出数据项的访问模式,从而提高热点数据的识别率。本发明还采取了一个叫概率筛选的
机制,这机制可以在算法的早期就把一些冷数据提早筛选走,在进行筛选时采用了简单的
筛选优化,这些都降低了算法的运行时开销。
基于增强时间局部性的热点数据识别的闪存存储系统整体架构图如图1所示。整
体工作流程图如图2所示。图1描述了一个典型的基于闪存的存储系统的系统架构。本发明
主要运用于系统中的Hot Data Identifier模块,提供热点数据识别的功能。在这个存储系
统中,存储技术设备(MTD)和FLASH转换层(FTL)是闪存体系结构的两个主要组成部分。MTD
提供读、写和擦除等一些主要的闪存操作。而FTL则主要负责把逻辑块地址(LBA)转换为物
理块地址,FTL的这种地址转换使得用户几乎不需要对系统做任何的修改就可以像使用传
统的文件系统一样来使用闪存。一个典型的FTL主要是由一个地址分配器(address
allocator)和一个垃圾回收器(cleaner)组成。地址转换器负责地址转换的相关工作,而垃
圾回收器则会把那些充满无效数据页(page)的区块(block)回收,为将来的重复利用做准
备。这种垃圾回收机制是以区块为单位的,所以,在选中的回收区块中的所有有效数据页都
得复制到其他空闲的空间,以便整个区块执行擦除操作。在闪存中的另一个很重要的问题
就是磨损均衡,磨损均衡的一个目的是避免一些冷数据在某些区块中滞留过长的时间,它
的主要目标是使各个块中的擦除操作次数尽量平均分布,以此来使整个闪存的使用寿命最
大化。
基于增强时间局部性的热点数据识别方法的基本原理及流程如图2、图3所示,本
发明中基于增强时间局部性的热点数据识别方法采用一个双队列的结构来记录数据的访
问模式。
(1)HotList队列记录系统目前的热点数据,当数据进入HotList队列时,成为热点
数据,在缓存管理时应该被保留下来,当数据离开HotLis队列t时,成为冷数据,在缓存管理
时可以被写回闪存中。CandidateList队列负责记录最近被访问的候选热点数据。这种双队
列的结构,将大部分的数据热度值扰动控制在了CandidateList队列中,避免了不必要的冷
热点数据转换。
(2)队列中的每个节点包含一个叫做recency-bit的位和一个长度为D的位
counter计数器用以捕获数据访问模式的访问频度和高精度的时间局部性信息。counter计
数器是用来记录数据的访问频度信息的,存储范围为0到2D-1,而recency-bit则用来标识
节点关联的数据最近是否被访问过。初始时所有节点的counter为0,recency-bit为0,当节
点所关联的数据被访问时,则根据其节点的recency-bit状态来增加其counter。若
recency-bit为0,表示所关联的数据在之前较长一段时间内没被访问过,为其counter递增
1,同时将其recency-bit置1,表示其刚刚被访问过。若recency-bit为1,则所关联的数据肯
定是一个刚刚被访问过的数据,为其counter递增2。如果counter的值超过了2D-1,就得不
到其精确的访问频度,然而在热点数据识别算法中,只需要简单地知道其counter是否超过
某个给定的阈值。这使得本算法可以用较低的存储开销就获得较高的识别准确率。
(3)开始时,两条队列都是空的,所有的数据都属于冷数据,当有数据访问请求到
达时,先检查该数据是否已经在两条队列中。
(4)若数据不在任何一个队列中,则进行一个概率筛选,新的节点如果通过了概率
筛选机制则加入到CandidateList队列中。这里所用的概率筛选只是简单地使数据有一定
概率通过此筛选,目的是使队列不会太经常变动。例如采用50%的通过几率来进行筛选。这
样的筛选不会妨碍经常访问的数据晋升到CandidateList队列的机会,因为经常被访问的
数据,它通过筛选的几率也会比其它数据要大。
(5)此时若CandidateList队列已满,根据筛选机制选择要剔除的节点。记录数据
访问信息的结构中包括1位的recency bit和4位的counter,而recency bit把队列Lx(x∈
{0,1},L0表示HotList,L1表示CandidateList)中的数据分为两个集合S1和S0(其中S1,
且S1∪S0=Lx),S1代表recency bit为1的数据集合,即最近被访问过的数据,S0
代表较久未被访问过的数据。当Lx中的节点已经存满又有新数据需要加入到队列中时,就
需要进行一次筛选。整个筛选可以分为两个部分,先在recency bit为0的节点中,选出
counter最少的数据刷掉。即若则在集合S0中选出counter最少的数据s即
若无recency bit为0的节点,则再在
recency bit为1的节点中筛选。即则在集合S1中选出counter最少的数据s,
在每次筛选过程后,把除了新加入的节
点外的其它节点的recency bit置0。在筛选时并不一定要筛选出真正热度值最少的节点,
只要找到低于某个阈值的节点,就可以停止遍历了。最坏的情况,若遍历完整个队列也没有
符合优化条件的节点,因为此时已经得到整个队列中热度值最少的节点,就可以直接将这
个节点剔除掉。因为关心的是热度值高的节点,所以,这个对筛选的简单优化并不会对算法
的热点数据识别准确度有太大的影响。
(6)若第(3)步中数据已经在其中一条队列中,则根据节点的recency-bit来更新
其热度值,导致其在队列中的逻辑位置变化。若recency-bit为0,表示所关联的数据在之前
较长一段时间内没被访问过,为其counter递增1,同时将其recency-bit置1,表示其刚刚被
访问过。若recency-bit为1,则所关联的数据肯定是一个刚刚被访问过的数据,为其
counter递增2。如果counter的值超过了2D-1,就得不到其精确的访问频度,然而在热点数
据识别算法中,只需要简单地知道其counter是否超过某个给定的阈值。这使得本发明可以
用较低的存储开销就获得较高的识别准确率。
(7)此时若数据在CandidateList队列且其counter已经大于某个阀值
(HotThreshold),则此数据提升为热点数据,将此数据所关联的节点移至HotList队列中。
(8)此时若HotList队列已满,根据筛选机制选择要剔除的节点,并将该节点插入
到CandidateList队列尾部。从HotList队列中被刷出来的数据将其counter减去一半。
(9)运行衰减机制,这里的衰减机制定期地把counter的值减去一半,这样就可以
使得数据的访问频度信息随着时间的推移得到更新。因此,即使一个数据过去被连续频繁
地访问,只要它之后不再被频繁访问了,它最终也会成为一个冷数据,最后通过筛选机制被
踢出热点数据队列。
综上所述,本发明热点数据识别方法采用了双队列的结构,只记录热点数据和有
可能成为热点数据的数据访问信息,本发明方法并不需要记录所有数据的访问信息,只关
心热点数据和候选的热点数据的访问信息来分辨出热点数据和冷数据,该双队列的结构使
得算法具有较低的存储开销。本发明中的D-bit counter和recency-bit的组合可以精确地
扑捉到数据访问模式中的频度信息,信息更新机制对离散访问和连续访问的数据做出区别
对待,并且充分地利用了其访问模式中时间局部性,具有较高的准确度。本发明中的概率筛
选从早期开始就把部分冷数据筛选走,筛选优化机制利用最简单的方法降低了运行时开
销,使得算法在不降低识别准确度的前提下具有较低的运行时开销。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的
限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,
均应为等效的置换方式,都包含在本发明的保护范围之内。