查看原文
其他

全面了解SSD,SSD关键术语全面解析

SunnyZhang 数据存储张 2024-05-06


在前文《深入了解一下SSD的相关内容》一文中我们介绍了SSD硬盘的内部结构和存储颗粒的读写特性。本文我们将进一步深入存储颗粒,介绍其中内部的更多细节以及与此相关的一些术语。

我们继续深入到SSD的内部,SSD闪存颗粒分为NAND和NOR等不同的种类,目前SSD硬盘以NAND为主。NAND闪存的名称来源于其内部使用的逻辑门的类型,NAND闪存的特性是擦鞋速度块、存储密度高和成本低。得益于上述特性,NAND闪存颗粒得到了非常广泛的应用。

我们先来看看NAND闪存的实现原理。NAND闪存最基础的单元是浮栅晶体管,而NAND闪存存储数据的原理是海量的浮栅晶体管构成的矩阵,具体如下所示。我们可以放大其中一个浮栅晶体管,向右旋转90度后的放大图如下图右侧所示。    

可以看到浮栅晶体管由控制极、氧化层、浮栅极、源极和漏极构成。其中浮栅极可以存储电子,上下被氧化层包围,避免电子流出。对于浮栅极,如果其中没有电子,则可以表示状态“1”;存储电子后可以表示状态“0”。与机械硬盘不同,浮栅晶体管写操作只能将“1”改写成“0”,不能将“0”改为“1”。如果想将“0”改为“1”,需要采取另外一个称为“擦写”的操作。

对于上述写操作,实际上是将电子拉入浮栅极,状态就变成了“0”。对于擦写操作则是将浮栅极中的电子拉出,这就是将其状态变成了“1”。这里需要注意的是擦写操作会损伤隧道氧化层,如果隧道氧化层被完全损毁,那就失去了隔离电子的能力,这样这个晶体管就坏了。这就是为什么SSD的闪存颗粒有擦写次数限制的原因。

上面介绍的浮栅晶体管只存储一个bit的数据,我们称为SLC(Single-Level Cell)。其实除了SLC外还有MLC、TLC和QLC不同类型的闪存芯片。其中MLC全称是Multi-Level Cell,一个浮栅晶体管中可以保存2bit的数据。TLC的全称是Triple-Level Cell, 每个浮栅晶体管可以存储3bit的数据。QLC的全称是Quad-Level Cell,其中每个浮栅晶体管可以存储4bit的数据。

对于一个浮栅晶体管存储多个bit数据的闪存芯片,其原理是通过浮栅晶体管中电荷的数量进行区分的。以MLC为例,他有4中状态,分别为00, 01,10和11。那么电子数量与状态的关系可以用下图表示,实际读取数据时表现为阈值电压不同。    

由于MLC、TLC和QLC需要严格控制电子数量,其写入动作就要繁琐很多,对应着写入速度就会变慢。同时,氧化层的寿命也会有差异。但是存储多种状态也有个好处,那就是单位容量增加了。

如下是SLC、MLC和TLC的特性对比图,这里面有个非常重要的指标是Endurance,也就是耐久性。图中耐久性的单位是P/E(Program/Erase)周期,也就是编程/擦写周期。由于每次擦写都会损伤浮栅晶体管的氧化层,这个指标描述了可以安全擦写的次数。对比可以看出,SLC可以擦写5万到10万次,而TLC只可以安全擦写大概1千次。

基于上述擦写次数的限制,SSD的寿命也就受此影响。接下来我们介绍几个与SSD寿命相关的术语。

TBW(Total Bytes Written,总写入字节数):这是其实是一个SSD的指标,用于衡量 SSD 可以写入多少数据。如下是TBW的公式,可以看出TBW是SSD的容量与P/E周期数的乘积,然后除以一个写放大因素。对于前面的乘积是很容易理解的,相当于每个单元都被擦写到极限次数了。举例来说,如果一个MLC的SSD的容量为128GB,P/E为3000,那么理论上来说可以反复写入384TB的数据。但是我们知道SSD的写数据是有最小粒度限制的,比如4KB或者8KB。所以,即使你写入1个自己的数据,那也要写4KB或者8KB的一个页。鉴于上述原因,在TBW的公式里面有有个写放大因素的系数在这里。    

         

 

当 SSD 的 TBW 达到制造商指定的极限时,说明每个浮栅晶体管可能都擦写的最大次数了,此时SSD 可能会开始出现故障。我们可以通过 SSD 的 SMART 数据来查看当前的 TBW。

DWPD(Drive Writes Per Day,每日驱动器写入):这是一个衡量 SSD 每天可以写入多少数据的指标。他表示在设备保修期内,每天可以写入SSD总容量的多少倍。举个例子,如果一个128GB的SSD,如果DWPD是 1,每天可以写入128GB的数据。但是如果此SSD设备的DWPD是2的话,那么每天可以写入256GB的数据。

那么DWPD是如何得到的呢?可以通过如下公式得到。假设一个128GB的SSD的TBW是384TB,保修期为3年,那么其DWPD为2.88。

PE Cycles(Program/Erase Cycles,编程/擦除周期):我们前文见过这个术语,但没有过多介绍。这是指标用于衡量 SSD 闪存单元可以被重新写入多少次。当一个内存单元的 PE Cycles 用完时,这个内存单元就不能再被写入数据。我们通过 SSD 的 SMART 数据来查看当前的 PE Cycles。

SMART(Self-Monitoring, Analysis and Reporting Technology,自我监控、分析和报告技术):前面多次提到过这个术语,这是一个硬盘健康状态监控机制,可以提供 SSD 的各种健康状态信息,包括上述的 TBW 和 PE Cycles,以及其他如温度、错误率等信息。

前文我们知道SSD每次最少要写一个页(通常为8KB或者16KB)的内容。而且写过的内存不能修改,只能擦写后重新写。而擦写的粒度为一个块,一个块通常为512KB或者1MB。鉴于上述特性,SSD有如下一些术语。    

Write amplification(写放大):假设SSD的页大小为8KB,那么即使应用想写入1字节的内容,实际写入SSD的数据也是8KB。也就是实际写入的数据要比想想入的数据大,这就是写放大。

Wear Leveling(磨损均衡):由于SSD的存储单元有擦写次数的限制,SSD控制器的算法会尽量保证闪存芯片的存储单元之间均匀分配写入操作,以最大限度地延长SSD的寿命。对于存储系统来说也有磨损均衡的说明,比如一个有100块SSD的存储系统,通常也有算法保证这100块SSD的数据写入是均衡的。

TRIM:这是一种操作系统级别的命令,操作系统用它来告诉SSD哪些数据块不再被使用,可以被擦除和重写。在文件系统层面,如果一个文件被删除后相关的数据被标记为可使用状态,当有其他文件使用存储空间是可以使用这些空间。在SSD中由于不能覆盖写,这些释放的空间需要被擦写后才能使用。这样新的写操作延时就会比较大,因为擦写的延时通常比直接写要大很多。通过TRIM命令,当文件删除时,文件系统可以直接通过SSD哪些数据块可以释放,此时SSD可以提前擦写释放空间,从而在一定程度上优化性能。

Garbage Collection(垃圾回收):由于SSD的空间不能直接覆盖写,必须擦除后才能重新写数据,这就涉及一个垃圾回收的问题。如下图所示,左侧时SSD中两个块的状态。这两个块都被写满了,但大部分页都被释放,只有少数几个页被使用。如果等所有页都空闲后再擦除这个块,有可能面临没有空闲块可用的情况。因此,一般情况是SSD控制器会将上述两个块的使用的页的内容搬运到其他块中,然后将原来的块擦除掉,这样就有更多的空闲块可用了。    

基于上述机制,当一个SSD的写入的数据比较多,快达到其最大容量是,后续的写入性能大概率会降低,其原因就是空闲的块太少了,垃圾回收会导致性能降低。

FTL(Flash Translation Layer,闪存转换层):我们知道SSD在操作系统层面呈现的是一个线性空间,而其内部通常包含多个闪存颗粒。因此逻辑的线性空间和物理空间需要一层映射关系,这就是FTL实现的。其实FTL不仅仅为了映射多个闪存颗粒,还用于解决坏块问题、写放大问题和磨损均衡问题。

到这里我们介绍SSD相关的主要的术语,尤其是对数据读写相关的术语进行了比较详细的解释。这些术语和概念在设计存储系统的时候非常有用,有些是必须要考虑的问题,比如写放大问题。

由于公众号文章不能自由编辑,一些历史文章难免有些错误。本号整理了一些系统的文档,有兴趣的同学可以下载阅读。同时这也是一个专注数据存储技术的社区,大家可以在这里讨论有深度的存储技术知识!





         

 

   

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存