本文主要介绍固态盘的基础知识,包括固态盘的结构、闪存特性、闪存转换层(FTL)功能概述、FTL和主机的关系等。

固态盘结构及闪存特性

大部分的固态盘是基于NAND闪存的,固态盘的体系结构如图1-1/图1-2所示。固态盘通过硬件接口与主机进行数据和指令的交互,并且设置了【闪存转换层】这个软件层次对固态盘进行地址映射、垃圾回收、磨损均衡等的管理。固态盘内部具有很多的闪存颗粒(即闪存芯片),这些闪存颗粒作为固态盘内部的存储单元存储数据;为了管理闪存颗粒的数据读取和写入,固态盘内部设置了闪存控制器来对闪存颗粒的操作进行控制。不同的闪存颗粒通过不同的通道进行数据的并行传输,以增加带宽、提高固态盘数据访问速度。 闪存芯片具有多层次的内部存储结构,如图1-1、1-2所示,闪存芯片根据粒度由小到大可划分为页(Page)、块(Block)、组(Plane)、晶圆(Die)和芯片(Chip)。每个芯片中包含一个或者多个晶圆(Die);一个晶圆中有多个组(Plane);每一个组中都有一个寄存器,用于在读写过程中缓存数据,在内部数据准备好后通过不同的通道将数据进行传输;一个分组中又包含数百上千个块(block),每个块又由多个页(page)组成。页是读取和编程操作的基础单元,而块是固态盘擦除操作的基本单元。

图1-1 固态盘内部结构

图1-2 固态盘内部结构

由于闪存介质的存储原理和结构的特殊性,闪存存储器具有以下的一些特点: (1) 读、写、擦除粒度不一致:闪存读、写操作的粒度为闪存页,而擦除的操作粒度则为闪存块,对一个块进行擦除操作时将擦除块内所有的页。除此之外,其读、写操作的延迟为微秒(us)量级,而擦除操作的延迟则为毫秒(ms)量级。 (2) 不可覆盖写:存储单元通过注入电子造成电压的改变来表示不同的数值,因此存储单元的状态闪存将不会受到读操作的影响,而代表写操作的编程操作则需要对存储单元注入电子,因此在写入之前需先将存储单元中现有电子抽空,也即在写入操作之前要先进行擦除操作,而不可以使用直接覆盖在原数据上的方式进行写入。这个特性又叫做闪存的“写前擦除”特性。 (3) 有限次的擦除:擦除、编程的操作将对存储单元进行电子的充入、抽空,闪存单元的氧化层将因这些操作的进行而耗损,因此其存储电子的可靠性将会降低,存储单元的保持力也会下降,数据也面临丢失的风险;随着编程、擦除操作的进行,氧化层越来越薄直至被写穿,因此闪存单元使用最大编程/擦除次数来表示其寿命和耐久性。 闪存存储器的上述特性导致其数据更新方式为异地更新,而不是像磁盘一样采用原地更新的方式。原地更新是指将存储介质上的数据块读出并修改后,再写回到其原始位置。而异地更新是指将存储介质上的数据读取到内存进行修改,然后写到存储器中的新位置,这个过程中不覆盖旧数据。 若仍采用原地更新,则在更新之前则需要将旧数据所在的块进行擦除,耗时较长,延迟较大,且块中不需要更新的页也将被擦除,除此之外,如果某个闪存块存储的数据更新频繁,则对其的擦除次数将会增加,该块的可靠性也将降低。采用异地更新的策略,在数据需要更新时,将原存储位置的旧数据标记为无效,然后将新数据写入到新分配的物理页中,而固态盘内的“垃圾回收”操作将把被标记为无效的旧数据进行清理从而回收存储空间。

闪存转换层(FTL)功能概述

如上节所述,基于NAND闪存的固态盘具有异地更新、不可覆盖写等特性,这些特点在以磁性介质为基础的机械硬盘中是没有的,而为了方便上层文件系统对固态盘的使用,需要对文件系统屏蔽底层介质的这些特点。因此在固态盘内部引用闪存转换层来实现对闪存的基本管理。 闪存转换层的三个核心功能,地址映射、垃圾回收和磨损均衡,这三个功能在不同的方面对固态盘进行管理。

  • 地址映射:由于闪存的不可覆盖写等的特性导致闪存存储器需采用异地更新的策略,因此在数据更新时,新数据将写在一个新的闪存页内,其存储位置也随之发生了改变。为了记录数据在闪存上的最新位置,闪存转换层引入了地址映射功能。为了向主机屏蔽固态盘内部异地更新的存储策略,地址映射算法通过维护地址映射表来对物理地址和逻辑地址的对应关系进行更新。当数据更新时,地址映射表中与该逻辑地址对应的物理地址将随着更新数据存储的物理地址位置进行更新维护。通过这种方式,主机只需要对逻辑地址进行管理,而不需要对固态盘内部的映射关系进行维护。地址映射根据粒度不同,可以分为页映射、块映射以及混合映射。
  • 垃圾回收:垃圾回收主要通过回收固态盘中的无效数据来回收存储空间。闪存异地更新的策略导致在数据更新后,旧数据所在的页将被标记为无效,因此在一个块中将可能存在无效页和有效页,而垃圾回收则是在存在有无效页的闪存块集合中挑选回收块进行回收,选中回收块后,将其中的有效页的数据迁移到其他空闲块中以达到回收块中的数据全部为无效的状态,最后将擦除整个回收块,并将其标记为空闲状态,从而达到释放无效数据、回收存储资源的目的。图2为垃圾回收的过程示意,首先闪存转换层将选择一个含有无效页的闪存块作为回收块,接着将回收块中的有效页(图中A、B、C、D页)进行数据迁移,将其迁移到闪存块 #N中的空闲页中,最后将回收块进行擦除,并标记为空闲块[16]。由于垃圾回收过程中将进行有效页的迁移和回收块的擦除,因此垃圾回收操作是较为耗时的,也是降低固态盘性能的一个重要原因。如果能够合理安排数据,从而使回收块中的有效页数较少,即需要迁移的有效页数减少,也将大大提高垃圾回收的效率,减少对固态盘性能的影响。

image.png 图2 垃圾回收基本过程

  • 磨损均衡:主要是考虑了闪存块有限次写的特性。一个闪存块通常可以擦除1万到10万次,一旦超过这个次数,闪存将变得不稳定甚至损坏,会降低数据存储的安全性。例如有的闪存块被频繁更新而被频繁的写入和擦除,而有的闪存块存储的数据则在较长的时间内都不更新而不用被频繁的写入和擦除,久而久之,被擦除频繁的闪存块将比擦除操作不频繁的闪存块寿命短。为了避免这种情况,磨损均衡算法将所有的闪存块损耗程度达到均衡状态,均匀地在不同的闪存块上进行擦除操作,避免部分闪存因频繁的擦除操作而过早被损坏。

FTL和主机的关系

FTL分为基于主机(Host Based)和基于设备(Device Based)两种状况,前者表示FTL是在主机(Host)端完成的,例如开放通道SSD(OCSSD);后者则是在设备(Device)端实现的。前者使用的是计算机的处理器CPU和内存资源,后者使用的是固态硬盘SSD上的控制器和RAM资源。

image.png