当前位置: 首页 > article >正文

FTL算法

一、Nand Flash基本原理

Nand Flash是一种非易失性存储器,广泛应用于固态硬盘(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. 基本特性

Nand Flash不支持覆盖写入,写入之前必须要先擦除目标Block。
有限的擦除次数:每个Block的擦除次数有限,通常SLC模式下的擦除次数为10万次,MLC为1万次,TLC为几千次,超过规定的擦除次数后肯能导致数据丢失。
坏块管理:Nand Flash在生产和使用的过程中会产生坏块,需要进行坏块管理进行标记和屏蔽。
磨损均衡:通过均匀分布写操作,延长Nand Flash的寿命。
垃圾回收:回收无效数据占用的空间,释放可用的Block。

5. 写放大

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

6.常见问题

数据保持:Nand Flash中的数据会随着时间逐渐丢失,特别是高温环境下。
读干扰:频繁读取某个Block可能导致相邻的块数据错误。
写干扰:写入某个Page导致相邻Page的数据错误。
坏块问题:Nand Flash在生产和使用过程中会生产坏块,需要通过坏块管理机制进行处理。

二、eMMC/UFS/SATA/PCIe 协议

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

三、


http://www.kler.cn/a/580989.html

相关文章:

  • Linux mount与umount以及机器重启后自动mount
  • 深入了解住宅IP:跨境电商中的重要工具
  • 深陷帕金森困境,怎样重燃生活信心?
  • 力扣:2012.数组美丽值求和
  • 【Python】dash-fastapi前后端搭建
  • WPF与其他技术的集成:与 WinForms、WCF 等协同工作
  • 机器学习之监督学习
  • go的”ambiguous import in multiple modules”
  • SmartDeblur深度解析:全能型图片编辑器,老照片修复利器
  • 串口通信ASCII码转16进制及C#串口编程完整源码下载
  • ORACLE EBS数据库RELINK方式搭建克隆环境
  • C++理解模板类型推导
  • 基于Golang的微服务——Consul
  • 【Prometheus】层层解析prometheus如何监控k8s核心组件
  • 如何利用PyPDF2库轻松提取PDF中的文本?
  • 【eNSP实战】交换机配置端口隔离
  • PDF文件中的颜色是什么原理?
  • 一招解决Pytorch GPU版本安装慢的问题
  • DeepSeek+Maxkb+Ollama+Docker搭建一个AI问答系统
  • 数字IC后端设计实现教程 |Innovus ICC2 Routing Pin Access Setting设置方法