基本内容

物理结构

闪存基本结构是类NMOS的双层浮栅MOS管
在源极(source)和漏极(Drain)之间电流单向传导的半导体上形成存储电子的浮栅,浮栅上下被绝缘层包围,里面的电子不会因掉电而消失,所以闪存是非以易失性存储器。

闪存结构

闪存不能覆盖写,只能擦除之后再写。

SLC、MLC和TLC

一个存储单元存储1bit数据的闪存,称之为SLC(single level cell)。存储2bit的称为MLC(multiple level cell),存储3bit的称为TLC(triple level cell),目前已有QLC(即每个存储单元存储4bit数据的闪存)。

SLC、MLC和TLC比较参数如下:

闪存类型 SLC MLC TLC
每单元比特数 1 2 3
擦写次数 约十万次 约5000次 约1000次
读时间(us) 约25 约50 约75
写时间(us) 约300 约600 约900
擦除时间(us) 约1500 约3000 约4500

同样面积的一个存储单元,数据存储越多,闪存容量越大,但性能逐渐减弱。

芯片架构

结构

一个闪存芯片有若干个DIE,每个DIE有若干个Plane,每个Plane有若干个Block,每个Block有若干个Page,每个Page对应一个Wordline,Wordline有成千上万个 存储单元

一个DIE中一次只能独立执行一个命令,一个Block当中的所有存储单元共用一个衬底。

DIE是接收和执行闪存命令的基本单元;Block是擦除操作的基本单元;Page是写入动作的最小单位。

无论是从闪存介质读数据到Cache Register,还是把Cache register的数据写入闪存介质,都已Page为单位。

闪存写入时间是指一个page的数据从page register当中写入闪存介质的时间。读相反。

对于MLC与TLC而言,写一个闪存块当中的闪存页,应该顺序写,禁止随机写。因为:

  1. 一个存储单元包含两个闪存页数据,要先写lower page,再写Upper Page

  2. 相邻单元之间有耦合电容,工艺上要求后面的闪存页写操作时前面的闪存页已经写过。

但对读没有这个限制。

对MLC来说,一个存储单元对应着两个page 假设lower page先写,然后在写Upper Page的过程中,如果这个时候掉电,那么值钱写入的lower page也会丢失。也就是说,写一个闪存页失败,可能会导致另外一个闪存页的数据损坏。

读、写、擦原理

闪存结构

擦除:Pwell加电,电子从浮栅到沟道,完成一个Block擦除,状态为1。

:要写的单元Wordline成为高电压,Bitline=0V,电子从沟道到浮栅,状态为0。

:不读的Wordline = 5V,管子保持导通;要读的单元Wordline = 0V,-Vt的管子导通。Bitline端的传感器能够感受到,所以读到1,经过写的+Vt的管子不导通,读到0。

主板BIOS与SSD连接过程

  1. 和SSD发生链接,协商到正确的速度上

  2. 发出识别盘的命令。

  3. 读取基本信息,直到BIOS找到主引导记录MBR

  4. MBR开始读取硬盘分区表DPT,找到分区引导记录PBR,并把控制权交给PBR

  5. SSD通过数据读写功能完成最后的OS加载

闪存特性

1、闪存坏块。

2、读干扰

  1. 擦写次数增多:氧化层逐渐老化,电子进出存储单元越来越容易。电荷容易发生异常。

  2. Data Retention:存储在存储单元的电子会流失,整个阈值电压分布向左移动,导致读数据的时候发生误判。

  3. 比特翻转。

3、写干扰

存储单元之间干扰:存储电子的浮栅极是导体,两个导体之间构成电容,一个存储单元电荷的变化会导致其他存储单元电荷变化。

4、写错误。如果写Upper Page基于Lower Page的状态。前一个出错会导致Upper Page出错。

5、ECC纠错码:闪存页空间除了用户空间还有额外预留空间,这部分空间可以用来写ECC纠错数据,越多的预留空间提供越强的ECC纠错能力。

6、RAID 纠错技术:类似磁盘阵列 Die p存储校验数据,为Die 0、1、2、3、提供异或,能恢复其中一个Die上的数据。 采用冗余纠错技术,需要额外的空间。

7、数据随机化:让0和1的分布隔离,避免不断地输入全0或全1导致闪存内部电量不均衡。

8、闪存块都是有一定寿命的。

9、每个闪存块读取次数有限。

10、MLC或TLC的读写速度都不如SLC,但他们都可以配成SLC模式来使用。

SSD核心技术:FTL

FTL(flash translation layer,闪存转换层)决定了性能、可靠性和耐用性的好坏,它完成主机逻辑地址空间到闪存物理地址空间的映射。

SSD每把一笔用户逻辑数据写入闪存地址空间,便记录下该逻辑地址到物理地址的映射关系,当主机读取时,SSD便根据此映射关系,从闪存读取这笔数据返回给用户。

FTL分为Host BasedDevice Based

Host Based (基于主机)用的是自己计算机的CPU和内存资源。

Device Based(基于设备) 用的是SSD上的控制器和RAM资源。

映射管理

根据映射粒度不同,FTL映射分为块映射、页映射和混合映射。

块映射:以闪存的块为映射粒度。用户即使只写入一个逻辑页,也要把整个物理块数据先读出来。改变后再写入。有好的大尺寸的读写性能,但小尺寸数据很慢。例如U盘。

页映射:每个页都有一个映射关系、因此需要更多的空间存储映射表。页映射的性能更好,尤其是随机写,一般SSD都是采用页映射。

混合映射:是上述两种的结合,一个逻辑块映射到任意一个物理块,但在块中,每个页的偏移并不是固定不动,块内采用页映射,块中的逻辑页可以映射到对应物理块中的任意页。性能介于块映射和页映射之间。

一般来说,映射表大小是SSD容量的千分之一(1/1024,在映射页大小为4KB,物理地址是4Byte),即256GB的SSD映射表大小为256MB。

HMB(host memory buffer,主机高速缓冲器),主机在内存中划出一部分空间给SSD当作DRAM使用。HMB映射表可以放在板载DRAM,SRAM、闪存和主机内存中。

映射表在SSD掉电前,需要把它写到闪存中。

垃圾回收

垃圾回收(garbage collection)分为简单三步:

  1. 挑选源闪存块。
  2. 从源闪存块中找有效数据。
  3. 把有效数据写入到目标闪存块。

垃圾回收分两种,一种是前台垃圾回收(Foreground GC),另一种是后台垃圾回收(Background GC)。

前台垃圾回收是在可用内存块小于一定阈值时做的,是被动方式。后台垃圾回收则是SSD空闲时主动去做的。

Trim

当用户删除一个文件时,其实只是切断了用户和操作系统之间的联系,即用户访问不到这些空间,而实际上在SSD内部,逻辑页与物理页的映射关系依然存在,文件在闪存中也是有效的。

Trim又叫Disable Delete Notify。Trim的作用是,当用户删除文件时,操作系统会发送Trim命令给SSD,告诉它对应的数据无效,当SSD知道这些数据无效后,就可以在垃圾回收时抛弃这些数据

Trim的好处是可以让SSD及时清理空间,避免无谓的数据搬移,这样做可以增强SSD的性能和寿命。

磨损平衡

磨损平衡(Wear Leveling)分为两种,即动态磨损平衡(Dynamic WL)和静态磨损平衡(Static WL),目的是让擦除/写入循环平均地分配到SSD的所有存储单元中,从而让每个闪存块的磨损都保持均衡。

动态磨损平衡是指,在写入新数据时,挑选较新的闪存块来写,避免一直往老的闪存块上写数据。

静态磨损平衡是指,将擦写次数少的闪存块上的冷数据搬到擦写次数多的闪存块上,从而腾出擦写次数少的闪存块来承受用户新的擦写。静态磨损平衡可能会使得冷数据和热数据,或者是GC数据混在一起。

掉电恢复

掉电恢复分两种。一种是正常掉电,另一种则是异常掉电。

正常掉电发生时,在掉电前,主机通过命令通知SSD做以下事情:

  1. 把buffer中缓存的用户数据刷入闪存
  2. 把映射表刷入闪存
  3. 把闪存块信息写入闪存
  4. 把SSD其他信息写入闪存

主机等SSD处理完以上事情后才会真正停止供电。待到重新上电后,SSD只需要把掉电前保存的信息重新加载便又能回到之前的工作。

异常掉电是指SSD还未接收到掉电通知就断电了,这样可能会导致SSD丢失数据。一种办法是SSD定期把SSD中RAM数据和状态信息写入到闪存,即Checkpoint,这种办法可以让映射表重建速度大大加快。

FTl架构划分

SSD有Host Based FTL和Device Based FTL两种模式。前者用的是主机上的CPU和内存,后者用的是SSD上的控制器和资源。

参考文章

《深入浅出SSD:固态存储核心技术、原理与实战》–SSDFans