FAST 2016 Paper 分布式元数据论文阅读笔记整理
问题
快速非易失性存储器(NVM)将与DRAM一起出现在处理器内存总线上,由此产生的混合内存系统将为软件提供亚微秒、高带宽的持久数据访问,也为管理、访问和维护存储在NVM中的数据的一致性带来了挑战。为旋转磁盘或固态磁盘构建的现有文件系统引入了软件开销,这将掩盖NVM提供的性能,但为NVM提出的文件系统要么会产生类似的开销,要么无法提供应用程序所需的强大一致性保证。
挑战
传统的文件系统不适合混合存储系统,因为它们是为磁盘(旋转或固态)的性能特征而构建的,依赖于磁盘的一致性保证(例如,扇区更新是原子的)来确保正确性[47]。混合存储系统不同于传统存储系统:NVMM提供了比磁盘更高的性能,而DRAM提供了更好的性能但没有持久性。内存提供与磁盘不同的一致性保证(例如,64位原子存储)。
对于基于内存的文件系统来说,提供强大的一致性具有挑战性,因为在NVMM中维护数据一致性代价高昂。现代CPU和内存系统可能会重新排列内存存储以提高性能,从而在系统故障时破坏一致性。因此文件系统需要明确地从CPU的缓存中清除数据以强制排序,这增加了大量的开销,并浪费了NVMM提供的性能[6,76]。
现有的文件系统使用日志记录、影子分页或日志结构化技术来提供原子性。然而,日志记录会将对存储设备的写入次数增加一倍,浪费带宽;影子分页需要从受影响的叶节点到根节点的级联更新。这两种技术都会带来严格的排序要求,从而降低性能。日志结构文件系统(LFS)[55]将小的随机写入请求组合为更大的顺序写入,硬盘和SSD可以有效地处理这些请求。但传统的LFS依赖于连续空闲区域的可用性,维护这些区域需要昂贵的垃圾回收操作。因此,研究[59]表明,LFS的性能比NVMM上的日志文件系统差。
本文方法
本文提出了NOVA,旨在最大限度地提高混合存储系统的性能,同时提供强大的一致性保证。
-
采用日志结构化文件系统技术来利用NVM的快速随机访问。为每个inode维护单独的日志,以在正常操作和恢复期间最大限度地提高并发性。将日志存储为链表,因此不需要在内存中连续,并且使用对日志尾部指针的原子更新来提供原子日志附加。对于跨多个inode的操作,NOVA使用轻量级日志记录。
-
将文件数据存储在日志之外以最小化日志大小,因此恢复过程只需要扫描NVMM的一小部分。同时降低垃圾收集成本,在页面过时时立即回收页面,显著减少垃圾收集开销,并允许NOVA即使在文件系统几乎满了的情况下也能保持良好的性能。
-
日志提供元数据、数据和mmap原子性,并注重简单性和可靠性,将复杂的元数据结构保留在DRAM中以加速查找操作。
实验结果表明,在写密集型工作负载中,与最先进的文件系统相比,NOVA的吞吐量提高了22%至216倍;与提供同等强大的数据一致性保证的文件系统比较,吞吐量提高了3.1倍至13.5倍。
设计概览
-
将日志保存在NVMM中,将索引保存在DRAM中。NOVA将日志和文件数据保存在NVM中,并在DRAM内构建基数树[35],以快速执行搜索操作。使用基数树是因为在Linux内核中有一个成熟的、经过良好测试的、广泛使用的实现。基数树的叶子指向日志中的条目,而这些条目又指向文件数据。
-
为每个inode提供自己的日志。NOVA中的每个inode都有自己的日志,允许在没有同步的情况下跨文件进行并发更新。这种结构允许在文件访问和恢复过程中实现高并发性,因为NOVA可以同时重放多个日志。NOVA还保证有效日志条目的数量较少(按照文件中扩展数据块的数量顺序),从而确保快速扫描日志。
-
使用log和轻量级日志记录进行复杂的原子更新。NOVA是日志结构的,提供了比日志和影子分页更快的原子更新。为了将数据原子地写入log,NOVA首先将数据附加到log,然后原子地更新log尾部以提交更新,从而避免了日志文件系统的重复写入开销和影子分页系统的级联更新。目录操作,如在目录之间移动,跨越多个inode,NOVA使用日志来原子更新多个log。NOVA首先在每个inode的log末尾写入数据,然后记录log尾部更新,以原子方式更新。NOVA日志记录是轻量级的,因为它只涉及log尾部(与文件数据或元数据相反),并且没有POSIX文件操作在四个以上的inode上操作。
-
将日志实现为单独链接的列表。在基于NVMM的存储中,顺序日志的位置优势不那么重要,因此NOVA使用4KB NVMM页的链表来保存日志,并将下一页指针存储在每个日志页的末尾。允许非顺序日志存储提供了三个优点。首先,分配日志空间很容易,因为NOVA不需要为日志分配大的连续区域。其次,NOVA可以以细粒度、页面大小的粒度进行日志清理。第三,回收只包含过时条目的日志页只需要分配几个指针。
-
不记录文件数据。NOVA中的inode日志不包含文件数据。NOVA对修改后的页面使用写时复制,并将有关写入的元数据附加到日志中。元数据描述更新并指向数据页。对文件数据使用写时复制非常有用,原因有几个。首先,它会缩短日志,加快恢复过程。其次,它使垃圾收集更简单、更高效,因为NOVA从不需要将文件数据从日志中复制出来以回收日志页。第三,回收过时的页面和分配新的数据页面都很容易,因为它们只需要在DRAM空闲列表中添加和删除页面。第四,由于NOVA可以立即回收过时的数据页,因此即使在重写负载和高NVMM利用率的情况下,它也可以保持性能。
总结
针对混合易失性/非易失性主存储器的环境,如何设计高性能、保证一致性的文件系统。本文提出NOVA,扩展了日志结构文件系统的思想。包括3个技术:(1)为每个inode维护单独的日志,以提高并发性。利用NVMM随机访问,将日志存储为链表,不需要在内存中连续,使用对日志尾部指针的原子更新来提供原子日志附加。对于跨多个inode的操作,NOVA使用轻量级日志记录。(2)将文件数据存储在日志之外,提高恢复速度,同时降低垃圾回收成本,在页面过时时立即回收,并允许NOVA即使在文件系统几乎满了的情况下也能保持良好的性能。(3)日志提供元数据、数据和mmap原子性,将复杂的元数据结构保留在DRAM中以加速查找操作。