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

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

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

  3.5 间接块依赖关系追踪

  图5体现了间接块分配时需要的更新依赖结构。其中也包括直接块相关的那些依赖关系。图中引入了两个新的依赖关系结构。一个单独的用于追踪每个独立的间接块指针的allocindir结构,管理所有与间接块相关的allocindir结构的indirdep结构。图中表示了一个刚刚分配了逻辑块14,15(第3和第4项,偏移量8和12,在第一间接块上)的文件。与逻辑块14相关的分配位映射表已经被写入磁盘(如图,它的DEPCOMPLETE已被置位),但块15的还没有。因此,bmsafemap结构将追踪逻辑块15的allocindir结构。逻辑块15的内容已经被写入磁盘(如图,它的COMPLETE标志被置位),而逻辑块14还没有。块14 allocindir结构的COMPLETE标志将在块被写入磁盘之后置位。 allocdir结构的表被indirdep结构追踪,这个表可能很长(对于一个8KB的间接块,最多可能有2048个项)。为了防止在I/O子程序中遍历如此长的依赖关系结构表,indirdep结构将维护两个间接块的副本:"saved data ptr[已保存的数据指针]"指向缓冲区的最新副本,而"safe copy ptr[安全副本指针]"指向只包括可以被安全写入磁盘的指针子集(其他以NULL表现)。前一个用于所有的文件系统操作,而后一个则用来进行磁盘写入。当"allocindir head"表变为空时,"已保存数据指针"和"安全副本指针"将指向相同的块,而indirdep结构(以及安全副本)则可以释放了。

  3.6 新间接块依赖关系追踪

  图 6 表现了刚扩展到单级间接块的文件的相关依赖关系。这包括了inodedep和indirdep结构,用以管理i-节点和间接块的依赖结构,一个用于追踪间接块的分配的allocdirect结构,一个用于追踪间接块指向的新分块的allocindir结构。这些结构如前述的那样使用。间接块和数据块都不设置相应的位映射表项,因此他们的DEPCOMPLETE标志不被设置,也没有bmsafemap结构跟踪。i-节点的位映射表项被写入之后,inodedep结构的DEPCOMPLETE被设置。inodedep结构对"buffer update[缓冲区更新]"表的使用标志着在核心内存中的i-节点于VOP_UPDATE调用中被复制到对应的缓冲区中。依赖关系指针(从i-节点到间接块,以及从间接块到数据块)还不能被安全地写入磁盘,因为相应的COMPLETE和DEPCOMPLETE均处于清零状态。只有当位映射表及块内容都被写入之后,才能置这些标志位,从而完成依赖更新。

责编:豆豆技术应用

正在加载评论...