ATC 2022 Paper 分布式元数据论文整理
问题
日志结构文件系统的追加方式带来了文件系统的另一个复杂性维度:垃圾回收。随着日志结构文件系统的老化,文件系统会用尽空闲段,并需要回收过时的文件系统块以产生更多的空闲段。当文件系统在前台执行垃圾回收时,它会冻结整个文件系统直到完成 [2]。垃圾回收使底层的日志结构文件系统产生过高尾延迟,并降低文件系统的吞吐量。垃圾回收还会产生额外的写入流量,增加了闪存的磨损。
现有方法局限性
有相当多的工作来减轻日志结构文件系统中垃圾收集的开销。现有方法包括:在空闲时期执行垃圾回收 [10, 43, 47],以抢占式的方式执行垃圾回收 [37],选择合适的受害段以最大化垃圾回收的效率,例如贪婪、成本效益、年龄等 [27, 41]。一些方法提出将相似寿命的文件块聚集在一起,以提高垃圾回收的效率 [31, 35, 48]。
设备级垃圾回收的开销也是一个严重的问题。有大量的研究致力于减轻设备级垃圾回收的开销 [12, 36, 61]。当日志结构文件系统与闪存一起使用时,由于在文件系统和设备上都进行了垃圾回收活动,垃圾回收的开销可能会加剧 [58]。一些研究提出了让主机文件系统直接管理存储中的闪存页并消除设备级垃圾回收的方法 [39, 59, 60]。
最近提出的ZNS(分区名称空间)将存储设备视为追加日志,因此地址映射和设备级垃圾回收变得更加简单 [5, 20]。
但垃圾回收的根本原因仍然被忽视;文件系统需要回收无效的文件系统块以释放空闲段。
本文方法
我们开发了一种无需垃圾回收的日志结构文件系统。将逻辑分区与物理存储分离,并允许文件系统定义独立于物理存储容量的非常大的逻辑分区。使逻辑分区的大小足够大,以便文件系统在闪存的使用寿命内永远不会耗尽可用段。对于非常大的逻辑分区,文件系统不必回收无效的文件系统块,因此可以消除日志结构文件系统的关键缺陷,即垃圾回收。在没有垃圾收集的情况下,我们可以极大地简化日志结构的文件系统设计。
有两个关键技术要素:IPLFS,用于无限分区的日志结构文件系统,以及Interval Mapping,用于无限文件系统分区的空间高效的LBA到PBA映射。
-
在IPLFS中,将文件系统分区大小与物理存储大小分开,并将逻辑分区的大小设置得足够大,以便在SSD的寿命内逻辑分区不会出现空闲段不足的情况。这允许文件系统以追加方式写入更新,而无需回收无效的文件系统块。我们修改了基线文件系统F2FS的元数据结构,以便它能够高效地处理包含264个扇区的存储分区。
-
Interval Mapping,以最小化FTL中LBA到PBA转换的内存需求。是一个三层映射树,仅维护活跃使用的文件系统区域的映射。通过使用Interval Mapping,FTL可以以几乎相同的内存需求维护264扇区范围的映射,而页映射的LBA范围受存储容量大小限制。
开源代码:https://github.com/ESOS-Lab/IPLFS
在Linux内核5.11.0上实现了IPLFS,并在OpenSSD中对Interval Mapping进行了原型实现。通过消除文件系统级别的垃圾回收,IPLFS在性能上优于F2FS,高达12.8×(FIO)和3.73×(MySQL YCSB A)。
实验
实验环境:Intel CPU i7-4770K(3.50GHz,4核),8GB DRAM
数据集:FIO,YCSB
实验对比:吞吐量、写放大、延迟
总结
针对日志结构文件系统垃圾回收的优化,现有方法使用的逻辑地址有限,当逻辑地址用完时需要进行垃圾回收。作者设计了IPLFS,将文件系统分区大小与物理存储大小分开,并将逻辑分区的大小设置得足够大,使日志结构的文件系统免于回收无效的文件系统块;为了维护逻辑文件系统分区的映射信息,我们开发了Interval mapping,利用三层映射树,只为活跃使用的文件系统区域维护LBA到PBA的映射。
我的理解汇中垃圾回收应该是物理存储不足时进行的,从而释放标记为无效的物理空间,并进行紧凑的重新布局。本文设计的思路是逻辑空间不足导致的垃圾回收,不是很理解这个设计前提。