SSD闪存的物理组织:为何以块擦除、以页读写?Die RAID如何容错?
天硕(TOPSSD) G40系列工业级固态硬盘采用自研主控及全链路国产化替代方案,可在 -40℃~85℃ 宽温范围内稳定运行;遵循国家军用标准进行设计验证,更能胜任严苛环境下的长时任务。系列产品长期服务军用嵌入式计算机、指挥控制系统、雷达、电子对抗、轨道交通与高端工业自动化等关键应用,是舰载、机载、装甲车辆等装备的优选核心部件。
当我们拿到一块标着 2TB 容量的 SSD 时,很难想象这个巴掌大的小盒子里,其实塞进了数以万亿计的存储单元。更让人惊叹的是,这些存储单元并不是杂乱无章地堆在一起,而是像一座设计精密的城市一样,有着层层递进的规划。
这篇文章,我们就从最底层的存储单元开始,一层一层往上,看看闪存内部到底是怎么组织的,以及天硕的 Die RAID 技术又是如何在这一架构上为数据安全加上一道保险的。
现在的闪存芯片,一个最小独立工作单元(Die)容量已经非常大了,常见的有 256Gb、512Gb,甚至 1Tb。
如果我们按一个存储单元能存 3 个比特来算,一个 1Tb 的 Die 最少需要大约 1024×1024×1024×1024 ÷ 3 个存储单元。
这么多存储单元,是怎样有条理地组织成一个 Die 的呢?
从大的结构看,一个闪存 Die 内部先分成许多块(Block),每个块里面又分成许多页(Page)。这里有个重要的规则:擦除操作的最小单位是块,而读写操作的最小单位是页。

现在主流的页大小是 16KB(实际比 16KB 略大,多出来的空间用来存放数据校验信息,不过我们后面都按 16KB 来介绍)。仅一个 16KB 的页,就需要至少 16×1024×8 个存储单元。那这些存储单元又是怎么进一步组成页和块的呢?这就要从更微观的角度来看了。
我们可以把闪存块想象成一张巨大的方格网:
l 横向的线叫字线(WL),
l 纵向的线叫位线(BL),
l 每一个交叉点上,就是一个存储单元(一个晶体管)。

晶体管的控制极连着字线,源极和漏极连着位线。根据闪存类型不同,一条字线上可以挂不同数量的页:
l 如果是 SLC(每个单元存 1 比特),一条字线就对应 1 个页;
l 如果是 MLC(每个单元存 2 比特),一条字线对应 2 个页,通常称为 LP 和 UP;
l 如果是 TLC(每个单元存 3 比特),一条字线对应 3 个页,通常称为 LP、MP 和 UP(不同厂商的叫法可能不一样)。
举个具体的例子:假设一个 SLC 闪存块总共由 1024 个页组成,那么横向就需要 1024 条字线。而一个页有多少比特,纵向就需要多少条位线。如果一个页是 16KB,那么位线数量 n 就等于 16×1024×8 条。也就是说,在这个块里,字线有 1024 条,位线有 16×1024×8 条,它们的每一个交叉点都是一个存储单元。
特别要说明的是,这一个块里所有的存储单元,都共用同一块衬底。当我们要擦除数据时,会给衬底加上一个很高的电压,把块内所有存储单元里的电子一下子“吸”出来,就好像用一块大磁铁把整个区域清空一样。所以,擦除操作只能以整个块为单位进行。
另外:这里没有考虑奇偶位线的情况。如果把奇偶位线也考虑进去,那么一条字线上对应的页数还会再翻倍。
了解了存储单元、页和块的微观结构之后,我们往上一层,看看一个 Die 内部还有哪些组织。每个 Die 内部又会划分成多个 Plane。早期闪存通常一个 Die 带 2 个 Plane,现在主流是 4 个 Plane,甚至已经有 6 个 Plane 的产品了。
为什么需要 Plane 呢?简单来说,Plane 让 Die 内部也能并行操作。每个 Plane 都有自己独立的页缓存和闪存缓存(也叫 Page Register 和 Cache Register),大小正好等于一个页的大小(16KB)。这些缓存是闪存内部的临时存储区,用来暂存即将写入或读出的数据。
有了独立的缓存,多个 Plane 就可以同时准备数据,读写效率大大提高。读写过程的思路很像搬运:
l 写的时候,主控先把数据从外面传到目标页所在 Plane 的缓存里,然后再把缓存里的数据正式写入闪存阵列;
l 读的时候刚好反过来,闪存先把需要的整页数据从阵列里读到缓存,然后再按需传给主控。
搞清楚了单个 Die 内部的结构(块、页、Plane),我们再往上跳一层,看看一个固态硬盘里多个 Die 是怎么协同工作的。

一个固态硬盘里通常贴着多颗 NAND 颗粒。以天硕G40 M.2 NVMe 2TB 宽温工业级SSD为例,它实际贴了 4 颗 512GB 的颗粒,连接到主控的 8 个通道(CH),每个通道下挂 4 个 CE,总共就是 8×4 = 32 个 Die。
Die 是接收和执行命令的基本单元。不同的 Die 可以同时接收和执行不同的命令(但有一些限制,不同厂商对多 Die 同时操作的规定可能不同)。但是,在同一个 Die 内部,一次只能做一件事,你不能一边在某个页上写数据,一边又在同一个 Die 的另一个页上读数据。
正是因为多个 Die 可以独立并行工作,天硕地自研主控采用了一种叫做“条带化”的管理方式。固件会把所有 Die 组织起来,形成一个横跨所有 Die 的超大逻辑块,叫作 Super Block,这是固件做空间管理的基本单位。
具体来说,还记得前面说的每个 Die 下面有 4 个 Plane 吗?固件会从每个 Plane 上各取一个 Block,组合成一个 Super Block。这样一共能组成 495 个 Super Block,每个容量高达 4236MB 左右。关键在于,每一个 Super Block 都跨越了所有 32 个 Die。
正是基于这种“数据天然就分散在所有 Die 上”的条带化管理,天硕的主控顺势实现了一项关键的容错技术:Die RAID(跨 Die 冗余)。

它的原理和我们熟悉的磁盘 RAID 5 很像,只是把范围缩小到了 SSD 内部的 NAND 颗粒上。写入数据时,主控会在 32 个 Die 中动态挑选 1 个 Die,专门用来存放根据其他 31 个 Die 的用户数据计算出来的校验信息(Parity Data)。这个存放校验信息的 Die 不是固定不变的,固件会根据磨损均衡和垃圾回收策略,聪明地动态调整,避免某个 Die 被过度使用。
这样一来,整个 SSD 就像上了保险。当某个 Die 上的数据读取出错时,主控会先尝试重读纠错;如果还是不行,就会立刻启动 RAID 恢复流程:主控的 RAID 模块会扫描出错的物理地址,然后读取同一个条带上其他所有 Die 的对应数据,通过异或(XOR)运算,反向推算出丢失的正确数据,再正常返回给主机。整个恢复过程对用户是完全透明的,这就大大增强了 SSD 的数据可靠性和安全性。
回顾整篇文章,我们其实是从最小的存储单元出发,一步步往上搭建出了一张完整的闪存组织结构图:无数个存储单元排列成页,页组成块,块和缓存一起归入 Plane,Plane 构成 Die。只有理解了这个从微观到宏观的层级关系,再看 SSD 的容量、性能和可靠性,很多技术细节就不再是孤立的概念,而是一张环环相扣的网络。
▎相关文章