快捷搜索:

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

作者及顾问:Marshall Kirk McKusick;卡内基梅隆大年夜学 Gregory R. Ganger中文翻译:北京工业大年夜学谋略机学院 李鑫

--------------------------------------------------------------------------这篇论文最初颁发于1999年6月6日至11日举行的USENIX年度技巧会议中,Freenix会议录的第1-17页。其版权归Marshall Kirk McKusick和Greg Ganger所有,作者保留所有权力。这篇论文在作者的许可下被翻译和从新宣布。在维持此版权宣示完备的条件下,容许对本文进行非商业目的的从新宣布。--------------------------------------------------------------------------

择要

传统上,保持掉落电或系统崩溃后的文件系统同等性掩护主要采纳两种措施:其一是对存在依附顺序的元数据(metadata)进行同步写入,其二是用写通式日志来将原子操作组织在一路。Soft Updates,一种不合于它们的措施,是一种经由过程包管元数据按依附顺序更新来确保磁盘上文件系统的总维持同等的实现机制。应用SoftUpdates避免了对付自力日志或大年夜量同步写操作的需求。同时,它还能将很多曩昔自力且同步进行的操作合并,从而在文件操作密集的情况(例如法度榜样开拓、邮件办事器等)中削减40%-70%的写操作。在前进机能的同时,SoftUpdates还可以更好地保持文件系统的同等性。经由过程包管不同等性仅存在于未声明的块或i-节点,SoftUpdate能够打消对付系统崩溃后运行文件系统反省法度榜样的依附。这样,在重启后文件系统急速处于可用状态。别的,可以经由过程一个后台义务在处于运行状态的文件系统中收受接收损掉的块和i-节点。

这篇论文描述了集成到4.4BSD快速文件系统(Fast Filesystem)中的一个SoftUpdates实现。它具体先容了建立一个成品级质量的系统时,对钻研原型以及BSD系统做的改动。同时,它也评论争论了在将SoftUpdates从钻研转入现实中的履历、难处,以及从中获得的教训; 那些非老例的文件系统操作(例如,fsck和‘fsync’),必要进行的从新斟酌和增添的代码。终极实现的系统获得的体验证清楚明了起初的钻研成果:SoftUpdates很好地交融进了现有的文件系统,包管了元数据关联性,并基础达到了最佳的机能。

第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代码的状态和可用性。

创建文件时,在不合的自力块中的三组元数据都将被改动。首先是一个新的、初始化过的i-节点,其内容包括文件类型、被设置为1的连接计数(这表示它是活动的,如被某一目录项引用)、它的权限以及其他信息;随后是i-节点位映射表,以反应i-节点被分配这一状况;着末是新目录项,它将包括新的文件名,以及一个指向i-节点的指针。为确保位映射表总反应整个已经分配资本,位映射表必须在i-节点或目录项之前写入。因为初始化好的i-节点在写盘之前处于未知状态,规则1要求所有关于它的相关更新必须它写入落后行。只管未被明确地要求,绝大年夜多半FFS实现在创建文件这一系统调用返回之前,也写入目录块。这个附加的同步写入确保了当利用法度榜样在其落后行“fsync”系统调用时文件名已经被保存到靠得住的存储器中。假如没这么做,那么“fsync”调用将必须查找所有未写入的包孕该文件名字的目录块,并写入磁盘。类似的更新依附关系也存在于为一个i-节点指定另一个名字时(也称hard link,硬连接),由于增添第二个名字必要文件系统增添i-节点的连接计数,并在写入目录项之前重写这个i-节点。

删除文件时,将改动目录块,i-节点,以及多少柱面组位映射表。在目录块中,相关的目录项将被“移除”,这一操作将i-节点指针清零。在i-节点块中,相关i-节点的类型字段、连接计数,以及数据块指针将被清零。被删文件的数据块以及i-节点随后被响应的数据块/i-节点映射表反应。规则2规定了目录项和i-节点之间,以及i-节点和所有改动了的映射表位之间的更新依附关系。为了维持连接计数适当地大年夜(这也简化实现),在移除一个文件又名(硬连接)时也存在类似的依附关系。

创建和删除目录大年夜体和前述的对通俗文件的操作相同。不过,由于“..”是子目录指向父目录的连接,这激发了更多的更新依附。分外埠,在创建时,父目录的连接计数必须在新目录的“..”指针之前增添并同步到磁盘。同样,在删除时,父目录的连接计数必须在子目录的“..”指针清零之后削减(当然,这一清零历程在删除子目录时暗含,不真正履行)。

您可能还会对下面的文章感兴趣: