Soft Updates一项消除大多数同步写操作的技术(2)
http://tech.ddvip.com 2006年04月01日 社区交流
本文详细介绍Soft Updates一项消除大多数同步写操作的技术(2)
两个更新依赖关系的完成顺序并不重要。图4介绍了allocdirect结构,这一结构追踪直接被i-节点引用的块。其中的3个最近分配的逻辑块(1, 2和3)每一个都在不同的状态中。对于逻辑块1,位映射表依赖关系已经完成(如所示的那样,DEPCOMPLETE标志被置位),但块本身还没有被写入(COMPLETE标志复位)。对于逻辑块2,两个依赖关系都已经完成。对于逻辑块3,两个依赖关系都没有完成,因而相关的allocdirect结构被附加到一个bmsafemap"allocdirect head"表(前面提到,这个表在位映射表写盘之后被遍历以设置DEPCOMPLETE标志)。逻辑块1和3的COMPLETE标志将在他们的初始化好的数据块被写入磁盘之后设置。图中也说明了逻辑块1存在于VOP_UPDATE被调用的时刻,这也是它的allocdirect结构驻留在inodedep "buffer update"表中的原因。逻辑块2和3在最近的那次VOP_UPDATE之后调用,因而它们的结构将驻留在inodedep"incore update"表中。对于缓慢增大的文件,直接块指针可能首先指向一个片断,而这个片断随后将升格为更大的片断,直到最终成为一个全长的块。当片断被更大的片断或全长块替换时,它必须被释放回文件系统。不过,旧块在新的片断或块的位映射表项、内容,以及声明它们的i-节点被写入之前不能被释放。将被释放的片断由一个freefrag结构描述(图未提及)。freefrag结构被保存在即将替换掉它的那个块的allocdirect结构中的"freefrag"表中,直到新块的对应位映射表项和内容都被写入完成。随后,结构被移动到在调用VOP_UPDATE时,进入"buf wait"表中的那个与它的allocdirect相关的那个inodedep的"inode wait"表中。当保存i-节点块的缓冲区被写入磁盘之后,freefrag结构最终被加入tasklist中。当轮到tasklist处理时,由freefrag结构列出的片断将被返还给空闲块位映射表。
责编:豆豆技术应用