SSD 存储芯片内写操做的最小单元。算法
SSD 存储芯片内擦除操做的最小单元。app
Flash Transfer Layer的简写。ide
实现host地址到nand地址到转换。性能
每个逻辑的page 都是映射到一个物理page, 映射策略和同一个block内到其余page 无关。优化
对应关系相似上面,只是粒读是比page 更大的block 。3d
部分block 用page-levle mapping机制,部分block 采起block-level
mapping 机制。以下图所示:orm
small memory footprintblog
mapping-entry to flash
对于page level mapping机制:
优势是性能好,缺点是SSD控制器内部占用的内存大,但能够把部分mappint entry 放到flash中去优化。内存
优势是总的mapping entry少,可是因为block内部不一样page的写须要COW 操做,致使性能低。这能够经过給block 内部添加的额外的page或者block来接受写更新请求来优化,这部分page或block被分别叫作log-page/log-block,而默认的那部分page/block被称为data-page/data-block。后续二者能够一趟合并,无需COW。ci
SSD 能被切分
SSD存储介质可以被切分红多个区域;
IO流有高、低频之分
部分数据被频繁更新;部分数据不多跟新;
内部支持hybrid mapping scheme
内部部分NAND的FTL是page-level mapping; 部分是block-level mapping;
这种机制在每一个log page里面包括额外的log page, 这些log page应用程序不可见,只在block里的data page更新的时候才会当即更新。特色是:后续对block的写,会基于log page;若是log page用完了,会进行copy and merge。以下图所示:
M-systems能够理解成block RAID1, 一个logical block 对应两个physical block,: data block和log block 。M-systems有两种管理映射的机制:
相同偏移的page 才能相互映射。第一次覆盖写会落到log block,第二次覆盖写才会触发merge操做。举例以下:
这种方法的优势是 不须要维护data block和log block的映射关系。
对某个page的覆盖写的更新会写到log block的第一个空闲page,以前的page number(在较早的data block里面的)会被拷贝到带外空间(OOB)。data block和log block的merge操做只会发生在log block里空闲空间不足的状况下。
BAST能够理解为log block 数量受到限制的FMAX, FTL mapping table 而非OOB region被用来管理log-block和data-block的1:1映射关系。 当出现下面的状况下会触发merge:
覆盖写的时候free log block 不足。
这个方法的不足在于:当有超过log block 数量的更新同时进行的时候,会触发多个merge 操做,即使此时有的log-block里有效数据不多。
FAST经过全相关解决了上面 的问题。一个log block 能够映射到多dat block 。在这种策略中, log blocks被分红两个区域。每一个区域都包含一个专门給顺序更新的block,由于顺序写若是落到不一样block会致使merge 操做效率低下,因此把落在同一个逻辑block 的page 顺序更新都映射到同一个block。此外,每一个区域还包括对随机写友好的log block ,这些block 能够在随机更新的时候被最大程度地并行使用,同时最小化了merge 开销。下面这个图很直观地说明了这个过程:
FAST merge操做的次数少,可是每次merge操做的代价大。由于FAST 中log-block 和page-block是1:N映射的,一个log-page里可能映射到多个data block,这样merge一个log block可能就须要更新多个data block。特别地 有的data block 可能更新比较少,而有的data block 可能比较频繁地更新,若是都混在同一个log block里可能形成实际数据更新比较少的block也频繁merge,显然这样效率不高。为此,天然想到了一种把不一样频次的IO 分流到不一样的log-block 的方法。
为顺序写分配更多的log-block;
log-block 和data-block K路组相连的映射方式,来减小FFTL merge操做的开销。
主要的思路以下:
传统的page-level mapping 因为使用数量巨大的mapping table entry 占用不少内存,一般不是一个最好的选择。业界提出了几种方法。
主要思路以下:
示例图以下:
###
主要思路是利用顺序IO的特性来减小mapping table 的大小。对于顺序IO,不须要加载对mapping table 的多个不一样的引用,只须要加载一个引用以及表示还有多少顺序访问的数量就够了。
一种充分利用了程序时间和空间局本性的 FTL。
使用了cache来存取部分mapping table
WAFTL根据IO pattern 来存放数据。在这种FTL实现里:
managed page-wise called Page Mapped Blocks (PMB), 用来存放:
managed block-wise called Block Mapped Blocks (BMB)
相似上面的WAFTL, flash memroy也划分了分区。考虑到SSD控制器内部也有cache,
其最终目的就是为了加快对flash memory 对访问,同时考虑尽可能减少最终落到block内部的 cache上的有效数据和flash memory上的无效数据的merge开销。所以,CACHE-FTL 提出了一种经过统计内部flush.操做下刷单page数量来决定写到 page-mapping 区域仍是block mapping 区域:若是这个数量低于某个阈值,就写到page-level mapping 区域,不然写到block-level mapping区域。
此外,CACHE-FTL的GC机制在回收空间的时候,容许数据从page-level mapping区域搬到block-level mapping 区域。