映射的种类
根据映射粒度的不同分为如下几种
1.块映射
一个逻辑块(logical block)映射到一个闪存物理块(physical block)
优点是:映射表需要空间小,对大Block size顺序读写,但是对小尺寸数据的写入性能很差。因为即使只写入一个Page,也需要整个Block进行修改。
2.页映射
用户空间被划分成一个一个逻辑区域(Region),每个逻辑区域的大小和闪存页大小一样。
3.混合映射
上面两种的结合体
映射的基本原理
LBA : Logical block address,用户通过逻辑块地址访问SSD,逻辑块大小一般为512B,4K,linux下可以通过fdisk -l /dev/sdx或/dev/nvmexn1查看
用户访问SSD的基本单元,叫做Logical Page
在SS内部,对应的闪存页叫做 Physical Page
SSD内部维护了一张用户逻辑页到SSD物理页的地址转换表,这张表就叫做L2P映射表(Logical address To Physical address),用户每写入一个逻辑页,这个表的对应关系就会更新一遍,以便后续读取数据时使用
映射表的大小一般等于SSD容量的千分之一左右
这张L2P表一般存储于DRAM中,如下入所示:
对于没有DRAM的SSD来说。L2P是由SRAM和闪存自己配合存储的:
,SRAM空间有限,所以会有分一级二级映射表,一级存在SRAM,二级映射表小部分存在SRAM,大部分存储于闪存中,这样节省了DRAM的成本,但相对的,性能就会比较差
还有一种是基于HMB(Host Memory Buffer)的SSD,也就是把映射表读取到主机的内存中,性能会比不带DRAM的SSD稍好,但差于自己带DRAM的SSD
由于映射表基本放在DRAM中,所以当断电时,这张表会丢失,所以SSD固件需要时常将L2P表下刷到闪存中,避免掉电引起数据丢失
企业级的SSD有电容,在异常断电时电容放电将数据都写进闪存,但消费级一般不带电容,数据保护性没那没好,所以遇到异常断电时有可能造成数据丢失的。
异常断电引起部分映射关系丢失,SSD上电时固件可以尝试重建这些映射关系回来,但假如丢失非常多,可能造成超长的重建时间,或直接导致不识别