FTL算法

一、Nand Flash基本原理

Nand Flash是一种非易失性存储器,即使掉电,存储在闪存中的数据也不会丢失。浮栅内没有电子,状态为“1”,写操作会存储一定量的电子,状态变为“0”。广泛应用于固态硬盘(SSD)、USB闪存驱动器、嵌入式设备等。

1. 物理结构

Cell(存储单元):Nand Flash的基本存储单元是浮栅晶体管,通过浮栅中的电荷量来表示数据(0或1)。
Page(页):多个Cell组成一个Page,Page是读写的最小单位。
Block(块):多个Page组成一个Block,Block是擦除的最小单位。
Plane(平面):多个Block组成一个Plane,多个Plane可以并行操作(Multi-Plane)操作。

2. 擦写读性能

读操作:以Page为单位,读取速度较快。
写操作:以Page为单位,写入之前必须保证目标Page为空,也就是已经被擦除。
擦除操作:以Block为单位,擦除速度较慢。

3.数据存储方式

SLC:每个Cell存储1bit数据(0/1),速度块、寿命长,但成本高。
MLC:每个Cell存储2bit数据(00/01/10/11),容量大、成本低,但速度和寿命不如SLC。
TLC:每个Cell存储3Bit数据,容量更大,成本更低,但速度和寿命进一步降低。
QLC:每个Cell存储4Bit数据,容量更大,成本最低,但速度和寿命最差。

4. 基本特性
  1. Nand Flash不支持覆盖写入,写入之前必须要先擦除目标Block。
    原因:闪存在执行编程操作的时候,只能将每个bit从1写成0,而不能反过来将0写为1。擦除操作是将闪存中每个位恢复为1的状态。因此每个块只有先擦除其中的页才能写入数据。
  2. 有限的擦除次数:每个Block的擦除次数有限,通常SLC模式下的擦除次数为10万次,MLC为1万次,TLC为几千次,超过规定的擦除次数后肯能导致数据丢失。
  3. 坏块管理:Nand Flash在生产和使用的过程中会产生坏块,需要进行坏块管理进行标记和屏蔽。
  4. 磨损均衡:通过均匀分布写操作,延长Nand Flash的寿命。
  5. 垃圾回收:回收无效数据占用的空间,释放可用的Block。
5. 写放大

写放大(WA)= 实际写入数据量 / 用户请求写入数据量 理想状态下写放大为1
原因:
1.写之前擦除:由于Nand Flash不支持覆盖写入,写入前必须擦除目标块,如果目标块有数据,需要先将有效数据迁移到其他Block,然后再擦除目标Block,这会导致额外的写入操作。
2.垃圾回收:为了释放无效数据占用的空间,垃圾回收机制需要将有效数据迁移到其他Block,然后擦除原Block.
3.磨损均衡:为了将写操作均匀分布到所有Block,可能导致额外的数据迁移和写入操作。
影响:
1.性能下降:写放大越高,实际写入数据量越大,会降低Nand Flash的写入性能。
2.寿命缩短:写放大越高,擦写次数消耗越快,会缩短其使用寿命。
3.功耗增加:写放大越高,实际写入数量大,增加写入功耗。
降低写放大方法:
优化FTL算法、增加OP空间(通过增加额外的存储空间,减少垃圾回收的频率和数据迁移的量)、提高垃圾回收效率。

拓展:OP空间
SSD的裸容量是二进制表示,SSD的用户容量是十进制表示。以128GB的容量为例:
裸容量:128GB=128
1024 10241024B
用户容量: 128GB= 128
1000
1000
1000B
裸容量比用户容量多出7%,这7%的空间又叫做OP空间。可用于空间管理和存储内部数据,比如FTL映射表存储空间,闪存坏块替代空间。
OP=(SSD裸容量-用户容量)/用户容量

6.常见问题
  1. 数据保持:Nand Flash中的数据会随着时间逐渐丢失,特别是高温环境下。
    原因:存储在浮栅极里面的电子随着时间的流逝,通过隧道氧化层溜出,导致里面存储的 “0” 变成 “1” 产生数据保持错误,数据保持使得阈值电压整体左移。
  2. 读干扰:主要是读页操作,会对同一个块内其他页造成干扰
    原因:在读取某一页时,会对该页所在的整个块施加电压以定位目标单元,导致虽然只有目标页被读取,但同一个块中其他页也会逐渐积累电荷,长期多次读取可能会导致这些页的数据损坏。读干扰是累积的,频繁读取同一个块会增加其他页的出错概率,尤其是对高密度闪存MLC、TLC影响显著。
    影响:读干扰会使浮栅极注入额外的电子,导致位由“1”转变为“0”,使得阈值电压分布整体右移。
    处理措施:①定期数据刷新,通过重写同一块中的数据,重置电荷状态。②磨损均衡算法,避免频繁读取同一块。
  3. 写干扰:写干扰不仅影响当前写入页,还有可能波及同一个块中的其他页
    原因:在变成某一页时,需施加高电压以改变目标单元的电荷状态,此过程可能会对同一个块内相邻单元产生电压干扰,导致其电荷状态意外改变。写干扰是即时性的,对相邻页的干扰更加明显。
    处理措施:①降低编程电压对相邻单元的干扰。②增加ECC纠错机制,通过纠错码修复受干扰的数据。③物理隔离:在硬件层面优化单元布局,减少干扰。
    坏块问题:Nand Flash在生产和使用过程中会生产坏块,需要通过坏块管理机制进行处理。
7.数据保持性问题的解决方案
  1. ECC纠错:使用ECC纠错引擎来纠正闪存数据出错位
    流程:①当将用户数据A写入到闪存之前,先对其进行ECC编码操作,把产生的校验数据A和用户数据A一起存储在闪存中。
    ②数据存储在闪存中由于某些原因会产生位翻转,使得用户数据A变成用户数据B。
    ③读取用户数据的时候,用户数据B和校验数据B会经过ECC纠错隐形。如果发生翻转位的个数没有超过ECC的纠错能力,则经ECC纠错的数据为原始数据;如果超过ECC纠错能力的话,则使用户数据A丢失。
    纠错算法:①BCH算法,只支持硬解码(基于二进制阈值判断),纠错能力有限(每页纠正几十到上百个错误位);
    ②LDPC算法,不仅支持硬解码还支持软解码(利用电压电平的概率信息),纠错能力比BCH更强(可纠正上千个错误位)。
    在这里插入图片描述

  2. 重读:当有错误通过ECC纠正不过来的时候,固件要通过改变施加在控制极的参考电压Vref,减少因电荷漂移导致的误码,来重新读取一次或若干次。

  3. 刷新:刷新是一种防范于未然的手段,一旦检测到某个闪存页或者闪存块出错位比较多,但是ECC可以很快纠正过来,就提前将这个闪存页或者闪存块中的数据搬移到的新的地方。通常是基于读次数(10^4次读取触发)或误码率。

  4. RAID:当某个闪存页数据位翻转的过多,ECC纠正不过来,需要使用RAID操作,一般是RAID5,但RAID5只能回复单个ECC不可纠错的数据。采用冗余纠错技术,对多个闪存页进行异或操作生成校验数据。

8. 闪存特性
  1. 多Plane操作:增加读取和写入闪存的并发性,进而提升闪存读写性能。
    操作:SSD主控把数据写入第一个Plane的闪存缓存中,数据保持在那里,等主控将同一个LUN上面多个Plane上的数据传输到对应的闪存缓存中,再统一写入闪存介质。

  2. 缓存读写操作

  3. 异步Plane操作:要求读写的每个Plane上的闪存页编号要一致,因此只适合写入操作和顺序读操作。

二、eMMC/UFS/SATA/PCIe 协议

eMMC、UFS、SATA、PCIe是四种常见的存储设备接口协议。
eMMC:一种嵌入式存储解决方案,将Nand Flash、控制器和接口集成在一个芯片中。采用并行接口,支持多通道操作。协议基于MMC协议,命令和数据通过同一组引脚传输
UFS:一种高性能嵌入式存储解决方法,采用串行接口,支持全双工通信命令和数据通过不同的通道传输
SATA:一种串行接口协议,用于连接存储设备和主机,采用点对点连接,协议基于AHCI或NVMe。
PCIe:一种高速串行接口协议,用于连接高性能设备(如GPU、SSD)和主机(PC、服务器)。
在这里插入图片描述

三、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值