1. 写入放大(WA)
写入放大会对闪存 P / E 次数造成磨损。在存储过程中,数据会在闪存上被反复的移动整理,造成闪存上的写入量大于实际文件写入量,这个过程称为写放大。
写放大 = 主控实际写入的数据量 / 用户想要写入的数据量
举例:比如用户要写入一个4KB的数据,最坏的情况就是,一个块里已经没有干净空间了,但是有无效数据可以擦除,所以主控就把所有的数据读出来,擦除块,再加上这个4KB新数据写回去,这个操作带来的写入放大就是: 实际写4K的数据,造成了整个块(512KB)的写入操作,那就是128倍放大。同时带来了原本只需要简单的写4KB的操作变成读取(512KB),擦 (512KB),改写(512KB),造成了延迟大大增加,速度变慢,但实际上用户感觉不明显,用SSD跑分软件就比较明显了。
数据写入的最小单位是 页 Page,擦除的最小单位是 块 Block。接收和执行闪存命令的基本单元是 DIE / LUN。
2. Trim
Trim 是一种 SATA 命令,它能让操作系统在删除某个文件或者格式化之后,告诉 SSD 主控这个数据块不再需要了。
Trim 的依赖性和局限性:
3. 乱七八糟的东西
SATA 硬盘,上面加载的是 ATA命令集;SAS 硬盘,加载的是 SCSI 命令集;新兴的 SSD 新贵,采用 PCIe 接口,加载的有 NVMe 命令集。
SSD 通过诸如 SATA、SAS 和 PCIe 等接口与主机 Host 相连,实现对应的 ATA、SCSI 和 NVMe 等协议。
FTL 完成逻辑数据块(主机发来的数据块)到闪存物理空间的转换或映射。以写为例:主机Host 通过接口发送写命令给 SSD,SSD 接收到该命令后执行,并接收主机要写入的数据。数据一般会缓存在 SSD 内部的 RAM 中,FTL 会为每个逻辑数据块分配一个闪存地址,当数据达到一定数量后,FTL 便会发送写闪存请求给后端,然后后端根据写请求,把缓存中的数据写到对应的闪存空间。
FTL:也可以说是,完成主机(或用户,Host)逻辑地址空间到闪存(Flash)物理地址空间的映射。
逻辑块地址:LBA。 物理块地址:PBA。
每一个 LBA,代表一个逻辑块。
用户访问 SSD 的基本单元称为逻辑页(Logical Page);在SSD 内部,SSD 主控是以闪存页为基本单位读写闪存的,称闪存页为物理页(Physical Page)。用户每写入一个数据页,SSD 主控就会找一个物理页把用户数据写入,SSD 内部同时会记录这样一条映射。
映射表一般存储在板载 DRAM 上(也就是 SSD 的缓存中),映射关系可以快速访问。
闪存是非易失性存储器的原因:闪存的基本存储单元(Cell)是一种双层浮栅 MOS 管,源极(Source)和漏极(Drain)之间的半导体上有存储电子的浮栅,浮栅上下被绝缘层包围,因此,存储在里面的电子不会因为掉电而消失。