论文摘要
闪存自其诞生,便以其功耗低、体积小、抗震性强而受到广泛关注。如今,随着闪存进入G容量时代,闪存必然会被使用在计算复杂性更高、任务更繁复的系统中。而在这些操作系统中,几乎无一例外地都使用了交换系统,以牺牲一定性能的代价来扩展内存空间容量,增加系统的并行执行度和吞吐量。当闪存被应用在了这些系统中,由于闪存在I/O接口和寻址方式与传统磁盘的巨大差别,使得交换系统无法直接在闪存上建立交换区域。工程上惯用NFTL/FTL层来屏蔽闪存设备与磁盘设备的不兼容性。NFTL/FTL层是一种设备转换层。借助该层,操作系统便可以把闪存当作磁盘块设备一样来使用,并在其上建立FAT、NTFS、EXT2、EXT3等之类的磁盘文件系统。甚至于在NFTL/FTL层的帮助下,交换系统也得以简介地建立在闪存上。然而,NFTL/FTL层除了因为在设备转换过程中损失性能外,严重的“伪有效chunk”问题还会导致大幅增加交换系统的读写开销,于是有人提出了闪存专用交换系统FASS,解决了上述NFTL/FTL的两个缺陷。FASS大幅度降低了交换系统对交换区域的读写开销。然而FASS延续了传统交换系统静态分配交换区域的惯性思维,将交换系统的读写磨损限制在了闪存固定的某个区域,就有可能会造成闪存局部过度磨损,本质上并不适用于闪存场合。基于上述的思考,本课题认为闪存交换系统必须动态分配交换区域的存储空间。因此,本课题将交换系统的支持性融入闪存文件系统YAFFS中,提出了支持交换系统的闪存文件系统SA-YAFFS(Swap-Aware YAFFS)。在SA-YAFFS文件系统中,文件系统和交换系统各自都具有可用的闪存空间逻辑配额,但实际的物理存储空间只有发生写操作时,才动态地由统一的闪存分配器分配出去。考虑到文件系统数据和交换系统数据的具有不同的有效周期,SA-YAFFS将闪存block按功能分为文件系统block和交换系统block,这一方面有利于提高闪存垃圾回收器的效率,另一方面可以节省内存开销。考虑到交换系统block中的内存页的内核对象与文件系统block中的数据内核对象不兼容,SA-YAFFS为交换系统设计了专门的垃圾回收器。另外,SA-YAFFS采用异步方式读写交换区域,以提高系统吞吐率。实验表明,相对于NFTL/FTL层,SA-YAFFS由于避免了“伪有效chunk”的现象,可以大幅度降低交换系统对于闪存交换区域的读写次数。同时,由于采用动态分配交换区域,SA-YAFFS文件系统可以调动分区中所有空闲block共同承担交换系统导致的闪存磨损。相对于FASS,SA-YAFFS在交换系统逻辑配额一定的前提下,可以将交换系统对于闪存的磨损分摊在更多的物理block上。当“文件系统逻辑配额的剩余空闲空间+交换系统逻辑配额”增加到n倍,交换系统对于其使用过的每个block的磨损次数降低为原来的1/n。