基于固态硬盘的闪存转换层概述
来源:用户上传
作者:
摘要:近年来,基于闪存的固态硬盘SSD(Flash-based Solid State Disk)在存储市场中已占据了主要地位。随着NAND Flash 工艺技术的快速发展,容量不断提升,SSD中实现的闪存转换层FTL(Flash Translation Layer)可克服硬件技术上的限制,在软件算法上来解决固态盘寿命和可靠性的问题,其主要功能包括地址映射、磨损平衡及垃圾回收等。本文主要FTL不同的实现机制进行了分析和概述。
关键词:固态硬盘;FTL;地址映射;磨损平衡;垃圾回收
1.前言
随着存储技术的发展,相对于传统的机械硬盘,SSD在读写速度、功耗、体积、防震能力、移动性等方面体现出优势。当前使用较为普遍的是基于NAND 闪存的SSD,与之前的存储介质不同,NAND闪存以页、块、平面、晶圆的结构组织,可执行读、写、擦除操作[1]。页大小一般为2KB/4KB/8KB,是读写操作的基本单位;块大小一般为64/128个页,是擦除的基本单位。基于闪存读写擦除粒度和时序不同、写操作异地更新且擦除次数有限等物理特性,在SSD中设计了闪存转换层FTL,它位于文件系统和物理介质之间,把闪存的操作虚拟成以传统硬盘的扇区进行操作,以适应当前的文件系统。FTL一般由地址映射、垃圾回收和磨损平衡三个模块组成,在系统启动时构造存放逻辑地址和物理地址之间映射信息的登记表,并在运行过程中进行维护。
2.地址映射
基于闪存块的特殊结构,从闪存块外访问到最小的存储单位需要经历多个层级,而每一次更新现有的数据都需要另选闪存页重写并将原有数据区擦除掉。所以,要构建一个固态盘对外的逻辑地址来将固态盘内部的实际物理地址屏蔽掉,而地址映射就是将主机发出的逻辑地址转换成固态存储盘内部的实际物理地址,根据映射颗粒度可分为页级映射、块级映射和混合映射。
页级映射以物理页为基本映射单元,逻辑页与物理页的对应是全相联的,每个逻辑页都有一个映射关系,逻辑页的数据可以存放在任何位置的物理页面中。空间利用率高,可以比较快速地查找到逻辑地址所对应的物理地址并且操作相对简单。但是,映射表作为需要经常读写的元数据,在固态盘运行时需要将其放在内存中,页级映射的映射表较大,占用了较大的内存空间。
块级映射是以物理块为基本映射单元,逻辑页与物理页是组相联的,逻辑页的数据只能存放在某个物理块特定偏移的物理页中。每个块都有一个映射关系,而一个逻辑块通常包括几十上百多个逻辑页。相对于页级映射,块级映射的映射表较小,其大小通常是页级映射的映射表的几十上百分之一,只占用较小的内存空间,可以都放入到内存,映射关系的查找也较快。但是,为了维护块内映射数据页的偏移量,块级映射在进行垃圾回收过程中需要执行大量的数据块合并操作,需要进行大量的复制和移动,会存在更新冲突的问题,从而触发更多的垃圾回收过程,具有较差的随机小写操作性能。
混合映射是把所有的物理块分成两个日志块和数据块两个部分,日志块采用页级映射策略,数据块采用块级映射策略。在混合映射中,将初次写入的数据请求写到数据块中,可节省映射表空间;当该数据需要更新時,则将更新的页写到日志块,可提高空间的利用率。但是,因为日志块的数量较少,仅占闪存容量的3%。当日志块区满时,将日志块和数据块进行合并,多次的合并操作会降低固态盘的整体性能。
3.磨损平衡
NAND闪存擦除次数一定,对相同的存储单元不断地进行编写和擦除会导致该存储单元受到永久性的物理损害。为了有效避免对固态盘中某一区块的频繁读写造成该区块的老化加速,磨损平衡可以将擦除/写入循环平均地分配到所有存储单元中,使数据平均地分布在整个内存单元中,而不会造成某一区块成为信息读写的热点从而影响到整个SSD的寿命[2]。
针对磨损平衡算法,将固态盘中块单元可以分为数据块和空闲块。数据块是闪存的主要部分,受到磨损平衡算法和数据存储器的影响;空闲块的数目在整个闪存中占百分之二,主要用于缓冲该算法,闪存会根据磨损平衡算法在数据块池和空闲块池相互转换。FTL不仅实现对逻辑地址到物理地址映射的管理,同时对闪存和无效块映射进行擦除计数管理。每个块的擦除次数都会被记录在一个叫做擦除计数表(ECT)的表格中。当块进行一次擦除时,ECT都会将该块的擦除次数自动加1。在做磨损平衡会浏览该计数表,以此来决定哪些块必须从数据块池转移到空闲块池,或者相反。当需要转换操作时,转换表会把逻辑块地址重新分配给物理块地址,同时在新的块组中重新组合块地址和擦除计数值。
磨损平衡算法通常有两种类型:动态磨损平衡和静态磨损平衡。动态磨损平衡只处理动态数据,如数据改写时才会触发数据迁移的动作。静态磨损平衡可以均衡静态数据,当后台任务发现损耗较低的静态数据时,将其迁移到其他的数据块上并将这些快放入空闲池中使用。经典的磨损均衡算法都是整合了动态和静态的功能,双池算法就是将物理块分成了冷区和热区,在最初时采用链表的方式将空闲块组成一个队列完成动态磨损均衡,同时记录下每个块的写入次数,当热区块的最大擦除次数超出冷区块的最小擦除次数一个阈值之后,则将热区的最大擦除次数的那个块放入冷区,并将冷区的块置为空闲。
4.垃圾回收
固态硬盘不具备直接覆盖旧数据的能力[3],如果想让存储无用数据的块写入新数据,就需要先把整个块删除,才可以写入新的数据。所以,当操作系统中删除文件时,它只是在其内部文件表中做标记表示该文件已删除,当前无效的数据仍然保留在硬盘上,这样就会产生大量的失效数据,成为数据垃圾,这时就需要进行垃圾回收。对于固态硬盘来说,垃圾回收相当于碎片整理功能,把现存数据重新转移到其他闪存位置,并且把一些无用的数据彻底删除。当固态盘进行垃圾回收操作时,由于内部的数据搬移操作,固态盘对外的性能表现会急剧下降,所以一般选择系统长时间没有响应,或读写操作较少时进行垃圾回收,避免影响性能。
5.结语
本文主要分析了固态硬盘SSD中地址映射、磨损平衡和垃圾回收三大闪存管理策略,FTL的这些软件算法变更速度快,机动性高,升级容易,还可发展更多定制化服务。可见,主控算法的进步则可以更好地发挥SSD的性能,所以需要更加优秀的FTL算法,而这将是我们未来研究所需面临的挑战之一。
参考文献
[1]陆游游,舒继武.闪存存储系统综述[J].计算机研究与发展,2013,50(1):49-59.
[2]潘沁,周新志,魏刚.磨损均衡算法在NAND Flash管理中的改进[J].微计算机信息,2007,23(7):301-302.
[3]杜晨杰,李君,姚英彪.缓冲区管理层对固态盘的有效性研究[J].浙江万里学院学报,2017,30(2):72-77.
作者简介:陈妍霖(1994-),女,重庆市人,哈尔滨市黑龙江大学,信息与通信工程专业2017级,硕士在读,研究方向:嵌入式系统;程海(1979-),男,黑龙江哈尔滨人,博士,副教授,研究方向:保密通信,信息安全;
通讯作者:刘嵩岩(1969-),男,黑龙江哈尔滨人,博士,副教授,研究方向:嵌入式系统。
转载注明来源:https://www.xzbu.com/1/view-14850401.htm