Soft Updates一项消除大多数同步写操作的技术(1)
http://tech.ddvip.com 2006年04月01日 社区交流
本文详细介绍Soft Updates一项消除大多数同步写操作的技术(1)
当新的块被分配时,它在位映射表对应的位置将被更新以反映它在用,而块的内容将以新写入的数据或0来初始化。此外,指向新数据块的指针将被加入到i-节点或间接块中(后文会详细说明)。为确保磁盘上的位映射表总反映已分配的资源,位映射表必须在指针之前写盘。同样,由于新分配的磁盘位置未知,规则1规定了新块及指向它的指针之间的更新依赖。因为通过采用同步写入方式保持这一更新依赖关系的方式必将降低数据吞吐量,很多实现中对常规数据块忽略这一过程。这一设计会削弱完整性和安全性,因为新分配的块往往包含已删除的文件数据。有别于此,SoftUpdates将在几乎不损失性能的前提下对块分配实施保护。
维护间接块并不导致本质上不同的更新依赖,但它们在这里讨论很有意义。间接块以及指向间接块的块指针的分配和前面类似,而文件删除,以及明确地释放,对它则更具研究意义。
考虑到i-节点上的引用是确定块是否直接或间接地连在其上唯一方法,清空指向间接块的i-节点指针对于清除所有已声明(said)块的可恢复指针来说已经足够了。一旦指针清零被写盘,则它指向的所有块都可以被释放;只有对文件的截断才会产生间接块指针和块的更新依赖关系。某些FFS实现不包含这一差别,尽管这可能会在删除大文件时极大地延长操作时间。
文件改名时将影响两个目录项。将创建一个新的目录项(包含新的名字)指向相应的i-节点,之后原目录项被移除。规则3确定,新目录项应该在旧目录项移除之前创建,以保证在崩溃后对文件的引用不丢失。如果算上引用计数本身,那么改名操作需要按如下的次序进行四次磁盘更新:增加i-节点的连接计数,创建新的目录项,移除旧的项,减少i-节点的连接计数;如果同名目录项存在,那么它应该先被删除。
更名是POSIX文件操作,换言之希望在多用户环境下这一操作是原子的。有趣的是,POSIX并未要求上述的语义,且多数实现都不能提供它。
在活动的文件系统中位映射表经常发生变化。因此,核心内存中的位映射表副本与磁盘上的经常会不同。如果系统在没把这些差异写盘之前停机,那么某些刚分配的i-节点和块数据就不能在磁盘上反映。为了维持一致性,在系统崩溃之后的启动通常必须运行文件系统检查程序fsck检查文件系统中所有的i-节点,以确定在用的i-节点,并让位映射表处于一致的状态。SoftUpdates的一个额外的好处是,它能够追踪对于位映射表的写入操作,并利用这一信息确保新分配的i-节点或到新分配的数据块的指针一定会在引用它们的位映射表项之后写入磁盘。这保证了绝不会出现已分配的i-节点或数据块没有在位映射表上标记的情形,从而,不再需要在系统崩溃之后运行fsck。这一特性将在第6节说明。待继...
责编:豆豆技术应用