这一篇专门讲 SSD 最底层的存储介质 NAND Flash。文章目录0 前言1 SSD 为什么不是一块“可以随便改写的芯片”--- NAND Flash介绍1.1 浮栅MOS管 Cell1.2 按页写入 Page1.3 SLC/MLC/TLC/QLC1.4 按块擦除 Block1.5 层级2 NAND Flash 的物理效应与损伤2.1 读干扰 Read Disturb2.2 写干扰 Program Disturb2.3 数据保持 Data Retention2.4 寿命与老化 P/E Cycle0 前言在上一篇SSD入门一里我们已经把存储链路串起来了应用程序-文件系统-操作系统块层-NVMe 驱动-NVMe 命令-PCIe 传输-SSD Controller/FW-FTL 地址映射-NAND Flash上一节是概述现在开始介绍NAND Flash。请带着三个问题阅读本文它为什么能存储 0 和 1它为什么不能像内存或HDD原地覆盖写它的物理局限会在 SSD 行为上体现成什么1 SSD 为什么不是一块“可以随便改写的芯片”— NAND Flash介绍因为 SSD 底层是 NAND Flash。接下来我们从微观入手了解NAND Flash。1.1 浮栅MOS管 CellNAND 的最基本单元是 Cell。可以把它先粗略理解成一个能“困住电子”的小容器。把存入电荷/已编程/电子在浮栅记作0把已擦除/电子离开浮栅记作1。1.2 按页写入 Page当控制栅极Control Gate施加 20V 高压时衬底里的电子被吸上来在二氧化硅下面堆积把 S源极和 D漏极连通了。这时S、D 和中间的沟道实连成了一条通路。此时对位线接地也就是0V浮栅MOS管中巨大的压差产生的能量足以让电子直接穿透量子隧穿效应那层绝缘的二氧化硅冲进浮栅层。如果位线“通电”了比如给个3.3V高压 这就是所谓的“编程禁止”Program Inhibit。浮栅MOS管中压差变小了电场强度不够电子就冲不破二氧化硅墙。写入时对选中字线Word Line对栅极施加高压脉冲使该行单元进入可编程状态。通过位线Bit Line控制沟道电位实现选择性需写入的单元位线置低0V以维持巨大的垂直压差诱导电子隧穿进入浮栅无需写入的单元位线抬高电位进行自提升抑制Self-Boosting Inhibit防止误写。1.3 SLC/MLC/TLC/QLC在刚才的字线栅极高压中并不是一直持续的而是一次次脉冲。采用 ISPP步进脉冲编程 算法通过控制进入浮栅的电子数量将单元阈值电压V t h V_{th}Vth​精确划分为不同区间从而使 SLC 到 QLC 分别存储 1 至 4 Bit 数据。随位深增加存储密度倍增但由于电压状态越发密集电压容限收窄Voltage Margin Narrowing导致 P/E 寿命、可靠性及性能随之衰减。1.4 按块擦除 Block擦除是电压加在衬底上会把整个柱子块里的电子吸走。擦除操作是编程的反过程通过向衬底P-well施加约 20V 的高压并将选中块Block的所有字线接地0V利用强电场将浮栅层中的电子吸回衬底。由于同一块区内的单元共享衬底擦除只能以块为最小单位执行使所有单元回归“1”的逻辑状态即阈值电压最低状态。1.5 层级层级英文解释并行/操作单位典型关系/数量ControllerControllerSSD主控芯片负责FTL、调度、协议处理等系统级调度一个SSD一个ChannelChannel主控到NAND的物理通道每个Channel可挂多个Chip最外层并行单位常见4/8/16个ChipPackage/Chip物理封装芯片黑色颗粒内部包含多个Die通道内挂载单元一个Channel可挂多个ChipDieDie物理晶粒核心存储/执行单元关键并行单位一个Chip通常1~4个DieLUNLUN逻辑单元通常与Die一一对应调度并行单位控制器按LUN调度PlanePlaneDie内部子分区共享外围电路支持multi-plane操作Die内部并行受限一个Die通常2或4个PlaneBlockBlock擦除最小单位擦除单位一个Plane数千个BlockPagePage读写最小单位读写单位一个Block数百个PageCellCell存储单元浮栅/电荷陷阱可存1~4bit存储单位一个Page数万个Cell2 NAND Flash 的物理效应与损伤很多 SSD 行为看起来像“固件策略”但其根子其实来自 NAND 的物理特性。2.1 读干扰 Read Disturb读取某一 Page 时必须给同 Block 内其他未选中的 Page 施加一个中等偏高的**通过电压Pass Voltage,V r e a d V_{read}Vread​**以导通沟道。副作用 虽然V r e a d V_{read}Vread​远低于编程电压但多次读取后微弱的电场也会诱导少量电子意外进入非选中单元的浮栅导致其阈值电压漂移引发比特翻转。FTL 对策 当读取次数达到阈值Read Reclaim固件会将该 Block 数据搬移至新块。2.2 写干扰 Program Disturb给选中字线WL施加 20V 编程电压时由于电容耦合效应相邻的未选中字线或位线也会受到电位干扰。副作用 即使有“自提升抑制”保护高频次的编程操作仍可能导致临近单元的电荷状态发生偏移。这也是为什么 NAND 通常要求顺序编程Sequential Programming以减少耦合干扰。2.3 数据保持 Data Retention电子被封锁在浮栅中但二氧化硅绝缘层并非绝对完美。物理现象 随时间推移电子会缓慢向衬底“泄漏”。高温会剧烈加速这一过程。后果 存放时间过长如掉电存放一年后电荷流失导致阈值电压下降读取时数据出错。2.4 寿命与老化 P/E Cycle每一次“擦”和“写”电子都要强行穿过二氧化硅绝缘层。物理损伤 绝缘层会在电子的反复冲击下产生缺陷Traps形成“物理性损伤”。表现 随着 P/E 次数增加绝缘层越来越像漏风的墙电子进去容易出来也快最终导致 Block 无法可靠存储电荷成为坏块Bad Block。