SSD的物理结构和工作原理

_____egon新书来袭请看:https://egonlin.com/book.html

SSD的物理结构和工作原理

SSD是由SSD控制器,FLASH存储阵列,板上DRAM(可选),以及跟HOST接口,诸如SAS、SATA、或者PCIE也就是我们通常说的NVMe磁盘。它的结构图如下:

 

上面的Nand Flash表示的是Flash颗粒,SSD控制器通过若干个主控通道并行操作这些Flash颗粒,就像RAID0一样,这样可以提高数据写入的并行性以及效率。

每一个Flash颗粒又进一步细分为多个block(块),每一个block又包含多个page,在SSD内部,SSD控制器和Flash之间的最小访问单元粒度是page。一般一个page的大小为4k,一个block包括16个pages。在写入数据的时候,像raid0的工作机制一样,同时并行地将数据写入到每个Flash颗粒的一个block中的可用的page中,当一个block写满之后会接着写下一个block 。

目前磁盘的分区格式大都变为GPT(也就是EFI)了,也就是将整个磁盘按照线性地址空间组织起来,通过LBA(Logical Block Address,逻辑地址)来寻址,每个LBA代表一个sector。操作系统一般会以页的方式来访问SSD,当用户写入一页数据时,SSD控制器会从block中找到一个page来存放这些数据,并且同时将用户的LBA和flash颗粒中的page这种对应关系纪录下来,作为一条记录加入到SSD内部维护的一张映射表(Map Table),当有数据修改时,会更新映射表中的相应记录。当用户要读取相应的数据时,SSD首先会去查找Map Table中找到存放数据的pages,然后从中将数据读取出来返回给用户。

SSD的GC和写入放大

GC是(Garbage Collection,垃圾回收)的缩写,是固态硬盘(SSD)的一个基本技术,它对SSD的性能和寿命有直接的影响。这里主要介绍一下GC是如何工作的。

当使用机械硬盘时,文件系统可以直接将新数据写入到旧数据存储的位置,即可以直接覆盖旧数据。在固态硬盘中,如果想让存储无用数据的块写入新数据,就需要先把整个块删除,才可以写入新的数据,也就是说固态硬盘并不具备直接覆盖旧数据的能力。对于固态硬盘来说,GC(垃圾回收)是指把现存数据重新转移到其他闪存位置,并且把一些无用的数据彻底删除的过程。

数据写入的方式,以页面为单位写入,但是要想删除数据却需要以块为单位。因此要删除无用的数据,固态硬盘首先需要把一个块内包含有用的数据先复制粘贴到全新的块中的页面内,这样原来块中包含的无用数据才能够以块为单位删除。删除后,才能够写入新的数据,而在擦除之前是无法写入新数据的。

说了GC之后,再说一下经常听到的SSD的写放大问题。因为当写入新数据时,如果SSD控制器找不到可以写入的page时,会执行GC过程,然后GC机制会将一些block中的有效数据合并写入其他的block中,然后将这些block的无效数据擦出,再将新数据写入到这些block中,而在整个过程中除了要写入用户的数据之外,实际上SSD还写入了一些其他block合并过来的数据,所以这就叫写入放大。

闪存的编程和擦除次数有限。通常以闪存在整个寿命中最多可忍受的编程/擦除循环(P/E循环)次数来表示。单层单元(SLC)闪存,通常设计为高性能和长寿命,一般能有50000到100000次循环。截至2011年,设计用于低成本应用的多层单元(MLC)闪存,循环次数就大为减少,一般只有3000至5000次循环。自2013年起,已有三层单元(TLC)闪存,其编程-擦除(P/E)循环次数又降至1000。写入放大越低,则越为理想,因为与之对应的是闪存中P/E循环次数减少,所以能延长SSD的寿命。

解决写放大现象的一个有效的方法就是可以通过修改OP预留空间,以及及时清理固态硬盘中的无用数据,留出更多的空白空间,以减少多余的擦除和写入,从而降低固态的写入放大值,提升固态寿命,但这种方式最大的问题是对SSD造成了浪费,所以SSD固态硬盘应该如何正确使用呢?请看结论

 

SSD固态硬盘讲究少分区、小分区、不要装数据太满

固态硬盘“小分区”有必要吗?

  固态硬盘分区操作中,有“小分区”之说,就是不要把固态硬盘的容量都分满,保留一部分容量作为“空闲位置”,这些保留空间会被自动用于固态硬盘内部的优化操作,如磨损平衡、垃圾回收和坏块映射。小分区对固态硬盘真的很有必要吗?
  下面,我们来看看一组固态硬盘“小分区”与全部分区进行性能测试数据,480G的固态硬盘只分出约40G,其他容量不动,另外480G容量全部分区。

  从上述的测试成绩对比来看,全部分区与小分区各项性能几乎没有差异,总体的差距在0.3%左右,可以忽略不计了,也就是说“小分区”对于固态硬盘的性能并没有明显提升,事实上固态硬盘厂商已经考虑到为固态硬盘预留空间,例如一块128G的'固态硬盘,厂商一般会标称120G,剩下的部分就被设置成了预留空间,所以“小分区”对于固态硬盘是没有必要的
 
 
 
 
 
posted @ 2021-04-23 09:48  linhaifeng  阅读(1394)  评论(0编辑  收藏  举报