作者:李大虾
FTL是它的简称,全称是Flash Translation Layer,是搭建在Flash之上的核心软件层,现在的设计主要针对Nand设备,主要内容与其说管理Nand Flash,不如说补足传统文件系统与Nand设备之间的短板。目前FTL尚无统一的标准和规范,但已经形成相应的技术框架,如下图所示,FTL跟着控制器走,左图是外部主控FTL依赖CPU和DRAM,右图是内部主控FTL依赖MCU和SRAM。
针对FTL内部也具有了一些成熟的技术模块,比如:
Interface Adapter:在内部FTL中主要关联eMMC/SCSI/SATA/PCIe/NVMe等接口,而在外部FTL中主要关联Linux Block Device。
Address Translation:俗称Mapping机制,负责逻辑地址到物理地址的映射,接下来的很多技术模块都以该机制为核心进行。众所周知,Nand Flash具有写时擦除以及后来顺序写的”顽疾”,因此不得不异地更新。
Garbage Collection:简称GC,上述”顽疾”的延续,回收异地更新产生的脏数据所占空间的回收工作。
Wear Leveling:简称WL,磨损均衡,避免某一个Nand Block很快坏去,使所有Block的PE Cycle均衡发展。
Power off Recovery:简称POR,掉电恢复,因为某些人为或自然外力的原因导致数据没有成功写入到Nand中,决定系统要从可能出现ECC或具有Log系统功能中恢复到掉电前的安全状态。
Parallelization and Load Balancing:在Multi-Die甚至Multi-Plane的Nand系统中,在并行处理中确保性能的完美展现。
Cache Manager:Cache不仅可以存放用户数据,也可以存放FTL Metadata,对系统的整体性能有着天然的优势。
Error Handler:处理读写操作中遇到的Fatal Error或ECC Error状况,以及Bad Block或Weak Block的管理。
除此之外,我们还需要知道FTL的一些前世今生的历史,读史可以明智。在SLC时代,与其一起成长的软件技术有YAFFS/YAFFS2,它是第一个专门为Nand设计的,并具有WL和POR功能的嵌入式文件系统;以及JFFS/JFFS2,建立可以挂载Nand Driver的MTD设备之上的日志文件系统。随着容量的增加,MLC技术的到来,JFFS2的继往开来者UBIFS/UBI也随之到来,还有与其形成竞争关系的LogFS。尽管百花齐放,它们都是建立在MTD之上将FTL理念和文件系统概念融合的产物,或者说FTL是它们剥离的产物,但它们的局限性也很明显,越来越难以匹配Nand技术的发展。下图是研究者对它们的对比分析结果,在此表示感谢:
从上面分析结果来看,不由让人想起一些考察FTL优劣的因素,综合来看就是时空效率和稳定性的Trade-off,空间是指RAM的使用量和Flash的利用率,时间是指读写操作性能,稳定性主要体现在寿命和容错上,具体来说分为五大因素:
Translation Performance:涉及到Cache管理和Mapping Table/Tree的组织方式,导致的查找效率高低,这将直接影响到读写速度。
RAM Overhead:涉及到SRAM/DRAM的资源占用多少,以及Cache管理不当导致命中失效进而频繁地从Flash处更新Mapping Table镜像信息,进而影响性能。特别是SRAM和熊猫一样不像柴米油盐随意。
Block Utilization:这不仅关系到Block在Erase之前写入的数据量,也关系到另一个叫Write Amplification(简称WA,写放大)的概念,一方面因为设计不当导致的每笔用户数据写入会产生额外开销,另外一方面由GC或WL等FTL行为导致数据迁移所致。
Garbage Collection Performance:在写过程中触发GC会导致写速度产生波动现象,特别是频繁的GC或者每次GC数据量较大。
Fault Tolerance:错误产生的类型有很多,比如Bad Block、突然掉电、Bitflips、UECC等,如何能容错不至于变成”砖头”变的尤为重要。
如有讨论,请联系李大虾(mailto:lishizelibin@163.com)或关注微信公众号大虾谈(DaXiaTalking)。
回归到文件系统上,趋于智能设备发展的大势,传统文件系统并非碌碌无为,也在不断针对非机械存储盘增加新特性。以ext4来说,增加Trim功能,支持大Block Size(>4KB,<=64KB);再如Btrfs针对SSD进行专门的优化,其COW(Copy-on-Write)技术避免了对同一个物理单元反复写动作,尽量减少SSD内部FTL GC的发生,同时优化底层块分配,尽量分配到大Size(比如2MB)的连续块进行操作,方便了SSD内部FTL对数据的组织,进而优化性能。甚至还诞生了如F2fs这种专门为Nand设计的新型文件系统,充分考虑了Nand特性,充分考虑了FTL及Flash几何结构参数感知,特别优化了移动设备的大量小文件读写操作,扩大了随机写区域,使得在小文件操作上有得天独厚的优势,并支持后台Cleaning及Greedy和转移数据最少的Section选择算法,支持Multi-head Logs用于动态和静态Hot与Cold数据分离等等需要应用在Nand Flash上的考量问题。
尽管如此多的针对性优化和新特性,但是大多建立在具有FTL的设备之上。因此FTL作为Nand底层核心技术不容小觑。该项技术也成为很多厂商不愿外人所知的技术信息,其所具有的挑战伴随着Nand发展一直存在,厂商也因此可以用新技术Nand相关设备抢占市场;而Linux Mainline却因为MTD停滞不前,也给了学术界生存的土壤,对此方面研究的Paper层峦叠起,可见FTL的优劣直接影响到Nand设备的寿命、可靠性和性能上的优劣。本系列文章将从概念上对FTL那些事娓娓道来。