Soft Updates一项消除大多数同步写操作的技术(1)

http://tech.ddvip.com   2006年04月01日    社区交流

本文详细介绍Soft Updates一项消除大多数同步写操作的技术(1)

  第1节 研究背景与导言

  元数据(如文件目录,i-节点,以及空闲块映射表)指明原始数据存储(raw storage)的结构。元数据提供指针和描述符,通过它们将磁盘上的扇区联结成文件,并区分它们。为了长期维持可靠存储,文件系统必须在遭遇非预期的系统崩溃,如断电和操作系统故障时,保证元数据的完整性。由于类似的崩溃通常导致保存于易失性主存中的全部信息的丢失,保存在非易失性存储器(例如,磁盘)中的信息必须总具有足够的一致性以便确定性地重建文件系统的一致。特别地,文件系统在磁盘上的镜像绝不能包含悬挂指针,也不能有足以导致二义性的资源所有权指针,或未引用的活动资源。维持这些原则通常需要顺序地(或按原子操作分组)更新小的元数据对象。

  过去,BSD快速文件系统(FFS)及其派生系统采用同步写入来保证稳定的存储器写入次序。例如,在BSD系统中创建一个文件,首先需要分配和初始化新的i-节点并填充一个新的目录指向项。由于采用同步写入,文件系统将强制创建文件的应用程序等待这些初始化操作的完成,其结果是,在这些系统中类似创建、删除文件这样的操作将以磁盘,而不是CPU/内存的速度进行。由于磁盘操作相对于其他部件来说更慢,同步写入会降低系统性能。元数据更新问题也可以在采用NVRAM技术的前提下通过其他机制解决,例如,可以使用不间断电源(UPS)或Flash。此时只需要保证NVRAM的一致性,而更新可以按任何方便的方式复制到磁盘上。还有一种是将操作分组为包含某种写进式日志的原子操作或使用 shadowpaging。总而言之,这些方法通过在磁盘上增加可以在系统故障或介质损坏之后用来重建提交的元数据附加信息来达到目的。很多现代文件系统成功地使用了写通式日志来获得比同步写入更好的性能。在[Ganger & Patt, 1994]中建议了另一种方式,SoftUpdates,并在研究模型中进行了评估。使用SoftUpdates,文件系统延迟写入(如回写式缓存)元数据的修改,追踪更新的依赖关系,并在回写时保持它们之间的一一依赖关系。因为很多元数据块包含大量指针,如果依赖关系仅以块级记录时循环依赖会经常发生,因此SoftUpdates追踪以指针为单位的依赖关系,这使得块能够以任意顺序写入。非独立的更新在其他写入前将回滚(rolled-back),并在写入完成后恢复,循环依赖问题从而被消除。使用SoftUpdates时,应用程序总是看到最新的元数据块副本,而磁盘上的数据总是和其上的其他内容一致。在这篇论文中,我们描述了在NetBSD, OpenBSD, FreeBSD, BSDI操作系统中采用的4.4BSD FFS中集成SoftUpdates的过程。同时,我们讨论了其中的经验、教训,并描述了文件系统中一些比较复杂的难题,使用核心内存追踪依赖关系,完整的“fsync”调用实现,一些系统调用的语义等等。在fsck中正确地检测和处理丢失的资源,干净并正确地完成一个unmount系统调用需要进行的额外考虑,以及相应地增加代码的复杂程度。尽管存在这些困难,我们的性能试验证实了早先研究的结论。特别地,在BSD FFS中使用SoftUpdates消除了绝大多数同步写入,并且,和理论最佳情况(完全异步更新的FFS)的差异不到5%。同时,SoftUpdate使BSD FFS语义更明确、完整性更强健,并提供更好的安全保证。此外,它还能在崩溃之后立即恢复(不再需要先行执行fsck)。这篇论文的其余部分包括:第2节,描述BSD FFS操作中的更新依赖关系;第3节描述BSD SoftUpdates实现如何处理它们,包括关键的数据结构,如何使用这些结构,以及集成到4.4BSD操作系统中的过程;第4节讨论了我们将原型转化为生产环境实现中得到的经验和教训;第5节简要总结了在4.4BSD系统中引入SoftUpdates后的性能改善;第6节讨论了新增的文件系统快照支持,以及这一特性如何在一个活动的文件系统中被用于后台执行的局部fsck;第7节概要描述了BSD SoftUpdates代码的状态和可用性。

责编:豆豆技术应用

正在加载评论...