FTL产生过程
如果仅仅是SSD的使用者,一定不会在意在SSD内部居然还存在一个复杂的软件层Flash Translation Layer(FTL)。其实就是这个FTL才是SSD固态硬盘的软件核心技术。正因为有了FTL,NAND Flash才能被当成硬盘来使用;文件系统才可以直接把SSD当成普通块设备来使用。由于FTL是SSD设计厂商最为重要的核心技术,因此,没有一家厂商愿意透露这方面的技术信息,并且也一直没有业内的技术规范、标准存在。
FTL的重要程度在于决定了一个SSD的使用寿命、性能和可靠性。一旦FTL出现问题,那么就会导致数据读写发生错误,更为严重的是SSD盘无法被访问。优秀的FTL不仅能够提升Flash存储的使用寿命,而且还可以最优化读写性能。因此,在Flash固态存储中,FTL是一个最为重要的管理NAND Flash的软件层。
在学术界,这十年来有很多文章在讨论如果实现一个高效的FTL,例如,在有限硬件资源的环境下如何实现mapping?如何实现buffer的管理?如何实现高效的Garbage Collection?如何实现磨损均衡Wear-leveling?如何实现NAND Flash芯片之间的数据冗余(RAID on Chip)?很多算法的提出非常具有建设性和现实意义,对工业界具有很好的指导价值。
这里主要想谈一下FTL内部mapping的机制。从文章《采用NAND Flash设计存储设备的挑战在哪里?》了解到基于NAND Flash研制存储设备是有很多挑战的,最大的问题在于NAND Flash不能像内存那样随意的写入。NAND Flash在Page页写入之前必须要将Page页所在的Block块擦除。如果研制SSD的时候严格按照这个准则,那么设计开发出来的SSD是不能用的。其一,按照这种方式进行写操作,写入的性能将会很差,其bottleneck限制在块擦除上(块擦除时间在ms级);其二,不断的对同一Block块进行擦除操作,那么该块将会在短时间内磨损写坏,并且极易导致存储在该块上的数据丢失。因此,在设计SSD时最主要的任务就是解决NAND Flash的这种“写时擦除”问题。
技术是相通的,在90年代提出的Log-structured File System(LFS)思想和NAND Flash简直是天生一对。当初设计Log-Structured File System最主要的想法是利用机械磁盘出色的顺序写性能,避免糟糕的随机写问题。Log-structured File System在机械硬盘的时代有一定的应用局限性,问题在于采用log数据布局的方式之后,读性能变得很差。因此,只有在大块数据读写(对象存储)的环境下,log-structured File System才变得合情合理。在NAND Flash介质上,不存在机械硬盘随机读写的问题,因此,log-structured的数据布局方式不会引入任何性能问题,反而能够解决NAND Flash的“写时擦除”问题。
采用Log-structured的方式之后,NAND Flash可以采用out-of-place的数据更新方式。所有的数据更新都不会写入原来的page页,而是重映射写入一个新的Page页。在这个思路的引导,很显然所有NAND Flash的存储资源可以按照物理Page页的方式管理起来,而用户可见的空间则是一个连续逻辑Page页连接起来的地址空间。FTL的一个关键任务就是建立逻辑Page和物理Page之间的映射关系,并且在数据写入时重新分配物理Page页。在这种机制的支撑下,SSD的写性能可以大为提高,写延迟可以控制在200us的级别。
引入log-structured的机制之后,逻辑page和物理p
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/12605.html