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

FTL(Flash Translation Layer)

FTL(Flash Translation Layer)是NAND Flash设备(如SSD、eMMC、UFS)的“大脑”和“总管家”,它的作用至关重要。它的核心使命是:将具有怪异物理特性的NAND Flash,“伪装”成一个听话的、可以像普通硬盘一样随机读写的块设备(Block Device)

您提到的坏块管理磨损均衡是FTL的两个核心职责,但它的工作远不止这些。以下是FTL的主要作用和所做的工作:

1. 地址转换(Address Translation) - 最核心的功能

这是FTL得名的原因(Flash Translation Layer)。

  • 问题:NAND Flash必须“先擦除再写入”,且擦除单位(Block)远大于写入单位(Page)。无法就地更新数据。
  • 解决方案:FTL维护一张庞大的映射表(Mapping Table)
    • 主机(电脑)看到的是逻辑地址(LBA - Logical Block Address)
    • FTL将逻辑地址映射到NAND Flash上的物理地址
    • 当主机要更新一个逻辑地址的数据时,FTL会:
      1. 将新数据写入到一个新的、空闲的物理页中。
      2. 更新映射表,让这个逻辑地址指向新的物理页。
      3. 将旧的物理页标记为无效(Invalid)
  • 比喻:这就像一本书的目录。当某一页的内容需要修改时,我们不是直接擦掉重写那一页,而是将新内容写在书的空白页上,然后更新目录,指向新页码。旧的页面就被标记为“作废”。

2. 垃圾回收(Garbage Collection) - “清洁工”

  • 问题:随着不断异地更新数据,Flash中积累了大量的“无效”页(存放着旧数据),而“空闲”页(已擦除的)会越来越少。
  • 解决方案:GC过程定期启动。
    1. FTL选择一个“无效”页较多的Block(牺牲Block)。
    2. 将这个Block中尚存的有效页(Valid Pages)(即映射表中还在使用的数据)读取出来,并搬迁到新的空闲Block中。
    3. 更新映射表,将逻辑地址指向新的位置。
    4. 此时,这个牺牲Block中全部都是无效数据了,FTL就可以对它执行擦除(Erase) 操作。
    5. 擦除完成后,这个Block就加入了“空闲块池”,可以用于后续的写入。
  • 比喻:垃圾回收就像小区的垃圾车。它不会每户产生一点垃圾就过来收。而是等垃圾积累到一定程度,把整栋楼里还有用的东西(有效数据)搬到新楼,然后把这栋旧楼(Block)彻底拆平(擦除),腾出空地以备重建。

3. 磨损均衡(Wear Leveling) - “公平大师”

  • 问题:每个NAND Flash Block的擦写次数(P/E Cycles)是有限的。如果总是对某几个Block进行擦写,它们会很快坏掉,导致整个盘提前报废。
  • 解决方案:FTL通过算法,确保所有的Block被均匀地使用。
    • 动态磨损均衡:在写入新数据时,优先选择擦写次数少的空闲Block。
    • 静态磨损均衡:更高级的策略。它甚至会主动地把那些存储着“冷数据”(很少修改的数据)的Block中的数据,搬迁到擦写次数多的Block上,从而把擦写次数少的Block腾出来进行写入操作。这样就保证了所有Block的磨损程度趋于一致。
  • 比喻:一条路有10条车道,如果所有车都挤在一条车道上,这条车道很快就会坏。磨损均衡就是交警,指挥车辆均匀地使用所有车道,延长整条路的使用寿命。

4. 坏块管理(Bad Block Management) - “医生”

  • 问题:NAND Flash在出厂时就有一定比例的坏块,并且在生命周期中还会不断产生新的坏块。
  • 解决方案
    • FTL维护一个坏块表(Bad Block Table)
    • 当写入或擦除操作失败时,FTL会将该Block标记为坏块,并加入坏块表。
    • 此后,所有数据分配都会跳过这个坏块,用预留的好块(来自OP空间)来替代它。
  • 比喻:硬盘就像一盒鸡蛋,总有几个是坏的。坏块管理就是把你挑出来的坏鸡蛋做好标记,永远不再使用它们,并从备用蛋盒里拿出好鸡蛋补上。

5. 读写调度与缓存(Read/Write Scheduling & Caching)

  • 问题:NAND Flash读写速度有差异(读快写慢),且不同操作(读、写、擦除)会相互阻塞。
  • 解决方案:FTL会智能地调度来自主机的请求队列,对操作进行排序和合并,以最大化吞吐量。它还会使用RAM缓存一部分映射表和频繁访问的数据,极大提升访问速度。

6. 数据保持与纠错(Data Retention & ECC)

  • 问题:存储的电荷可能会慢慢泄漏,导致数据出错(尤其是在TLC/QLC中)。
  • 解决方案:FTL会同ECC(Error Correction Code)引擎紧密协作。
    • 在写入时,为每页数据计算并存储ECC校验码。
    • 在读取时,用ECC码检测和纠正位错误。如果错误太多无法纠正,FTL会尝试从冗余副本中恢复数据,并将该页标记为可疑或坏块。

总结:FTL是什么?

FTL是一个极其复杂的软件/固件层,它集地址映射员、清洁工、调度员、医生、公平大师于一身。正是它默默地完成了所有这些繁重的工作,我们才能在操作系统里轻松地使用C:盘或D:盘,而完全不用关心底层的NAND Flash到底需要“先擦除再写入”、会“磨损”、还有“坏块”。

您买的SSD性能好坏、寿命长短,很大程度上就取决于其主控芯片中FTL算法的优劣。


文章转载自:

http://AmKF0Bmu.bgnbr.cn
http://hvBwm618.bgnbr.cn
http://nv4rTnkn.bgnbr.cn
http://qF6z5kGD.bgnbr.cn
http://tquxjsq3.bgnbr.cn
http://bUUpBviC.bgnbr.cn
http://UwuG2jt8.bgnbr.cn
http://9KkDPUD8.bgnbr.cn
http://Iw7RmFw2.bgnbr.cn
http://1jIo7Lb9.bgnbr.cn
http://8AYT1ru4.bgnbr.cn
http://vU1MaZp7.bgnbr.cn
http://KZAHmn8K.bgnbr.cn
http://51YFK9ai.bgnbr.cn
http://P4tpEteI.bgnbr.cn
http://D44PNXYK.bgnbr.cn
http://aeAwzOjM.bgnbr.cn
http://LLzN9ih2.bgnbr.cn
http://pdwnZc7y.bgnbr.cn
http://B19dPy52.bgnbr.cn
http://vbxIcwfs.bgnbr.cn
http://A8lFU9B1.bgnbr.cn
http://czMMIaRO.bgnbr.cn
http://2rPjUKsv.bgnbr.cn
http://tcxzWCbk.bgnbr.cn
http://rTZebsES.bgnbr.cn
http://uued0XA0.bgnbr.cn
http://Ap1wxCEB.bgnbr.cn
http://NiS8TcDU.bgnbr.cn
http://YJLL1WWs.bgnbr.cn
http://www.dtcms.com/a/371268.html

相关文章:

  • C++输出字符串的统一码(Unicode Code)和 ASCII 码
  • 【PCIe EP 设备入门学习专栏 -- 8.1.2 PCIe EP 通路详细介绍】
  • nginx安装部署(备忘)
  • 6.虚拟化历史
  • 疯狂星期四文案网第62天运营日记
  • AI工程师对于AI的突发奇想
  • 模电仿真软件:MultSim14.3下载与安装
  • 心路历程-passwdusermod命令补充
  • 自旋锁/互斥锁 设备树 iic驱动总线 day66 67 68
  • 【尚跑】2025逐日者15KM社区赛西安湖站,74分安全完赛
  • 页面间的导航:`<Link>` 组件和 `useRouter`
  • 视频动作识别-VideoSwin
  • AI 自然语音对话接入客服系统的场景分析及实现
  • 【基础-判断】架构设计时需要考虑“一次开发,多端部署”,这样可以节省跨设备UI开发工作量,同时提升应用部署的伸缩性。
  • [光学原理与应用-428]:非线性光学 - 为什么要改变光的波长/频率,获得特点波长/频率的光?
  • 运筹学——求解线性规划的单纯形法
  • HTML标签之超链接
  • MySQL问题5
  • MyBatis Example模式SQL注入风险
  • C语言数据结构——详细讲解《二叉树与堆的基本概念》
  • 【杂类】I/O
  • import type在模块引入中的作用
  • MySQL入门指南:从安装到工作原理
  • 【基础-判断】一个页面可以存在多个@Entry修饰的组件。
  • MapStruct详解
  • 新的打卡方式
  • GESP 7/8级免CSP-J/S初赛!申请注意事项!今年已过,明年提前关注!
  • esbuild入门
  • 决策树概念与原理
  • More Effective C++ 条款31:让函数根据多个对象来决定怎么虚拟