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

文档序号:9579000阅读:来源:国知局
存储系统的构建、写日志、垃圾回收、数据写回、系统恢复这五个操作,其中: 存储系统的构建操作:给原有的文件系统添加一块SCM挂载在内存总线上,与内存共享内存总线;并将SCM划分为日志区和元数据区,日志区用于记录元数据日志和覆盖写数据日志,元数据区用于永久保存元数据; 写日志操作:将内存事务的追加写数据写到文件系统;并且将内存事务的元数据和覆盖写数据写到日志区; 垃圾回收操作:每隔一段时间进行垃圾回收;在垃圾回收间隔内,若日志区空间不足,也进行垃圾回收;即交换高地址处有效的日志标签和低地址处无效的日志标签,从而将所有有效日志记录集中在从日志起始位置起的一段连续的日志区空间内; 数据写回操作:当完成垃圾回收后,日志区空间依然不足时,将缓存于SCM日志区中的覆盖写数据写回到磁盘,元数据写回到元数据区; 系统恢复操作:在系统宕机后,利用SCM中的日志记录将系统恢复到一致性状态;系统恢复后,SCM中的日志记录全部作废。2.如权利要求1所述的方法,其特征在于,在存储系统的构建操作中,在SCM中主要建立有日志超级块、日志记录哈希表和日志记录三种存储结构;其中,日志超级块用于记录第一个可用日志块、日志容量、剩余空间、有效日志记录数量、日志记录起始位置、上一次事务结束位置、当前事务结束位置;日志记录哈希表用于记录数据块对应的最新日志记录和次最新日志记录;日志记录,包括日志块和日志标签,其中日志块用于存放事务提交到日志区的缓冲区内容,日志标签用于描述日志记录的相关信息,包括日志记录对应的磁盘块号、日志记录有效标志和元数据标志位。3.如权利要求2所述的方法,其特征在于,所述日志记录哈希表由三个字段组成:磁盘块号blknr,最新日志记录scmlog,次最新日志记录old_scmlog ;日志记录哈希表的每一条表项用来记录磁盘块号blknr对应的最新日志记录scmlog和次最新日志记录old_scmlog。4.如权利要求1至3任一项所述的方法,其特征在于,在所述写日志操作中,一个内存事务由两个双向循环链表进行管理:一个是追加写链表,用于管理追加写数据缓冲区内容;另一个是覆盖写和元数据链表,用于管理覆盖写缓冲区和元数据数据缓冲区内容。5.如权利要求4所述的方法,其特征在于,所述写日志操作具体包括: (1.D提交一个新的内存事务,将追加写链表中的数据写到文件系统,并在内存日志缓冲区中缓存该事务,若此次操作涉及的文件系统数据写入完成,转入步骤(1.2); (1.2)考察覆盖写和元数据链表中待提交日志块,在日志记录哈希表中查找所述待提交日志块对应的文件系统块是否存在次最新日志记录,若不存在,转入步骤(1.3);若存在,转入步骤(1.4); (1.3)顺序将所述待提交日志块写到日志区中的空闲位置,并将所述待提交日志块的信息添加到日志记录哈希表上;转入步骤(1.5); (1.4)采用异或更新法,找出所述待提交日志块B3与其次最新日志记录BI不同的字节,即P = BI ? B3,其中?为异或符号,分析P中的每个字节,若为0,则表示日志块B3与日志块BI的该字节相同,不做更新;若为非0,则表示日志块B3与日志块BI的该字节不同,将P和BI中该字节做异或运算实现对日志块BI的更新;将B3对应的最新日志记录标记为次最新日志记录,异或更新完成之后的BI标记为最新日志记录;转入步骤(1.5); (1.5)若当前内存事务中的所有待提交日志块都已经完成提交,转入步骤(1.6);否贝IJ,转入步骤(1.2); (1.6)将最后一条日志记录的位置设置为当前事务结束位置;转入步骤(1.7); (1.7)将日志缓冲区中当前内存事务对应的数据块标记为无效,转入步骤(1.8); (1.8)将当前事务结束位置设置为上一个事务结束位置;表示当前内存事务已经完成,可以接受下一个内存事务的提交。6.如权利要求4所述的方法,其特征在于,所述步骤(1.3)分两种情况:第一,日志记录哈希表上没有找到所述待提交日志块的信息,说明这是第一次更新所述待提交日志块,将它标记为最新日志记录;第二,日志记录哈希表上找到了最新日志记录却没有找到次最新日志记录,则将其最新日志记录更新为次最新日志记录,所述待提交日志块标记为最新曰志记录。7.如权利要求1或2所述的方法,其特征在于,所述垃圾回收操作的具体步骤如下: (2.1)设有指针first和指针last,指针first指向第一条日志记录,指针last指向最后一条日志记录;判断first指针与last指针是否重合;若重合,转入步骤(2.8),否则,转入步骤(2.2); (2.2)查看first指向的日志记录是否无效,若有效,first指向下一条日志记录,转入步骤(2.3);若无效,转入步骤(2.4); (2.3)判断first指针与last指针是否重合;若重合,转入步骤(2.8),否则,转入步骤(2.2); (2.4)查看last指向的日志记录是否无效,若有效,转入步骤(2.5),否则,转入步骤(2.6); (2.5)将last指向的日志记录写到first指向的日志记录,并将first指针指向的日志记录标记为有效;假设first指向的日志记录对应的磁盘块号为blknr,则查找日志记录哈希表,更新磁盘块blknr对应的最新日志记录为last指针指向的日志记录;转入步骤(2.7); (2.6) last指针指向上一条日志记录;转入步骤(2.3); (2.7)first指针指向下一条日志记录,转入步骤(2.2); (2.8)将first指针的位置标记为当前事务结束位置;转入步骤(2.9); (2.9)对连续的无效日志记录空间进行释放,完成垃圾回收操作。8.如权利要求1或2所述的方法,其特征在于,所述数据写回操作具体步骤如下: (3.1)从第一条日志记录开始,查看日志记录是否有效,若无效,转入步骤(3.2),否则,转入步骤(3.3);(3.2)查看下一条日志记录是否有效,若无效,转入步骤(3.2),否则,转入步骤(3.3); (3.3)考察该日志记录的元数据标志位,若为元数据,转入步骤(3.4),否则,转入步骤(3.5); (3.4)将元数据写回到元数据区,转入步骤(3.6); (3.5)将覆盖写数据块写回磁盘,转入步骤(3.6); (3.6)假设写回的数据块对应的磁盘块号为blknr,查找日志记录哈希表,将磁盘块号blknr对应的日志记录标记为无效;删除磁盘块号blknr对应的哈希节点;转入步骤(3.7); (3.7)重复步骤(3.2),直至将所有有效日志记录对应的的数据块写回到磁盘和元数据块写回到元数据区。9.如权利要求1或2所述的方法,其特征在于,所述系统恢复操作具体步骤如下: (4.1)从第一条日志记录开始,查看日志记录是否有效,若无效,转入步骤(4.2),否则,转入步骤(4.3);(4.2)查看下一条日志记录是否有效,若无效,转入步骤(4.2),否则,转入步骤(4.3); (4.3)假定当前日志记录对应的磁盘块号为blknr,将当前日志记录写回到磁盘相应的位置并将当前日志记录标记为无效;转入步骤(4.4); (4.4)查找日志记录哈希表,删除日志记录哈希表中磁盘块号blknr对应的哈希节点;转入步骤(4.5); (4.5)重复步骤(4.2)和(4.4),直至将所有数据日志记录恢复到磁盘和元数据日志记录恢复到元数据区;转入步骤(4.6); (4.6)将上一个事务结束标志和当前事务结束标志均置于日志起始终位置。
【专利摘要】本发明公开了一种基于SCM的日志文件系统性能提高方法,将SCM作为内存设备存放文件系统元数据和日志,优化了元数据的读写,并且通过区分覆盖写和追加写,只将覆盖写数据写入到日志,追加写数据直接写入到文件系统并控制更新的顺序来保证文件系统一致性,减少日志开销,提升文件系统性能;利用SCM按字节修改的特性,通过计算新旧日志块之间的差异,实现日志字节粒度的更新,减少日志数据流。本发明主要包括存储系统的构建、写日志、垃圾回收、数据写回、系统恢复这五个操作,可用于各种日志文件系统,适用于构建高性能、高容量和高可靠性的大型存储系统。解决了现有日志文件系统中日志技术额外开销大、元数据写回频繁、宕机后恢复速度慢等问题。
【IPC分类】G06F3/06, G06F17/30
【公开号】CN105335098
【申请号】CN201510621004
【发明人】曾令仿, 涂盛霞, 张晓祎, 冯丹
【申请人】华中科技大学
【公开日】2016年2月17日
【申请日】2015年9月25日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1