[0047] 为了使本领域技术人员能更好地理解本发明的技术方案,下面将结合附图以及具体实施方式,对本发明进行详细的介绍说明。
[0048] 由于NAND闪存不能原地更新,写访问请求会导致映射信息的改变,频繁的映射信息更新,会导致闪存翻译块的磨损次数增加,写放大系数变大,从而造成固态硬盘性能下降。因此,本发明在进行闪存转换层设计时,重点优化了写映射项的更新方式。
[0049] 本发明提出的固态硬盘页级闪存转换层设计,其将映射缓存区划分成三个部分:写映射缓存区(W‑CMT)、读映射缓存区(R‑CMT)、全局翻译目录(GTD)。
[0050] W‑CMT是用来缓存高频访问的写映射信息。当有写请求到达时,如果在缓存区中存在对应的映射信息,无论在W‑CMT还是R‑CMT命中,都将迁移到W‑CMT的MRU(最近使用)位置。W‑CMT为每个映射项记录逻辑页号(LPN)、物理页号(PPN)和更新标志(Update_flag)3个信息,如图1所示。若未能在缓存区中找到对应的映射信息,则通过GTD将映射信息加载到W‑CMT。当W‑CMT满时,如图3所示,通过干净项优先剔除的最近最少使用(CFLRU)管理策略,受害项优先从置换区内的干净映射项中进行选择,当优先置换区不存在干净项时,则选取LRU位置的映射信息进行剔除,并同时将与受害项在同一翻译页内的其他映射项一同回写。
[0051] R‑CMT是用来缓存高频访问的读映射信息。R‑CMT为每个映射项记录LPN和PPN。当读访问请求的映射信息不在映射缓存中时,且请求大小小于预取大小时,则通过提前预取一部分请求后续的映射信息,以提高R‑CMT的命中率,减少多次通过GTD读闪存映射页所带来的延迟。由于R‑CMT缓存的映射信息都是读访问请求,并且在R‑CMT中命中的写访问请求都迁移到了W‑CMT中。所以R‑CMT中不存在发生过变更的映射信息,即R‑CMT中的映射信息都是干净的,所以在R‑CMT满时,只需按照LRU队列管理策略,将LRU位置的映射信息剔除。
[0052] GTD是用来缓存虚拟翻译页号与物理翻译页号的映射信息。每一个访问请求都有一个逻辑页号,通过对逻辑页号进行运算,可以获得该逻辑页号对应的虚拟翻译页号(其中MVPN表示虚拟翻译页号,MP表示每个翻译页中的映射项数目,代表下取整)。通过GTD中虚拟翻译页号与物理翻译页号的映射,查找对应的物理翻译页。在物理翻译页中,根据页偏移量,获得该逻辑页号所对应的物理页号。从而实现从NAND闪存中读取逻辑页映射信息。
[0053] 本发明方法的实现流程如图2所示:
[0054] 步骤1、当访问请求到达,首先判断请求是否在W‑CMT命中:若请求在W‑CMT命中,执行步骤2;否则执行步骤4。
[0055] 步骤2、将映射信息迁移至W‑CMT的MRU(最近最多使用)位置。
[0056] 步骤3、判断访问请求类型:若访问请求类型是写请求,则执行步骤15;否则执行步骤18。
[0057] 步骤4、判断请求是否在R‑CMT命中:若请求在R‑CMT命中,执行步骤5;否则执行步骤8。
[0058] 步骤5、判断访问请求类型:若访问请求类型是写请求,则执行步骤6;否则执行步骤7。
[0059] 步骤6、判断W‑CMT的是否有空闲,如无空闲,则执行W‑CMT剔除操作;然后将映射信息从R‑CMT迁移至W‑CMT的MRU位置,然后执行步骤15。
[0060] 步骤7、将映射信息迁移至R‑CMT的MRU位置,然后执行步骤18。
[0061] 步骤8、判断访问请求类型:若是访问请求类型是写请求,则执行步骤9;否则执行步骤11。
[0062] 步骤9、判断W‑CMT的空闲大小是否大于访问请求大小,若小于,则执行W‑CMT剔除操作,直到W‑CMT能够容纳请求大小个映射信息,然后执行步骤10;否则直接执行步骤10。
[0063] 步骤10、通过GTD,将请求大小个映射信息一同加载到W‑CMT的MRU位置,然后执行步骤15。
[0064] 步骤11、判断R‑CMT的空闲大小是否大于访问请求大小和预取大小,若小于,则执行R‑CMT剔除操作直到R‑CMT的空闲大小大于请求大小和预取大小,然后执行步骤12;否则直接执行步骤13。
[0065] 步骤12、判断访问请求大小是否大于预取大小:若大于,则执行步骤13;否则,执行步骤14。
[0066] 步骤13、通过GTD,将访问请求大小个映射信息一同加载到R‑CMT的MRU位置,然后执行步骤18。
[0067] 步骤14、通过GTD,将预取大小个映射信息一同加载到R‑CMT的MRU位置,然后执行步骤18。
[0068] 步骤15、为用户数据分配新的空闲物理数据页,然后执行步骤16。
[0069] 步骤16、依据原数据页与新分配数据页,响应写访问请求,然后执行步骤17。
[0070] 步骤17、更新W‑CMT中的映射信息,即将更新标志位,置为脏(Update_flag=1),物理页号置为步骤15分配的物理页号,结束操作。
[0071] 步骤18、依据映射信息,响应读访问请求。结束操作。
[0072] 本发明中所述的W‑CMT数据剔除流程如图4所示,通过剔除最近最少使用的映射信息以提供写入最访问的中映射信息的空间。通过剔除优先置换区的干净映射信息,以减少不必要的翻译页回写次数。并且由于一个翻译页储存512项甚至更多的映射信息,因此在不得已必须剔除脏映射信息时,通过将同属于某个翻译页的映射信息一同聚簇回写,可以极大程度上减少了翻译页的回写次数,提升整体系统性能和闪存的使用寿命。
[0073] 步骤9所述的W‑CMT的剔除操作过程如下:
[0074] S91,在W‑CMT的优先置换区从后往前查找是否有干净映射项(Update_flag=0):若有则执行S97;否则执行S92。
[0075] S92,选择W‑CMT中LRU位置的映射项作为受害项。
[0076] S93,判断翻译块区域闪存空间是否满:若满,执行垃圾回收操作,然后执行S94;否则直接执行S94。
[0077] S94,分配新的空闲翻译页。然后执行S95。
[0078] S95,将受害项、同翻译页下的其它映射项、以及原翻译页中的其它有效映射项一同写入到新分配的空闲翻译页中,并更新GTD,同时置原翻译页无效。然后执行S96。
[0079] S96,将W‑CMT中的LRU位置的映射项剔除,并将同翻译页中的映射项置为干净(Update_flag=0),然后执行S98。
[0080] S97,将查找到的干净页映射项删除后执行S98。
[0081] S98,结束本次W‑CMT的剔除操作。
[0082] 下面结合具体的几组实际请求,对本发明的闪存转换层设计的处理流程进行进一步说明,在实例中,假设数据块大小为4个数据页,一个翻译页储存512个映射项(即MP=512)。
[0083] 实施例1:写请求不在W‑CMT、R‑CMT命中。
[0084] 假设映射缓冲区初始状态如图5中“初始状态”所示,现有一个“访问数据页LPN=1280,写访问请求,请求大小为1”的请求到达,其处理过程如下所示:
[0085] C1,当一个访问请求到来时(LPN=1280),先查询W‑CMT,在W‑CMT中未查询到请求映射项,然后在R‑CMT中查询,同样未查询到请求映射项。此时,需要将访问请求的映射信息加载到W‑CMT中。
[0086] C2,此时W‑CMT处于已满状态,需要选择一个映射项进行剔除。由于优先置换区不存在干净映射信息,则选择LRU位置的映射信息(LPN=6)作为受害项(即待剔除项)。
[0087] C3,通过受害项的LPN,计算得MVPN=0,查找GTD得翻译页MPPN=21。
[0088] C4,C5,将受害映射项(LPN=6)及其同一翻译页下的映射项(LPN=0,4,5)更新到翻译页中。这里假设新的空闲翻译页是MPPN=23,将原翻译页的有效映射项(原MPPN=21中除LPN=0,4,5,6的其余映射项)与更新映射项(LPN=0,4,5,6)按照LPN顺序写入新的翻译页中,将新翻译页置为有效状态,旧翻译页设置为无效。
[0089] C6,将GTD中(MVPN=0,MPPN=21)的虚拟映射项变更为(MVPN=0,MPPN=23)。
[0090] C7,将受害映射项LPN=6剔除。
[0091] C8,将其他回写的映射项(LPN=0,4,5)的更新位,置为干净(Update_flag=0)。
[0092] C9,C10,根据请求LPN号求得MVPN=2,查询GTD,得MPPN=15
[0093] C11,C12,C13,通过翻译页获取访问请求对应的映射信息,并将映射信息加载到W‑CMT的MRU位置。
[0094] C14,闪存分配新的空闲数据页(PPN=661)用于数据对写入,并将原数据页(PPN=660)置为无效,新数据页(PPN=661)置为有效,并更新W‑CMT中映射信息的PPN,以及将更新位,置为脏(Update_flag=1)。
[0095] 综上所述,处理完成后的映射缓存区状态如图5中“结束状态”所示。
[0096] 实施例2:写请求在R‑CMT命中。
[0097] 假设映射缓冲区初始状态如图6中“初始状态”所示,现有一个“访问数据页LPN=1280,写访问请求,请求大小为1”的请求到达,其处理过程如下所示:C1,当一个访问请求到来时(LPN=1280),先查询W‑CMT,在W‑CMT中未查询到请求映射项,
[0098] C2,然后在R‑CMT中查询,在R‑CMT中查找到了请求对应映射信息。
[0099] C3,此时W‑CMT已满,查询优先置换区是否存在干净映射项,得到LPN=833的干净映射项,则将其作为受害项进行剔除。
[0100] C4,然后将映射信息从R‑CMT中迁移至W‑CMT的MRU位置。
[0101] C5,假设闪存新分配数据页为PPN=661,更新映射信息,并将更新位,置为脏(Update_flag=1)。
[0102] 综上所述,处理完成后的映射缓存区状态如图6中“结束状态”所示。
[0103] 实施例3:写请求在W‑CMT命中。
[0104] 假设映射缓冲区初始状态如图7中“初始状态”所示,现有一个“访问数据页LPN=1280,写访问请求,请求大小为1”的请求到达,其处理过程如下所示:
[0105] C1,当一个访问请求到来时(LPN=1280),先查询W‑CMT,在W‑CMT中查询到请求映射信息。
[0106] C2,将映射信息迁移至W‑CMT的MRU位置。
[0107] C3,假设闪存新分配数据页为PPN=661,更新映射信息,并将更新位,置为脏(Update_flag=1)。
[0108] 综上所述,处理完成后的映射缓存区状态如图7中“结束状态”所示。
[0109] 实施例4:读请求未在W‑CMT和R‑CMT命中。
[0110] 假设映射缓冲区初始状态如图8中“初始状态”所示,现有一个“访问数据页LPN=1280,读访问请求,请求大小为5(大于预取大小)”的请求到达,其处理过程如下所示:
[0111] C1,当一个访问请求到来时(LPN=1280),先查询W‑CMT,在W‑CMT中未查询到请求的映射信息。
[0112] C2,然后在R‑CMT中查询,同未查询到请求映射信息。
[0113] C3,通过请求的LPN,查找GTD得翻译页MPPN=21。
[0114] C4,查找到翻译页中对应请求的映射信息。
[0115] C5,根据LRU原则,剔除请求大小个映射项(LPN=4,532,5,123,883)。
[0116] C6,C7,将请求大小个映射信息一同加载到R‑CMT的MRU位置。
[0117] 综上所述,处理完成后的映射缓存区状态如图8中“结束状态”所示。
[0118] 以上所述仅为本发明的优先实施例而已,并不用于限制本发明,对应本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同的替换、改进等,均应包含在本发明的保护范围之内。