文章目录
- 固态硬盘SSD之Flash闪存的基本概念
- Flash闪存的类型
- NAND Flash的结构
- NAND Flash闪存的读写
- 闪存转换层(FTL:Flash Translation Layer)
固态硬盘SSD之Flash闪存的基本概念
固态硬盘,又称固态驱动器,是用固态电子存储芯片阵列制成的硬盘。其下的存储介质大致可分为以下几类:
- 闪存(FLASH芯片)
数据保护不受电源控制,能适应于各种环境,适合于个人用户使用。寿命较长,根据不同的闪存介质会有所不同。可靠性也很高,高品质的家用固态硬盘可轻松达到普通家用机械硬盘十分之一的故障率。 - DRAM
动态随机存取存储器(Dynamic Random Access Memory,DRAM)是一种半导体存储器,主要的作用原理是利用电容内存储电荷的多寡来代表一个二进制比特(bit)是1还是0,需要周期性地充电来定时刷新。 - 3d XPoint
3D XPoint的工作原理与NAND存在着根本性的不同。NAND通过绝缘浮置栅极捕获不同数量的电子以实现bit值定义,而3D XPoint则是一项以电阻为基础的存储技术成果,其通过改变单元电阻水平来区分0与1。
关于DRAM和3d XPoint以后有机会再聊,这一篇博客主要讲一下目前最广泛应用的——基于Flash闪存的SSD。
Flash闪存的类型
Flash闪存可分为两类:NOR闪存和NAND闪存。
NOR闪存的访问模式为线性随机访问,存储能力比较低,擦写次数约为10~100万次,写入和擦除的速度较慢,比较适合用来进行程序的存储;NAND闪存的访问模式为以页的方式进行访问,单元存储密度高,擦写次数约为1~10万次,写入和擦除速度很快,比较适合存储大量的数据。这两者也存在着一些共同点,比如NOR闪存和NAND闪存的写代价和擦除代价都要明显高于读代价,都需要进行“写前擦除”操作,都存在擦除次数的限制等。
目前,几乎所有的BIOS和一些机顶盒上都是使用NOR Flash,它的大小一般在1MB到32MB之间,价格昂贵,而NAND Flash则广泛应用在各种存储卡,U盘,SSD,eMMC等等大容量设备中,现有的大部分研究很多都基于NAND Flash。
NAND闪存包含两种类型:SLC(Single-Level Cell)和MLC(Multi-Level Cell)。MLC比SLC的存储密度更高,由于MLC比SLC价格更低,容量更高,因此,它已经被用于很多低端的消费类电子产品中。但是,SLC结构简单,在写入数据时电压变化的区间小,所以寿命较长,传统的SLC NAND闪存可以经受10万次的读写。由于SLC比MLC具有更高的速度和寿命(寿命通常是MLC的10倍[ChenKZ09]),因此,SLC大多用于对性能和可靠性要求较高的工业化应用中。
NAND Flash的结构
闪存芯片有多个层次组成,粒度由小到大分别是:页(page)——块(block)——分组(plane)——晶圆(die)——芯片(chip)
chip:芯片层是最外层结构,通常,芯片层拥有一套完整的外围电路,外部信号线。在很多时候,闪存厂商为了节约成本和空间,将多个芯片在物理上叠加起来,叠加在一起的每个芯片有一个独立的片选信号和一个独立的工作状态信号线,外部看来这些芯片就是一个整体,被称之为颗粒(package)。
die:晶圆层是闪存的第二层,每个晶圆有一个内部的工作状态信号线,与芯片层的工作状态信号线不同的是,用户无法看到内部的工作状态信号线,它存在于芯片内部,用于查询每个晶圆的当前状态。
plane:分组层是闪存中的关键层次,为了提高闪存的读写速度,在每个分组中设置了一个或者多个寄存器,数据被暂存在这个寄存器中,通过I/O信号线逐步传入或传出。
block:块层是闪存中擦除操作的基本单元,通常,一个分组中有固定数量的物理块。
page:页层是闪存中读写操作的基本单元,通常,一个物理块内有固定数量的物理页。
NAND Flash闪存的读写
- NAND Flash以页的方式进行访问,每个闪存页的状态可以是以下三种状态中的一种:(1)有效;(2)无效;(3)自由/擦除。当没有数据被写入一个页时,这个页就处于“擦除”状态,这时,页中的所有位都是1。一个写操作只能针对处于擦除状态的页,然后把这个页的状态改变为“有效”。异地更新会导致一些页面不再有效,它们被称为“无效页”。
- 闪存在最初始阶段,所有位都被设置成1。读操作:返回被读取目标页的所有位;写操作:把目标页中选中的一些位从1变成0;擦除操作:把目标块的所有位都设置为1。
- 页面在块内部会被顺序写入,即当一个块中的第i页被写入后,块中的第j页(1<j<i)就不能被写入,直到这个块被擦除。
- 闪存不支持对原来数据的直接覆盖,为了对存储在闪存中的现有数据项进行更新,必须在写入数据之前执行一个耗时的擦除操作,然后在这个擦除过的页面上写入新数据,擦除操作的平均延迟是1500微秒,比写操作慢得多。闪存的这个特性,严重制约了写操作的性能。为了避免每次更新操作都带来代价高昂的擦除操作,闪存一般采用“异地更新”的方式,即在更新数据时,把更新操作引导到其他空闲页执行,原来的旧数据所在的页可以暂时不擦除,只要简单设置为“无效”即可,只需要等到垃圾回收的时候才统一执行擦除操作。
- DRAM和磁盘都具有读写操作对称性,即读操作和写操作的时间开销都相同,而闪存则表现出了读写操作的不对称性,写操作的时间开销要比读操作高一个数量级。而且闪存中存在耗时的擦除操作,擦除操作的时间开销比读操作开销高两个数量级,而DRAM和磁盘中则不存在擦除操作。
因为上述的这些读写特性,所以SSD必须在设备内部提供一些机制来保证硬盘能高效进行读写,这就有了闪存文件系统和闪存转换层(FTL:Flash Translation Layer)。
闪存转换层(FTL:Flash Translation Layer)
闪存转换层:Flash Translation Layer,简称FTL,通过一个中间层把闪存设备模拟成一个块设备,具有广泛的应用范围,代表产品有各种FTL机制,比如BAST、LAST
FTL的基本功能包括地址映射、垃圾回收、磨损均衡和断电恢复等。FTL位于文件系统与闪存之间,为文件系统提供了虚拟的磁盘,文件系统可以像使用磁盘一样来使用闪存。
FTL扮演的一个主要角色就是提供LBA(逻辑块地址)到PBA(物理块地址)的映射,这个功能是由FTL映射表来实现的。
- 在任何时间点,闪存的擦除块往往会同时包含有效页和无效页。如果一个擦除块包含了有效页,那么,执行擦除操作可以有两种选择:(1)把擦除块b中的有效页首先拷贝到内存中,对该块b执行擦除操作,然后再把内存中的有效页回写到已经擦除过的这个块b中;(2)把擦除块b中的有效页直接拷贝到其他具有空闲页的块中,然后对块b执行擦除操作。
- 典型的磨损均衡策略主要包括:(1)基于阈值的控制方法:当块之间的擦除次数差距超过事先设定的阈值时,就启动回收过程,收回擦除次数最少的闪存块,从而实现更好的磨损均衡,这种做法的代价是,可能会在一定程度上降低垃圾回收的效率;(2)移动数据页的方法:在各擦除块之间周期性地移动数据页,避免一些具有较低更新频率的块的擦除次数过低,从而使得不同块之间具有比较均衡的擦除次数;(3)基于双队列的损耗均匀控制方法:当某个块的擦除次数过多时,就把冷数据(很少被访问的数据)存储在该块中,由于冷数据的访问频率很低,因此,就可以降低该块在未来一段时间内的擦除频率。
- 固态盘中通常都会配置少量易失的SRAM,用来存储地址映射表,加快逻辑地址到物理地址的转换过程,提高请求响应速度。但是,当发生断电的时候,SRAM中的信息会立即丢失。FTL必须设计相应的断电恢复机制。