论文部分内容阅读
文件系统的主要作用是组织和存取用户数据。文件系统在磁盘上组织用户数据的时候一般涉及到多个数据结构,这些数据结构之间存在一致性关联。文件系统在将内存中修改的数据写回磁盘时一般使用两种基本策略:原地更新和异地更新。原地更新是指将存储介质上的数据块读取到内存,进行修改,然后再写回到其原始位置。而异地更新是指将存储介质上的数据读取到内存,进行修改,然后写到一个新位置(这个过程中不覆盖旧数据)。文件系统进行数据更新时需要确保磁盘上的文件系统的各个数据结构在更新之后仍然处于一致的状态,这个更新过程面临的最大挑战是系统可能会随时崩溃。为了解决这个问题,学术界提出了多种文件系统更新模式,这些更新模式大致可以划分为五类:无序原地更新、有序原地更新、日志更新、异地更新以及混合更新。在这五类更新模式中,应用最广泛、影响最大的是日志更新和异地更新。然而这两种更新模式自身的固有问题却很少被学术界深入分析和研究。 针对日志更新固有的写两次问题,提出了一种新的智能日志更新模式。该模式的核心思想是拦截上层文件系统发往底层存储设备的I/O请求,然后将这些I/O请求智能的重定向到日志空间和文件系统空间。其主要涉及四项技术:(1)智能探测上层文件系统的类型,并提取磁盘上空间分配信息;(2)智能识别文件系统发往底层存储设备的写请求是否是覆盖性写,若是覆盖性写则将其写到日志空间,否则将其原地更新到文件系统空间;(3)智能识别文件系统发往底层存储设备的读请求的目标磁盘块是否已被写到日志空间,若是则将读请求重定向到日志空间,否则直接发到文件系统空间;(4)在合适的时机将日志空间中保存的数据写回到文件系统空间。在Ext3的基础上实现了一个原型系统,对其性能进行实测,并分别同Ext3的数据日志(data journal)模式和有序日志(ordered)模式进行对比。实验表明,该智能日志原型系统突破了现有系统在提供版本级一致性和性能上不能兼顾的难题,既确保了版本级一致性,又达到类似有序日志运行模式的性能。 针对异地更新固有的递归更新问题,提出了一种递归更新的分析模型,并使用该模型对递归更新问题进行了系统研究。首先针对单一B树的递归更新问题进行建模,分析其可能导致的写放大效应,然后将该模型推广到典型的写时复制(采用异地更新策略)文件系统中。通过仔细设计的实验,对该模型的正确性进行了验证。之后,通过对该模型进行模拟计算,发现被存取文件在文件系统中的分布情况是影响整个文件系统的递归更新写放大效应的决定性因素。另外进一步研究发现写放大效应也会被其它因素所影响,包括存取的文件数量、文件系统中已有文件的数量以及文件系统树的空间使用率等。 针对异地更新固有的递归更新问题,提出了一种同时支持原地更新和异地更新的文件系统,使用该系统对递归更新进行实证研究,揭示出影响文件系统写放大效应和性能的新现象和新规律。以 BTRFS文件系统(本身为写时复制文件系统,采用异地更新策略)作为研究对象,对其进行扩展以同时支持原地更新和异地更新两种更新模式,然后通过复杂全面的对照实验,分别考察在不同的工作负载和存储设备上这两种更新模式在性能和写放大方面各有什么样的差异,通过这些差异来分析递归更新的实际影响。实验结果表明,在单一I/O写操作测试中,递归更新会导致29.5倍的写放大以及71%的性能降级;而在邮件服务器工作负载测试中,递归更新会导致18.3倍的写放大以及33%的性能降级。 研究结果对于下一代高性能文件系统的设计与实现具有重要的参考意义。