一种基于存储级内存的日志文件系统性能提高方法_2

文档序号:9579000阅读:来源:国知局
以通过控制写顺序来保证文件系统一致性,即先将数据写到文件系统,后将元数据写到日志,并在合适的时候写回到元数据区;而元数据和覆盖写数据则需要通过预写日志方式来保证完整性。
[0037]写日志操作的重点在于过程2,即将内存事务中的内容提交到日志设备,并需要保证在任何时刻写操作中断都不会破坏数据的一致性。同一数据块在日志区中仅保留最新日志记录和次最新日志记录。
[0038]在写日志过程中采用异或更新法,找出即将写入的日志块与次最新日志记录不同的字节,实现日志字节粒度的更新。
[0039]写日志操作具体步骤如下:
[0040](1.1)开始提交一个新的内存事务,将追加写链表中的数据写到文件系统,并在内存日志缓冲区中缓存该事务,若此次操作涉及的文件系统数据写入完成,转入步骤(1.2);
[0041](1.2)考察覆盖写和元数据链表中待提交日志块,在日志记录哈希表中查找所述待提交日志块对应的文件系统块是否存在次最新日志记录,若不存在,转入步骤(1.3);若存在,转入步骤(1.4);
[0042](1.3)顺序将所述待提交日志块写到日志区中的空闲位置,并将所述待提交日志块的信息添加到日志记录哈希表上;这里分两种情况:第一,日志记录哈希表上没有找到所述待提交日志块的信息,说明这是第一次更新所述待提交日志块,故将它标记为最新日志记录;第二,日志记录哈希表上找到了最新日志记录却没有找到次最新日志记录,则将其最新日志记录更新为次最新日志记录,所述待提交日志块标记为最新日志记录;转入步骤(1.5);
[0043](1.4)采用异或更新法,找出所述待提交日志块B3与其次最新日志记录B1不同的字节,即P = B1 ? B3( ?为异或符号),分析P中的每个字节,若为0,则表示日志块B3与日志块B1的该字节相同,不做更新;若为非0,则表示日志块B3与日志块B1的该字节不同,将P和B1中该字节做异或运算实现对日志块B1的更新。由于B1为次最新日志记录,已经标记为无效,即便更新过程中断,也不会破坏日志事务的一致性和完整性。更新日志记录哈希表,将B3对应的最新日志记录标记为次最新日志记录,异或更新完成之后的B1标记为最新日志记录;转入步骤(1.5);
[0044](1.5)若当前内存事务中的所有待提交日志块都已经完成提交,转入步骤(1.6);否则,转入步骤(1.2);
[0045](1.6)将最后一条日志记录的位置设置为当前事务结束位置。转入步骤(1.7);
[0046](1.7)将日志缓冲区中当前内存事务对应的数据块标记为无效,转入步骤(1.8);
[0047](1.8)将当前事务结束位置设置为上一个事务结束位置。表示当前内存事务已经完成,可以接受下一个内存事务的提交。
[0048]图6为本发明的垃圾回收操作流程图,垃圾回收操作的目的在于回收日志区中无效的日志记录,具体方法采用标签交换法。
[0049]由于日志区中存在大量无效的日志记录,因此需要每隔一段时间进行垃圾回收。在垃圾回收间隔内,若日志区空间不足,也会进行垃圾回收。本发明中垃圾回收的特点在于,交换高地址处有效的日志标签和低地址处无效的日志标签,从而将所有有效日志记录集中在从日志起始位置起的一段连续的日志区空间内。
[0050]垃圾回收操作的具体步骤如下:
[0051](2.1)假设有指针first和指针last,指针first指向第一条日志记录,指针last指向最后一条日志记录。判断first指针与last指针是否重合。若重合,转入步骤(2.8),否则,转入步骤(2.2);
[0052](2.2)查看first指向的日志记录是否无效,若有效,first指向下一条日志记录,转入步骤(2.3);若无效,转入步骤(2.4);
[0053](2.3)判断first指针与last指针是否重合。若重合,转入步骤(2.8),否贝>J,转入步骤(2.2);
[0054](2.4)查看last指向的日志记录是否无效,若有效,转入步骤(2.5),否则,转入步骤(2.6);
[0055](2.5)将last指向的日志记录写到first指向的日志记录,并将first指针指向的日志记录标记为有效。假设first指向的日志记录对应的磁盘块号为blknr,则查找日志记录哈希表,更新磁盘块blknr对应的最新日志记录为last指针指向的日志记录。转入步骤(2.7);
[0056](2.6) last指针指向上一条日志记录,转入步骤(2.3);
[0057](2.7)first指针指向下一条日志记录,转入步骤(2.2);
[0058](2.8)将first指针的位置标记为当前事务结束位置,转入步骤(2.9);
[0059](2.9)最后,对连续的无效日志记录空间进行释放,完成垃圾回收操作。
[0060]图7为本发明的数据写回操作流程图,数据写回操作是在当日志区空间不足时,进行数据写回操作。
[0061]当完成垃圾回收后,日志区空间依然不足时,将缓存于SCM日志区中的覆盖写数据写回到磁盘,元数据写回到元数据区;数据写回策略主要考虑两点:1、写回数据的顺序性;2、写回数据的冷热程度。
[0062]对于写回数据的顺序性,本发明中优先写回数据日志。一般来说数据的顺序性要高于元数据的顺序性,因此优先写回数据,有利于提高数据写回效率。对于写回数据的冷热程度,由于日志区的逻辑顺序性,自低地址到高地址的数据分布,形成一个“天然”的从冷到热的分布:越“热”的数据,其有效的日志记录所在的标签地址越高;越“冷”的数据,其有效的日志记录所在的标签地址越低。
[0063]因此,每次执行数据写回时,从日志区的第一条日志记录开始,自低地址向高地址,选择若干有效日志记录写回,即实现了日志数据从冷到热的写回。
[0064]数据写回操作具体步骤如下:
[0065](3.1)从第一条日志记录开始,查看日志记录是否有效,若无效,转入步骤(3.2),否则,转入步骤(3.3);
[0066](3.2)查看下一条日志记录是否有效,若无效,转入步骤(3.2),否则,转入步骤(3.3);
[0067](3.3)考察该日志记录的元数据标志位,若为元数据,转入步骤(3.4),否则,转入步骤(3.5);
[0068](3.4)将元数据写回到元数据区,转入步骤(3.6);
[0069](3.5)将覆盖写数据块写回磁盘,转入步骤(3.6);
[0070](3.6)假设写回的数据块对应的磁盘块号为blknr,查找日志记录哈希表,将磁盘块号blknr对应的日志记录标记为无效。删除磁盘块号blknr对应的哈希节点。转入步骤(3.7);
[0071](3.7)重复步骤(3.2),直至将所有有效日志记录对应的的数据块写回到磁盘和元数据块写回到元数据区。
[0072]图8为本发明的系统恢复操作流程图,在系统宕机后,需要利用SCM中的日志记录将系统恢复到一致性状态。系统恢复后,SCM中的日志记录全部作废。
[0073]系统恢复操作具体步骤如下:
[0074](4.1)从第一条日志记录开始,查看日志记录是否有效,若无效,转入步骤(4.2),否则,转入步骤(4.3);
[0075](4.2)查看下一条日志记录是否有效,若无效,转入步骤(4.2),否则,转入步骤(4.3);
[0076](4.3)假定当前日志记录对应的磁盘块号为blknr,将当前日志记录写回到磁盘相应的位置并将当前日志记录标记为无效。转入步骤(4.4);
[0077](4.4)查找日志记录哈希表,删除日志记录哈希表中磁盘块号blknr对应的哈希节点。转入步骤(4.5);
[0078](4.5)重复步骤(4.2)和(4.4),直至将所有数据日志记录恢复到磁盘和元数据日志记录恢复到元数据区。转入步骤(4.6);
[0079](4.6)将上一个事务结束标志和当前事务结束标志均置于日志起始终位置。
[0080]本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种基于存储级内存的日志文件系统性能提高方法,其特征在于,包括
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1