学习并整理闪存的管理技术。
前一篇《闪存-特性》中学习到了NAND Flash因为其物理结构原因具有的一些先天性的限制,这里就学习一下,为了克服这些限制,引入了哪些管理技术。
闪存管理的任务是基于物理层创建一个队主机透明的逻辑层,提供逻辑读写服务。同时提供可靠的产品,并克服NAND Flash固有的限制。有如下软件和硬件机制:
- 磨损均衡(Wear Leveling)
- 异常管理
- 错误检测和纠正(Error Detection and Correction)
磨损均衡
磨损均衡可以确保NAND闪存内所有Block擦除和写入的次数大致相同,也就是让所有的闪存块均衡擦写,避免少数闪存块先坏掉,导致硬盘容量下降。
了解磨损均衡前,需要知道系统的寻址方案:
- 操作系统(OS)使用逻辑块地址(LBA)对设备进行读写
- 闪存控制器(Flash Controller)使用闪存上的物理地址来读写数据
磨损均衡基于以下两种机制:
- 地址映射:NAND控制器能够将LBA地址映射到闪存上不同物理位置。控制器使用映射表来跟踪LBA和物理地址之间的关系。
- Block监控:监控每个物理块的热计数(Hot count)和其他参数,一旦这些指标超过预定义的阈值,磨损均衡算法就会将数据旋转到其他未达到此阈值的Block中。
这种Block旋转机制可以确保闪存设备中闪存Block的均匀磨损,这种磨损均衡过程对操作系统来说是透明的。
异常管理
1、NAND失败管理
闪存产品的制造涉及大量的测试,可以在整个生命周期内最大限度的减少缺陷。但即使是这样,由于各种其他原因,一些Block还是会出现一些缺陷。在生命周期中的故障率如下图所示:
一些闪存产商通过固件(firmware)来解决,比如西部数据(Western Digital)固件就是通过特殊的可靠性算法来管理这些缺陷并保护用户数据,目标是满足极低的DDPM(Defective Parts per Million)。
2、电源不稳定
NAND的编程操作对电源的波动比较敏感。在写操作期间,如果电源不稳定,实际的NAND block将会进入一个未知状态(没有被erase,也没有被program),这可能会影响设备的初始化能力。
以西部数据为例,其e.MMC控制器用于管理NAND闪存,包括电压检测机制,以防止在嘈杂的环境中对NAND进行program。它同时还检测错误的program操作以保护产品。下图为其在不同电压阈值下的产品行为示例:
错误检测和纠正
提高闪存可靠性和写入耐久性的关键因素之一是实现错误检测和纠正机制。目前在NAND闪存技术中使用最广泛的两种错我纠正算法如下:
- BCH:算法由三个发明者的首字母命名
- LDPC(Low Density Parity Codes):低密度奇偶校验码
两种算法对比:
特性 | BCH | LDPC |
---|---|---|
产品耐久性 | x | 2*x |
解码方法 | 从NAND中读取一次 | 迭代法:获取疑错误时可多次读取数据 |
解码方法:典型Block大小 | 硬决策:基于电压阈值 | 软决策:基于多数和失败概率 |
可以看到,相比之下,LDPC算法在实现上更复杂,但是其可以提供的纠错能力是产品寿命和可靠性的两倍。
由算法确定可以检测和纠正的最大错误数量。无论在NAND闪存控制器的ECC(Error Correction Codes)引擎中使用的什么算法,其错误检测和纠正的方法都是相同的,方法如下:
1、每次将数据page写入闪存时,数据会通过控制器的ECC引擎创建一个唯一的ECC签名。
2、数据和ECC签名一起存在闪存上:数据存储在page区,ECC签名存储在备用区。
3、当读回数据时,数据和ECC签名都会被读入控制器,基于读回的数据生成新的ECC签名。
4、新生成的ECC签名与原始存储的ECC签名进行比较:
- 如果签名相同,则没有出现错误,并将数据返回给主机。
- 如果签名不同,控制器将对数据进行纠正,然后再返回给主机。
有些闪存控制器会将纠正过的数据写会闪存来优化可靠性,而有些闪存不会这么做,因为不能保证数据以后再次出现此错误。对于4KB闪存page,将数据写入闪存时通常会创建8个ECC签名,每512Byte数据创建一个ECC,如下图所示:
实施ECC机制可以提高闪存设备的可靠性,因为读取、写入和数据保存错误将被捕获和纠正。
强大的ECC引擎是延长闪存设备寿命的最重要因素之一。当Block开始老化时,这个Block上会发生越来越多的错误。当ECC引擎没有能力去纠正这些错误时,这个Block将被停用。ECC引擎越强大,一个Block即使显示越来越多的故障,却仍然可以延续更多的生命周期,闪存设备的整体寿命就会越来越强。
本文链接: http://xiaqunfeng.cc/2023/06/18/ssd-all-flash-management/
版权声明: 本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请务必注明出处!谢谢!

v1.5.2