FTL的映射种类?
1、块映射(以为闪存块为映射粒度)
优点:块映射只需要存储逻辑块到闪存物理块的映射,映射表所用的空间较小。有较好的连续大尺寸的读写性能。
缺点:块映射对小尺寸的数据写入性能较差,当只需要修改一个逻辑页的数据的时候,也需要把整个闪存块的数据读出,改变逻辑页的内存,然后再写入整个闪存块。
2、页映射(以闪存页为映射粒度)
优点:在随机写入性能上突出。
缺点:因为一个闪存块包含几百甚至几千的闪存页,因此,需要更多的空间存储映射表。
在实际使用中,一个闪存页可以对应多个逻辑区。主流的SSD基本使用的都是页映射。
3、混合映射(逻辑块对应闪存物理块,逻辑块内分逻辑页,逻辑页和闪存物理块中的任意闪存页对应)
映射表所占空间和读写性能介于块映射和页映射之间。
映射表的基本原理?
用户是通过LBA(逻辑块地址)访问SSD的,每写入一个逻辑页SSD固件会找一个物理页把用户的数据写入,并记录逻辑地址和物理地址的映射关系,记录这个映射关系的结构就是映射表L2P。
一张映射表有多大?
假如逻辑页大小为4KB,256GB的大小的SSD,那么用户空间一共需要256GB/4KB=64MB个逻辑页,也就需要容纳64MB条映射关系的映射表,假设映射表中每个单元存储的物理地址用4B表示,那么映射表的大小即为4Bx64M=256MB,也就是SSD的千分之一。(前提是逻辑页的大小是4KB,物理地址用4B表示)
二级映射表的基本原理?
eMMC和UFS处于成本和功耗的考虑,通常采用,DRAM-less的设计,就是不带DRAM,这样的设计的映射表多采用多级映射。
一级映射表常驻SRAM,二级映射表少部分在SRAM,大部分在闪存中。一级映射表存储映射表在闪存的物理地址,二级映射表存储的是L2P映射表。
对于DRAM-less的SSD,读取闪存数据,首先要看与逻辑页对应的映射关系是否在SRAM中,如果在就直接根据映射关系直接读取闪存;如果不在,就需要先从闪存中读出映射关系(映射块),再根据映射关系,从闪存中读取数据。
HMB——Host Memory Buffer
映射表表除了可以放在device端的DRAM、片上SRAM和闪存中,还可以放在主机内存中。NVME1.2后一个重要的功能,就是HMB——Host Memory Buffer,主机在内存中专门划分出一部分内存给SSD使用,SSD可以把它当做自己的DRAM使用。
映射表的写入?
SSD掉电前要把映射表写入闪存,下次上电,再把映射表从闪存加载到SSD缓存(DRAM或SRAM)。随着SSD写入,映射关系不断增加,为防止意外掉电映射关系丢失,SSD固件不仅在正常掉电的时候写入映射关系,在SSD运行过程中按照以下策略将映射表写入缓存:
- 新的映射关系累计到一定阈值
- 用户写入的数据量达到一定阈值
- 用户写完一个闪存块
- 其他
写入策略有全部更新和增量更新,全量更新固件实现简单,增量更新需要知道那些映射关系式干净的那些事不干净的。