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

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、服务器)。
在这里插入图片描述

三、

相关文章:

  • IP核实战:用Xilinx Clocking Wizard实现精密时序控制
  • 宿主机运行pyspark任务读取docker hadoop容器上的数据
  • 0基础 | 看懂原理图Datasheet 系列1
  • 前端状态管理 pinia和vuex高频面试题
  • 通过动态获取后端数据判断输入的值打小
  • 【C语言】 一维数组传参的本质
  • 车间图纸安全传输需要注意什么?
  • iTextSharp-PDF批量导出
  • 深入浅出Bearer Token:解析工作原理及其在Vue、Uni-app与Java中的实现Demo
  • OpenCV中文路径图片读写终极指南(Python实现)
  • [C++面试] 对通透比较器了解多少?(较少涉及,可跳过)
  • Kylin麒麟操作系统服务部署 | Ansible基础
  • 使用 Python 爬取 item_get_video 接口获取某书笔记详情
  • IDEA 创建SpringCloud 工程(图文)
  • Python----计算机视觉处理(Opencv:二值化,阈值法,反阈值法,截断阈值法,OTSU阈值法)
  • 小学数学原理1:14 - 为什么是减法?
  • 云创智城 ×YunParking停车源码+YunCharge充电源码+DeepSeek:AI 驱动城市级停车平台升级,构建安全智慧出行新生态
  • 搜索 之 组合问题
  • Kubernetes Pod 生命周期详解 之 探针
  • 函数(函数的概念、库函数、自定义函数、形参和实参、return语句、数组做函数参数、嵌套调用和链式访问、函数的声明和定义、static和extern)
  • 墨西哥海军一载两百余人帆船撞上纽约布鲁克林大桥,多人落水
  • “16+8”“生酮饮食”,网红减肥法究竟靠谱吗?
  • 日本一季度实际GDP环比下降0.2%
  • 92岁上海交大退休教师捐赠百万元给学校,其父也曾设奖学金
  • 视频|王弘治:王太后,“先天宫斗圣体”?
  • “救护车”半路加价?陕西卫健委已介入,记者调查:黑救护车挤占市场