同样的 NAND 闪存颗粒,三星做的 UFS 和某二线厂商做的 UFS,跑分能差 30% 到 50%。颗粒是一样的——差距全在主控芯片上。这篇文章拆解控制器的四大核心能力:FTL 地址映射、磨损均衡、坏块管理、CMDQ 命令调度。

控制器是什么?

UFS 内部三大组件:控制器芯片、NAND 闪存芯片、DRAM 缓存芯片。其中控制器是最复杂、最关键的一个——它决定了 UFS 的性能天花板。

核心定位

所有的读写命令、地址翻译、垃圾回收、磨损均衡、坏块管理——全由控制器执行。可以这样理解:

  • NAND 闪存是仓库——负责”存”
  • DRAM 缓存是中转站——负责”加速”
  • 控制器是仓库管理系统——负责”指挥”

仓库本身有各种限制:不能直接覆写、擦除次数有限、读写不对称。这些”怪癖”全依赖控制器的算法来弥补。管理系统写得不好,再好的仓库也是白搭。

四大核心任务

任务职责
FTL 地址映射把文件系统的逻辑地址翻译成 NAND 的物理地址
磨损均衡让所有 Block 均匀老化,防止热门区域提前报废
坏块管理标记出厂坏块、识别使用坏块、用备用块透明替换
CMDQ 调度多命令并行处理、智能排序,最大化 IOPS

控制器在UFS中的核心地位


FTL:存储系统的”灵魂”

**FTL(Flash Translation Layer,闪存转换层)**是控制器上最核心的固件。它的唯一职责是:把文件系统发来的逻辑地址(LBA),翻译成 NAND 的实际物理地址(PBA)。

为什么需要翻译?

因为 NAND 不能原地覆写。你每次修改文件,数据其实被写到了一个全新的 Page,旧 Page 标记为 Invalid。从文件系统的视角,文件的”逻辑地址”从来没变过——但物理地址一直在变。

FTL 维护一张巨大的映射表,实时追踪每个逻辑地址当前对应的物理位置。下次再写同一个文件,物理位置又变了——FTL 更新映射表,保证数据永远能找到。

类比理解

把 FTL 想象成图书馆的管理系统。

读者(文件系统)只知道书名(逻辑地址),不知道书实际放在哪个书架哪一层(物理地址)。管理员(FTL)手里有一本目录,记录每本书的实时位置。书被借走还回来,可能放到完全不同的架子上——读者不需要知道,管理员负责更新目录。

FTL地址映射流程

三种映射方式

方式粒度映射表大小性能适用场景
页映射每 Page极大(1TB SSD ≈ 1GB DRAM)最优高端 UFS / SSD
块映射每 Block极小(几百 KB)最差早期 SSD / 低端设备
混合映射热数据页映射 + 冷数据块映射折中较好目前最常见的方案

页映射粒度最细、灵活性最高、性能最好,但映射表本身需要大量 DRAM。块映射表很小、省成本,但粒度太粗——修改一个 Page 就要搬整个 Block,写放大严重。混合映射是目前的工程折中:频繁变动的热数据用页映射保性能,不怎么动的冷数据用块映射省 DRAM。

三种FTL映射方式对比


磨损均衡:让闪存均匀老化

上集讲过,NAND 每个 Block 都有 P/E Cycle 上限。不同 Block 的擦写频率天然不均匀——系统文件、数据库索引这些热数据所在的 Block,擦写次数远高于存放照片、视频的冷 Block。

如果不干预,热 Block 早早报废,冷 Block 几乎全新。整体寿命远低于理论值。**磨损均衡(Wear Leveling)**就是解决这个问题的。

动态磨损均衡

  • 只在”正在使用中”的 Block 之间轮换
  • 新数据优先写入擦写次数少的空闲 Block
  • 实现简单,开销小
  • 局限:冷数据占着的 Block 永远不参与轮换——它们几乎不磨损,但也贡献不了寿命

中低端设备常用此方案。

静态磨损均衡

  • 连”冷数据”也会被搬走
  • 定期把冷数据 Block 的内容搬到擦写次数高的 Block,把冷 Block 释放出来参与轮换
  • 全盘 Block 均匀老化,寿命最大化
  • 代价:额外的数据搬移产生写放大

企业级 SSD 和高端 UFS 标配。又是取舍——寿命和性能之间的权衡。


坏块管理:出厂就有坏块?

出厂坏块

NAND 制造过程天然存在缺陷。晶圆切割时,边缘的 Die 良率偏低。出厂测试时,所有坏块都会被标记,标记信息存在 NAND 的特定区域。这部分容量对用户完全不可见。典型值:出厂坏块约占总容量的 2% 以内。

使用坏块

随着 P/E Cycle 消耗,氧化层退化,电子泄漏,读写错误率逐渐上升。当错误超过了 **ECC(Error Correction Code)的纠错能力范围,控制器就判定这个 Block 坏了——从预留的备用块(Spare Block)**中拿一个出来替换。

整个过程对用户完全透明。你从来不会看到弹窗说”你的存储芯片第 328 号 Block 已损坏”,但替换一直在后台默默发生。

当备用块耗尽——设备进入只读模式,保护已有数据。这时候就该换新设备了。现代的磨损均衡算法会和坏块管理协同工作:优先把热数据放在健康度高的 Block,进一步延长整体寿命。


CMDQ:让存储学会”多线程”

没有 CMDQ 的时代

eMMC 时代,控制器一次只能处理一条命令。读完了才能写,写完了才能读——读写必须排队。大量时间浪费在”等待”上。就像单车道收费站,一辆一辆过。随机小文件多的时候,性能急剧下降。

CMDQ 怎么工作

CMDQ(Command Queue,命令队列)让控制器同时接收多条读写命令,按优先级排序、合并相邻请求、甚至可以乱序执行——读写交叉并行,读请求不用等到写完成。

就像多车道加 ETC 不停车收费。APP 冷启动、游戏场景加载——这些大量小文件并发读的场景,CMDQ 的作用最明显。

UFS 2.1 开始引入 CMDQ,UFS 3.1 之后深度优化,现在已经是旗舰 UFS 的标准配置。

CMDQ前后对比:单命令串行 vs 多命令并行


同样的 NAND,不同的天花板

回到最核心的问题:为什么同样的 NAND 颗粒,不同品牌性能差距这么大?

三个层面决定差距:

算法水平。 FTL 映射效率、GC 触发策略、磨损均衡粒度、CMDQ 调度算法——这些全是各家自研的核心竞争力。好的算法 = 更低的 WA = 更少的 GC 触发 = 更流畅的日常体验。

DRAM 缓存。 有无 DRAM 差异巨大。DRAM 存映射表,纳秒级查询。没有 DRAM 就得去 NAND 里查表,延迟差 1000 倍以上。高端 UFS 配大容量 DRAM,低端方案用 HMB(Host Memory Buffer)借主机内存——性能有明显差距。

固件调优。 同一颗芯片跑不同固件,跑分可以差 30%。IO 优先级策略、温度墙和功耗管理、SLC Cache 策略、错误处理与恢复——这些”软”的调优,决定的是”硬”的实际体验。


完整闭环

控制器的四大支柱不是独立的——它们是一个闭环:

FTL 地址映射(所有 IO 的翻译枢纽)
    ↓ IO 请求产生
CMDQ 调度(智能排序、并行执行)
    ↓ 写入 NAND → 产生无效页
触发 GC(垃圾回收)
    ↓ 产生磨损
磨损均衡介入(均摊擦写)
    ↓ Block 损坏
坏块管理兜底(备用块替换)
    ↓ 重新回到 FTL 映射

把这条闭环记住了,控制器为什么叫”存储的大脑”就清楚了。


总结

  1. FTL 是逻辑到物理的翻译官,NAND 不能覆写的特性决定了地址映射是控制器的第一要务
  2. 磨损均衡分动态和静态两种——静态均衡寿命更长但写放大更高,又是取舍
  3. 坏块管理全程透明,出厂坏块 + 使用坏块都有备用块替换,用户无感知
  4. CMDQ 让 UFS 从”单线程”升级到”多线程”,是日常流畅体验的关键技术

NAND 颗粒可以买,DRAM 缓存可以加——但控制器的算法是各家自研的护城河。这就是”同样的颗粒、不同的体验”背后的技术真相。


系列导航

集数标题内容
第 0 集存储课程总览四大模块介绍
第 1 集到底什么是存储?内存与存储的本质区别
第 2 集存储类型大盘点HDD/SSD/eMMC/UFS 全解析
第 3 集为什么存储越用越慢?碎片、GC、SLC 缓存
第 4 集三大存储介质DRAM/NOR Flash/NAND Flash
第 5 集SLC/MLC/TLC/QLC 全解析速度、寿命、成本取舍
第 6 集存储参数怎么看?顺序读写与随机读写
第 7 集UFS 凭什么全面取代 eMMC?三大核心优势
第 8 集一文看懂 UFS 进化史2.0 到 4.1 技术迭代
第 9 集UFS 内部三大核心组成控制器+NAND+DRAM
第 10 集NAND 闪存芯片深度解析从浮栅管到写放大
第 11 集主控芯片深度解析👈 你在这里

下一集:DRAM 缓存——没有缓存的 UFS 会怎么样? 映射表有多大?HMB 是什么?有无 DRAM 实测差距多少?敬请期待!