3.10 固态存储介质和固态硬盘
3.10.1 SSD固态硬盘的硬件组成
SSD是一种利用Flash芯片或者DRAM芯片作为数据永久存储的硬盘。
磁盘使用磁粒子区域来保存1或者0,芯片用电荷来表示。充满电表示0,放电后表示1。浮动门(Floating Gate ,FG)的名称也由此而来,Cell是利用FG中的电势值来与阀值对比从而判断其表示1或者0的。每个Cell串是由多个Cell串联而成的,每个Cell串每次只能读写其中一个Cell,多个串是由多个Cell串联而成的,每个Cell串每次只能读写其中一个Cell,多个Cell串并联则可以并行读写多位数据。通常一个Page中的所有位中的每个位均位于一个Cell串相同的位置上,那么对于一个使用2122B/page的芯片来讲,就需要16896个cell串,需要16896条串联导线。字线和串线组成二维矩阵。
如下图所示,为一片16GB容量的Flash黁吗的逻辑方框图。每4314x8=34512个cell逻辑上形成一个Page,每个Page中可以存放4KB的内容和218B的ECC校验数据,Page也是Flash芯片IO的最小单位,每128个Page组成一个Block,每2048个Block组成一个区域(Plane),一整片Flash芯片由两个区域组成,一个区域存储奇数序号的Block,另一个则存储偶数序号的Block。两个Palne也可以并行操作。
3.10.2 从Flash芯片读取数据的过程
SSD的IO最小单位为1个Page。所以,对于NAND Flash,通过"强行导通所有未被选中的Cel
l" AND "检测位线的通断状态" = "被选中的Cell的通断状态" NOT 被选中的Cell的通断状态 = "位线的1、0值" 把整个Page的1或者0传输到芯片外部,放置于SSD 的RAM Buffre中保存,这就完成了一个Page内容的读出。
3.10.3从Flash芯片写入数据的过程
对Flash芯片的写入由一些特殊的步骤。Flash芯片遥控器再修改一个Cell中的位的时候,在修改之前,必须线擦除掉这个Cell。这个擦除动作就是将一大片的连续的Cell一下子全部放电,这一片连续的Cell就是一个Block。每次只能擦除一整个Block或者多个Block,将其中所有的Cell变为1状态。却不能擦除某个或者某段Page,或者单个或者多个Cell。这一点是造成后面将要叙述的SSD的致命缺点的一个根本原因。Erase完成后,待写入数据恰好为1时,不做操作。,待写入数据为0时,对Cell中的FG进行充电,充电之后,Cell的状态从1变为0.完成写入。这个写0动作又叫做Programm。SSD会以Page为单位进行写入操作,写完一个Page,再写下一个Page。
3.10.4 Flash 芯片的通病
1.Erase Befor Overwrite
如果仅仅需要更改某个Block中的某个Page,那么就需要Erase整个Block,增大了写开销,这是缓存很大的原因。
2.Wear Off
Cell 容易损坏,损坏的Cell将拖累这个Cell所在的整个Page,因为SSD寻址和IO的最小单位为Page,损坏的Page对应的逻辑地址将被重定向映射到其他完好的预留Page
3.10.5 NAND与NOR
NAND 表示 非与,NOR 表示非或
3.10.6 SSD五剂良药
1.透支体力,拆东墙补西墙
每次写,都写到SSD中的Free Space中。SSD将写操作,平衡到所有可能的Block中,降低单位时间内每个Block的擦写次数。避免Wear Off过快的算法称为Wear Leveling,损耗平衡算法。
2.定期清除垃圾
从文件系统层面扫描垃圾,SSD厂商提供一个Wiper工具,这个工具扫描文件系统内不用的逻辑地址。
3.持续清除垃圾
TRIM是ATA指令标准中的一个功能指令,可以让文件系统在删除某个文件之后,实时通知SSD回收对应空间。
4.精神修炼提升内功
Delay Write 对于针对同一个地址的IO,直接将后者的写覆盖前者,当然要保证这两个写操作之间没有读。
Combine Write整合小IO合并为大IO
5.救命稻草有备无患
为了防止文件系统将数据写满的极端情况,SSD干脆预留一部分备用空间用于重定向写,这部分空间并不告诉操作系统
【存储知识学习】第三章磁盘原理与技术3.10 固态存储介质和固态硬盘-《大话存储》阅读笔记