一种基于零拷贝的快照卷读方法

文档序号:6629967阅读:222来源:国知局
一种基于零拷贝的快照卷读方法
【专利摘要】本发明公开了一种基于零拷贝的快照卷读方法,该方法步骤如下:快照模块首先根据每一个拆分的chunk,构建新io;构建新io后,在内存中通过一个个bio_vec结构将新io读取到的数据存放到相应的页内对应位置;其中,每个bio_vec结构包括三个成员,将每个bio_vec重定向到源io的bio_vec中相应的三个成员上,用源io已经申请的page提供内存空间;每个新io提交后,将读取的数据存放到源io的内存bio_vec中,源io结束时,即将一个个内存bio_vec刷写到连续的物理介质上,实现了快照卷读的操作。本发明的一种基于零拷贝的快照卷读方法和现有技术相比,该方法一方面不需要频繁申请、释放page,以减少内存碎片的产生,一方面不需要做数据的拷贝,规避了传统快照读对磁盘读写性能损耗的影响。
【专利说明】
—种基于零拷贝的快照卷读方法

【技术领域】
[0001]本发明涉及存储的设备【技术领域】,具体地说是一种基于零拷贝的快照卷读方法。

【背景技术】
[0002]随着计算机技术的快速发展,数字化信息已经逐步取代纸媒数据,呈现日均指数级增长。海量数据催生了云计算、大数据和海量存储系统的发展,对存储设备和存储应用的需求也越来越高。政府行业、银行系统、电力企业等对数据的安全性和业务连续性有着较高的要求,必须提供在线的数据保护。而快照就是一种在线存储设备防止数据丢失的有效方法,在越来越多的高端存储系统中,快照模块已成为一项基本的不可或缺的元素。
[0003]快照的主要功能在于能对在线数据按需进行备份和恢复。当存储设备发生应用故障或文件损坏时可进行快速数据恢复,将数据恢复到某个可用时间点的状态。同时,很多灾备应用(例如克隆,远程复制)将底层物理介质通过打快照将快照卷映射以达到对用户可见,因此快照卷读是个很重要且频繁操作的功能。
[0004]快照卷读操作会根据上层应用下发的1拆分chunk,对于未执行COW操作的chunk从源卷对应chunk读取数据,执行过COW操作的chunk直接从快照卷读取数据。传统的快照卷读在进行从源卷对应chunk读取数据时,首先需要新建1,申请1中需要的page,再提交1进行读取操作,在回调函数中将读取的内容拷贝到原始1对应的b1_vec中,最后再结束原始的1。这其中chunk越多,需要频繁申请page、释放page的次数越多,一方面易产生内存碎片,一方面严重降低了磁盘的读写性能。


【发明内容】

[0005]本发明的技术任务是提供一种基于零拷贝的快照卷读方法。
[0006]本发明的技术任务是按以下方式实现的,该方法步骤如下:
快照模块首先根据每一个拆分的chunk,构建新1 ;构建新1后,在内存中通过一个个b1_vec结构将新1读取到的数据存放到相应的页内对应位置;其中,每个b1_vec结构包括三个成员,将每个b1_vec重定向到源1的b1_vec中相应的三个成员上,用源1已经申请的page提供内存空间;每个新1提交后,将读取的数据存放到源1的内存b1_vec中,源1结束时,即将一个个内存b1_vec刷写到连续的物理介质上,实现了快照卷读的操作。
[0007]所述的b1_vec中相应的三个成员分别为bv_page、bv_offset和bv_len。
[0008]所述的bv_page为b1_vec在内存中的页,bv_page需要用内存中实际的页来存储,需要有实际的地址空间;bv_offset为b1_vec在内存中页内的起始偏移;bv_len为b1_vec在内存中页内的长度。
[0009]本发明的一种基于零拷贝的快照卷读方法和现有技术相比,该方法一方面不需要频繁申请、释放page,以减少内存碎片的产生,一方面不需要做数据的拷贝,规避了传统快照读对磁盘读写性能损耗的影响。

【专利附图】

【附图说明】
[0010]附图1为一种基于零拷贝的快照卷读方法的零拷贝放大示意图。

【具体实施方式】
[0011]实施例1:
该方法步骤如下:
快照模块首先根据每一个拆分的chunk,构建新1 ;构建新1后,在内存中通过一个个b1_vec结构将新1读取到的数据存放到相应的页内对应位置;其中,每个b1_vec结构包括bv_page、bv_offset和bv_len三个成员,将每个b1_vec重定向到源1的b1_vec中相应的bv_page、bv_offset和bv_len三个成员上,用源1已经申请的page提供内存空间;每个新1提交后,将读取的数据存放到源1的内存b1_VeC中,源1结束时,即将一个个内存b1_vec刷写到连续的物理介质上,实现了快照卷读的操作。
[0012]实施例2:
该方法步骤如下:
快照模块首先根据每一个拆分的chunk,构建新1 ;构建新1后,在内存中通过一个个b1_vec结构将新1读取到的数据存放到相应的页内对应位置;其中,每个b1_vec结构包括三个成员:
struct b1_vec{
bv_page;//该b1_vec在内存中的页
bv_offset; Il该b1_vec在内存中页内的起始偏移 bv_len;//该b1_vec在内存中页内的长度
};
bv_page需要用内存中实际的页来存储,需要有实际的地址空间。将每个b1_vec重定向到源1的b1_vec中相应的bv_page、bv_offset和bv_len三个成员上,用源1已经申请的page提供内存空间;每个新1提交后,将读取的数据存放到源1的内存b1_vec中,源1结束时,即将一个个内存b1_VeC刷写到连续的物理介质上,实现了快照卷读的操作。
[0013]从物理介质与内存映射关系上说明零拷贝过程。
[0014]物理介质上读是连续空间的读,读从sec_begin到sec_end之间的数据,而读取到的数据在内存中存放不一定是连续的,是存放到一个个page中起始位置为bv_offset,长度为bv_len的b1_vec中。如图所示,物理空间读取1、2、3块数据,分别存放在内存的pagel、page2、page3中,存放在page中的位置不是严格一致的。零拷贝中会根据拆分的每个chunk创建1,每个1的b1_vec依次指向源1的b1_vec上,直到到达sec_end。所以,新建的1和源1都是通过同样的内存空间映射,没有多余的申请释放以及拷贝过程。
[0015]通过上面【具体实施方式】,所述【技术领域】的技术人员可容易的实现本发明。但是应当理解,本发明并不限于上述的几种【具体实施方式】。在公开的实施方式的基础上,所述【技术领域】的技术人员可任意组合不同的技术特征,从而实现不同的技术方案。
【权利要求】
1.一种基于零拷贝的快照卷读方法,其特征在于,该方法步骤如下: 快照模块首先根据每一个拆分的chunk,构建新1 ;构建新1后,在内存中通过一个个b1_vec结构将新1读取到的数据存放到相应的页内对应位置;其中,每个b1_vec结构包括三个成员,将每个b1_vec重定向到源1的b1_vec中相应的三个成员上,用源1已经申请的page提供内存空间;每个新1提交后,将读取的数据存放到源1的内存b1_vec中,源1结束时,即将一个个内存b1_vec刷写到连续的物理介质上,实现了快照卷读的操作。
2.根据权利要求1所述的一种基于零拷贝的快照卷读方法,其特征在于,所述的b1_vec中相应的三个成员分别为bv_page、bv_offset和bv_len。
3.根据权利要求1所述的一种基于零拷贝的快照卷读方法,其特征在于,所述的bv_page为b1_vec在内存中的页,bv_page需要用内存中实际的页来存储,需要有实际的地址空间;bv_offset为b1_vec在内存中页内的起始偏移;bv_len为b1_vec在内存中页内的长度。
【文档编号】G06F11/14GK104268036SQ201410536706
【公开日】2015年1月7日 申请日期:2014年10月13日 优先权日:2014年10月13日
【发明者】王佳, 张在理 申请人:浪潮电子信息产业股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1