SSD FTL之zone的扩展

1.1编写目的

   对FTL模拟器的学习做一些总结,以及对FTL模拟器zone扩展方案的设计说明和实现方式的讲解,供大家参考指正。

1.2背景

   1.2.1 页映射机制

         在采用页级别的FTL机制中,请求的逻辑页面可以被映射到闪存空 间中的任何物理页面,因此,这种机制非常灵活,而且具有很高的闪存页面利用率。图[FTL-page-mapping]给出了页级别映射示意图,为了简化问题描述,这里省略了块号,实际上,当每个块中所包含的页数确定以后,可以很容易根据页号计算出块号,比如,如果每个块包含4个页,那么,逻辑页0,1,2,3就在第0块中,逻辑页4,5,6,7就在第2块中,逻辑页i 就在第i/4块中,其中,i 表示页号,i/4表示整除操作。从图中可以看出,对于一个逻辑页i(即逻辑页号LPN为i)而言,可以在页映射表中找到与该页对应的映射条目,映射条目<逻辑页号i,逻辑页号k>就表示逻辑页i 被映射到物理页k上。

                                SSD FTL之zone的扩展_第1张图片

1.2.2 FTL模拟器映射表

 

   FTL模拟器中模拟的是对256G的FLSH进行操作,这样对应的映射表会达到64M,映射表太大无法直接放入RAM空间中,因此有添加了一级映射表用来索引64M的二级映射表,二对64M映射表空间的一级映射表只需16K的容量,可以存入Ram中。其中二级映射表映射闪存物理页,一级映射表映射二级映射表所在的flash的物理页,示意图如下所示:

                                                         SSD FTL之zone的扩展_第2张图片

 

                                                                      1.2 一级映射表和二级映射表示意图

2 FTL模拟器zone的设计与扩展

2.1 zone的原始设计

      在读写操作等过程中,RAM会频繁的从FLASH中读取和更新二级映射表,为了减少这种直接基于flash的操作,对flash造成磨损,FTL模拟器会在RAM中开辟64k的内存,分为四个zone,每个16K,并将64M的二级映射表按逻辑页顺序分割成了256个zone number。RAM中会存取其中四个zone number的数据,当一个新的LPA请求下来,如果可以命中当前四个zone,则可以直接读取操作,如果没有命中,则需要将当前最久没用到的zone号写到FLASH,然后load新的zone进来。原始设计的动作示意图如图所示

                                                           SSD FTL之zone的扩展_第3张图片

                                                                              2-1加入了zone的设计的映射表

2.2  zone的扩展

  2.2.1  zone的扩展

   由2.1节可知,对FLASH操作次数的多少取决于对zone的命中率,为了提高zone的命中率,将上面4个zone拆分成16个zone,其中每个zone为4k大小,zone内在FALSH中的二级映射表是连续的,但zone之间的不连续的,如图2-2所示,RAM中16个方格代表16个zone,FLASH中映射表的16个不连续的方格代表匹配RAM中的16个zone number,由图可见这样RAM中的zone对FLASH中二级映射表的命中率就会大大增加,这样就会减少FLASH的磨损次数,延长FLASH的寿命。

                                                             SSD FTL之zone的扩展_第4张图片

                                                                                   2-2 zone扩展后的示意图

2.2.2 zone扩展后的影响

       由上图可知,将zone有四个扩展为16个之后,zone的容量减小的四倍,相应的zone的number将会扩大四倍,一级映射表将会扩大四倍。并且出现zone的切换时,要将四个最久没用到的4个zone合并成一个页写下去,此时一级映射表必须增加一个zone偏移来查找当前zone到底在哪个页的哪偏移,从FLASH中load新的zone进来,也需读出当前zone所在的页,通过偏移找出当前zone所在的位置,更新进RAM。相应的每个page的oob信息也需要从原来的记录一个zone_num改为记录四个zone_num,这些影响势必会对FTL模拟器的变量,结构造成重大影响,需要进行改变和重构。

3 zone切换模块的更改

3.1  zone 切换的改动

   3.1.1 原始设计

原始设计首先找出最久没使用的zone,将其写到flash中

                                             SSD FTL之zone的扩展_第5张图片

  然后再将FLASH中的目标zoneload进内存,将使用次数time至为0.

                                  SSD FTL之zone的扩展_第6张图片

3.1.2 zone扩展后的设计

 

      做zone切换时首先判断当前的zone号在ram中的16个zone里是否存在,如果存在直接获取,如果不存在,判断最久没使用(time最大)的zone的status是否为0,若为0则当前zone为空,直接load进去,若为1 ,则需要找出time最带的四个取出合并成一个页写下去如下图所示:

                                                       SSD FTL之zone的扩展_第7张图片

 将FLASH中的zone load进RAM,找出目标zone所在的页读出,根据偏移找到目标zone在这个页的位置将其写进去:

                                                      SSD FTL之zone的扩展_第8张图片

你可能感兴趣的:(ftl,算法)