[0047] 为了使本领域技术人员更好地理解本发明的技术方案,下面将结合附图以及具体的实施方式,对本发明进行详细地介绍说明。
[0048] 本发明提出的固态硬盘页级缓存区管理方法,将缓存区划分为三个部分:哈希索引表缓存区(Hash-List),脏页缓存区(Dirty-List)和干净页缓存区(Clean-List)。
[0049] Hash-List用于记录不同数据页访问的历史特性。每个数据页的哈希索引值X由其对应的逻辑页地址(Logical Page Address Number,LPN)代入给定的哈希函数计算得到。利用该索引值X实现对哈希索引表的查询,更新和重置。如图1所示,本发明所述Hash-List具体包括数据页的访问次数count,最后访问时间t_update,以及该数据页在缓存区中的状态Buf_State。
[0050] Dirty-List用于缓存热的修改过的数据页(脏页),该缓存区的数据页按照LRU原则进行队列管理。Clean-List用来缓存仅被读过的热的数据页(干净页),该缓存区同样利用LRU队列管理数据页,但发生更新的数据页将被移入脏页缓存区。脏页缓存区和干净页缓存区的队列结构如图2所示,两者缓存队列的大小会受自适应置换机制的控制动态调整。
[0051] 本发明提出的管理方法中所述的热数据识别机制如图3所示,读取待判断数据页对应哈希表中的记录,对其进行初步的冷热判断;再通过读取该数据页前后K个数据页的哈希表项的记录信息,结合这些相邻数据页的状态对该数据页识别的结果进行纠正,提高识别精度,只有识别为热的请求数据页才能进入缓存区。其数据识别流程如下:
[0052] S31,查询该请求数据页对应哈希表是否记录了有效信息,若不存在则执行步骤S32,反之则执行步骤S33;
[0053] S32,该请求判定为初次访问的数据,若为写请求则判定为热数据页,若为读请求则判定为冷数据页,然后结束冷热判断;
[0054] S33,读取该数据页对应的哈希表项中记录的访问次数count,最后访问时间t_update,系统操作时间t_sys,利用下面公式计算该数据页的访问热度Hp;
[0055]
[0056] S34,将访问热度值Hp与预设的热度阈值H_th1进行比较,若Hp>H_th1,则判定该请求为热数据页,并结束冷热判断;反之,执行步骤S35;
[0057] S35,读取该数据页逻辑地址页前后K个数据页的哈希表项的记录信息,统计K个数据页在哈希表中的数量N,以及这N个数据页在缓存区的状态buf_State为1的项数为M;比较M/N与预设阈值H_th2,若M/N>H_th2,则判定该数据页为热,反之判定为冷;然后结束冷热判断。
[0058] 本发明提出的管理方法中所述的自适应选择剔除机制如图4所示,该机制包含两种处理流程,一个为阈值Tau(目标干净页队列长度)更新流程,一个为选择剔除流程。
[0059] 在阈值Tau更新流程中,所述更新目标干净页队列长度Tau的计算公式为:
[0060]
[0061] 上述公式中,Tau’为更新前的目标干净页队列长度,Tau的初始值设为缓存区实际能存储的队列长度的一半;CL、DL为当前干净页、脏页队列的实际长度;Cr、Cw是归一化的闪存读、写代价,具体如下:
[0062]
[0063] ReadDelay和WriteDelay为实际的闪存读、写延迟。
[0064] 在剔除流程中,缓冲区通过比较当前干净页队列长度CL和当前目标干净页长度Tau选择合适的剔除对象。若CL>Tau,则选择干净页缓存队列LRU位置的数据页进行剔除,反之选择脏页缓存队列LRU位置的数据页进行剔除。
[0065] 本发明的提出的管理方法的实施流程图如图5所示,包含如下步骤:
[0066] S1,当访问请求到来时,查看请求数据页是否在脏页缓存区或干净页缓存区命中,若是,则执行S2,若否,则执行S3。具体来说,当一个访问请求到达需要处理的时候,需要遍历脏页和干净页缓存队列,查看请求数据页是否在缓冲区中。
[0067] S2,响应请求进行相应的数据页命中迁移,并根据命中数据页所在的缓存队列位置和请求类型,启动自适应阈值调整机制,更新目标干净页队列长度Tau;然后将当前的请求逻辑页地址代入哈希函数计算得到哈希索引值,更新该哈希索引值对应表项中记录的信息,包括:更新对应表项中记录的Count=Count+1,最后访问时间更新为当前系统操作时间t_sys,即t_update=t_sys,Buf_State=1,之后执行S8。
[0068] S3,启动热数据识别机制,查询请求数据页对应的哈希索引表中的信息,对访问的数据页进行冷热识别;若识别为热数据页,则执行S4,若识别为冷数据页,则执行S5。
[0069] S4,判定当前缓冲区是否满,若满,则执行S6,若否,则执行S7。
[0070] S5,将请求直接交由底层闪存进行响应处理,将当前的请求逻辑页地址代入哈希函数计算得到哈希索引值,更新该哈希索引值对应表中记录位的信息,之后跳转执行S8。
[0071] S6,启动自适应选择剔除机制,比较当前干净页队列长度CL与目标干净页队列长度Tau的大小,选择相应缓存队列LRU位置的数据页进行剔除,同时将剔除的请求逻辑页地址代入哈希函数计算得到哈希索引值,初始化对应表项中记录信息;之后跳转执行S7。
[0072] S7,将缺失的数据页加载入缓冲区相应的缓存队列并响应请求,同时将当前的请求逻辑页地址代入哈希函数计算得到哈希索引值,更新对应表项中记录的Count=1,最后访问时间更新为当前系统操作时间t_sys,即t_update=t_sys,Buf_State=1,之后执行S8。
[0073] S8,将当前的系统操作时间t_sys加1,并对t_sys进行模T(T为预设的半衰期)运算,若余数不为0,则执行S9,否则,结束本次请求的处理。
[0074] S9,判断系统操作时间t_sys与哈希索引表中记录的每个数据页的最后更新时间t_update的差是否超过T,若超过,若超过,则将该数据页在哈希表中记录的访问次数除2取整,之后结束本次请求的处理。
[0075] 为了进一步对上述实施流程进行说明,本发明结合一个实际写请求处理流程进行说明,该流程如图6所示:
[0076] S10,当一个写请求(请求访问数据,LPN=10)到来时,遍历缓冲区后未匹配到请求的数据页,则执行S11;
[0077] S11,通过对请求逻辑地址进行哈希计算,找到请求页对应的哈希表,计算其热度值 (当前的系统时间为9,热度阈值H_th1=0.5),则初步判断请求为冷,执行S12;
[0078] S12,遍历该请求页(LPN=10)前后K(K=4)个相邻地址数据页(LPN=8,9,11,12)的状态,发现存在有效哈希表的记录个数M=4,在缓冲区的项数N=4, (热度阈值H_th2=0.5),纠正该数据页判断为热,执行S13;
[0079] S13,此时缓冲区满(Buf_Size=9,Tau=5),根据比较干净页缓存队列和目标队列的大小,选择脏页LRU位置的(LPN=9)的数据页剔除,执行S14;
[0080] S14,将数据页(LPN=9)剔除时,更新其哈希表对应的信息,将其Buf_State置为0,执行S15;
[0081] S15,根据请求类型,将请求的数据页(LPN=10)加入到脏页缓存队列的MRU位置,执行S16;
[0082] S16,更新请求页对应的哈希表中的信息,将Buf_State置为1,t_update更新为当前系统时间,访问次数Count加1。单次请求处理结束。
[0083] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。