SSD的核心由一个或多核心的CPU控制器、DRAM缓存以及多个NAND闪存芯片组成。CPU控制器负责管理所有读写操作,并通过DRAM缓存存储映射表等元数据,以加速寻址过程。
NAND闪存则是数据存储的实际介质,其组织结构从大到小依次为通道(包含多个封装)、Die、Plane、Block和Page。
读写操作流程
SSD的读写操作遵循NAND闪存的基本特性,即写入前需擦除(Erase-before-write),操作单位不对称(读/编程操作在Page级别,而擦除操作在Block级别),且具有有限的耐久性和数据保持性。
-
读取(Read):数据从NAND闪存的Page传输到SSD控制器的页面缓冲区,再传输至主机,延迟tR。
-
写(Program):数据从主机写入页面缓冲区,再编程到NAND闪存的Page中,耗时tPROG。
-
擦除(Erase):整个Block的数据被清除,tERASE通常需要毫秒(ms)级别。
SSD常见写入步骤:
写入过程中,host写入数据给到缓存,再由缓存下刷到NAND存储,需要注意的是写入数据后的垃圾回收GC。
-
写入命令与地址:SSD控制器向NAND闪存发送写命令和相应的页地址。
-
数据传输:数据通过I/O线从主机或SSD的缓存传输到NAND闪存的页面缓冲区。这个过程中,数据先暂存在缓冲区,随后批量写入存储单元。
-
数据编程:NAND闪存内部的接口电路将缓冲区中的数据编程到存储单元中。此过程通常需要几百微秒。
-
状态等待与确认:写入期间,SSD控制器会定期查询NAND的状态寄存器,等待写入操作完成的指示。
-
ECC编码与校验:在数据写入之前,根据SSD设计,会对数据进行ECC编码,以防止未来读取时的错误。写入后,可能会通过读回数据并对比原始数据进行校验。
-
GC(垃圾回收)和 Wear-Leveling:长期使用中,SSD控制器还需管理垃圾回收和磨损均衡,以维护性能和延长SSD寿命,但这通常不在单次读写操作流程内直接体现。
SSD常见读取步骤:
读取过程中,host发送数据读取请求,数据从NAND读取,这个过程可能会有因为NAND读取异常发送Read Retry。
-
命令发送:主机向SSD的控制器发送读取命令,通常伴随着要读取的页地址信息。
-
地址传输:紧接着,页地址通过命令/地址总线传送给NAND闪存控制器。在某些NAND架构中,地址传输可能分为行地址和列地址两个阶段。
-
读取命令确认:控制器发送一个确认读取命令到NAND芯片,以确保NAND准备进行读取操作。
-
NAND操作:NAND闪存芯片接收到命令和地址后,开始从指定的物理页中读取数据。数据首先被加载到NAND芯片内部的页面缓冲区。
-
数据传输:一旦数据准备就绪,NAND芯片通过I/O线将数据传输到SSD控制器。此时,NAND芯片会处于忙碌状态,直到数据传输完成。
-
状态检查:在数据传输过程中或完成后,SSD控制器需要监控NAND的状态寄存器,以确认操作成功完成。
-
数据校验:为了确保数据完整性,SSD控制器执行ECC(Error Correction Code)校验。如果数据在读取过程中发生错误,ECC可以帮助纠正这些错误。