数据存储架构与技术
上QQ阅读APP看书,第一时间看更新

2.2.1 闪存单元与结构

闪存单元与传统 CMOS(Complementary Metal Oxide Semiconductor,互补金属氧化物半导体器件)单元相比,增加了一层浮栅(Floating Gate),如图2.9所示。浮栅与衬底(Subtrate)之间有一层氧化物绝缘层,称为隧穿层。闪存单元通过施加电压将电子充入浮栅。由于隧穿层的存在,电子不容易逃逸,因为浮栅可以较为稳定地保持电子的状态,从而来表示闪存单元的状态。

图2.9 闪存单元的结构[1]

闪存单元通过感应和改变浮栅中电荷的多少对数据进行读写。写入数据是向浮栅注入电荷形成电荷势阱,以表示数据“0”;浮栅中未注入电荷表示数据“1”。读数据时通过感知位线上的电平高低来识别“0”和“1”。

闪存单元可根据每个存储单元存储比特的多少分类,包括 SLC(Single Level Cell,单级单元)、MLC(Multi Level Cell,多级单元)、TLC(Triple Level Cell,三级单元)和 QLC(Quad Level Cell,四级单元)等,如图2.10所示。SLC表示一个存储单元只存储1比特。这时候只需要区分浮栅上是否存有一定量的电荷即可。MLC表示一个单元存储2比特。这时候不但要区分该单元是否存储了电荷,还需要判断其存储了多少电荷,且需要控制对浮栅编程的电荷数量。TLC表示一个存储单元存储3比特。QLC表示一个存储单元存储4比特。以 TLC模式举例,将 TLC存储的比特,分为 Lower Bit、Upper Bit和 Extra Bit,读取 Lower Bit需要一个读电压即可,读取 Upper Bit和 Extra Bit则需要多个读电压。

图2.10 闪存多比特单元

闪存具有如下特性。

写前擦除:在闪存中,闪存单元的编程为单向编程,即仅支持从状态“1”写为状态“0”,而不支持从状态“0”写为状态“1”。闪存在重写一个页前,需要进行擦除操作。闪存以页为单位读写,以块为单位擦除。

读写粒度与擦除粒度不同:闪存的读、写及擦除操作的延迟差异较大。单个闪存页的读平均延迟为十微秒量级,写平均延迟为百微秒量级,而擦除的平均延迟在毫秒量级。

磨损问题:闪存单元具有有限次的 P/E(Programming/Erase,擦/写)操作,即每个闪存单元具有有限的寿命。闪存单元在接近擦写次数极限时,无法可靠存储数据状态。这被称为闪存的耐久性(Endurance)问题。尽管存储密度得以提升,单位容量价格降低,但闪存的耐久性问题却愈加严峻。每个 SLC闪存单元可承受100000次 P/E操作,每个 MLC闪存单元可承受10000次 P/E操作,而每个 TLC闪存单元可承受的 P/E操作次数仅为1000次。

为避免 P/E 操作引入的延迟,闪存采用异地更新的策略进行页重写,即将新的页重定向到空闲闪存页,并标记当前页为无效页,以进行后续回收。

在 SSD内部,闪存芯片通过不同的通道连接到闪存控制器,如图2.11所示。在闪存芯片中,单个芯片封装了多个颗粒,每个颗粒可独立执行指令。每个颗粒包含多个闪存片,每个闪存片拥有独立的寄存器,可提供多闪存片之间的流水指令执行。

图2.11 SSD内部结构示意

注:FTL即 Flash Translation Layer,闪存转换层。

NAND芯片内部结构如图2.12所示,该图展示了一个 Target的结构。一个封装的 NAND芯片内部可能包含多个 Target,每个 Target都由一个独立的片选信号CE#控制,每个 Target 可能包含多个 LUN(Logic Unit Number,逻辑单元号)/芯片(Die),通常为1个、2个、4个或8个等,LUN 是执行指令的最小单元,不同的 LUN可以并行地执行指令。每个 LUN内,可以被划分为一个或者多个平面,每个平面对应一组闪存块和一个缓存。闪存块是执行 P/E 操作的最小单位,由若干个 WL(Word Line,字线)控制的存储单元组成。页(Page)是执行读/写操作的最小单位,对于 TLC而言一个 WL对应3个页,包括数据部分和冗余部分(带外数据)。除了不同 LUN 之间可以并行执行指令外,同一个 LUN 内部的不同平面也可以并行执行一些操作。

图2.12 NAND芯片内部结构

通过不同级别的并发,SSD可提供充足的访问带宽。这一特性被称为 SSD的内部并发特性。表2.1给出了 SSD与磁盘的性能比较。

表2.1 SSD与磁盘的性能比较[2]