一种虚拟机增量镜像访问方法及系统与流程

文档序号:33119771发布日期:2023-02-01 03:30阅读:84来源:国知局
一种虚拟机增量镜像访问方法及系统与流程

1.本发明属于计算机技术领域,尤其涉及一种虚拟机增量镜像访问方法及系统。


背景技术:

2.本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
3.增量镜像是一种非常有效的节省虚拟机镜像磁盘空间的方法,对于主流的开源虚拟化方案qemu/kvm来说,qcow2磁盘格式即支持基于母盘的增量镜像。但是这种技术在实践中,其访问效率不如raw格式,尤其在共享母盘的虚拟机数量较多的时候。
4.现有的方法有采用升级机械磁盘的转速规格或者使用高速ssd替换机械磁盘,即通过升级硬件实现效率的提升。但是这种方法虽然简便,但是增加了成本。
5.图1为目前虚拟机访问镜像磁盘的方式,虚拟机通过virtio-blk驱动向qemu进程发出访问请求。如果是写请求,则把数据写入所属的虚拟机磁盘镜像文件;如果是读请求,需要通过虚拟机磁盘镜像文件中保存的映射表作进一步判断,如果目标是本虚拟机新建或改写过的数据块,直接从当前磁盘镜像文件中读取,否则需要再去母盘镜像文件中查找目标并读出。通常情况下,读请求远高于写请求的频率,且虚拟机自身磁盘镜像文件中只保存增量,多数读请求仍然需要通过操作母盘镜像文件完成。因此,针对母盘镜像文件的读操作效率是主要瓶颈点。


技术实现要素:

6.为克服上述现有技术的不足,本发明提供了一种虚拟机增量镜像访问方法及系统,通过宿主机用户态增加的共享木母盘镜像缓存机制,从而提升了虚拟机读写磁盘的效率。
7.为实现上述目的,本发明的一个或多个实施例提供了如下技术方案:一种虚拟机增量镜像访问方法,包括:
8.获取虚拟机驱动程序访问磁盘的访问读请求;
9.将母盘镜像文件缓存至在宿主机用户态预先开辟的内存区;
10.若虚拟机自身磁盘镜像文件不存在所述访问读请求的第一目标数据块,则根据所述访问读请求从内存区母盘镜像缓存文件中获得第一目标数据块。
11.本发明的第二个方面提供一种虚拟机增量镜像访问系统,包括:
12.虚拟机:用于向虚拟机磁盘发出镜像文件的访问请求;
13.virtio-blk驱动:用于将虚拟机访问请求发送至虚拟机磁盘并在虚拟机磁盘中执行访问请求;
14.虚拟机磁盘:用于接收虚拟机发送的镜像文件访问请求并判断所访问请求的目标数据块是否存在于虚拟机磁盘的镜像文件中;
15.宿主机缓存区:用于缓存母盘镜像文件,接收虚拟机的访问请求,将访问请求的目
标数据块返至虚拟机。
16.以上一个或多个技术方案存在以下有益效果:
17.在本发明中,针对使用增量镜像方案的虚拟机,通过在宿主机用户态增加一个共享的母盘镜像缓存机制,虚拟机发送的访问读请求直接从母盘镜像缓存中读取,而不需每次通过系统调用去访问文件内容,减少了用户态内核切换的开销,提升了虚拟机磁盘访问效率,缓解了启动风暴问题。
18.本发明附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
19.构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
20.图1为现有的虚拟机访问镜像磁盘的方法流程图;
21.图2是本发明实施例一中虚拟机访问镜像磁盘的方法流程图。
具体实施方式
22.应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
23.需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。
24.在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
25.实施例一
26.如图2所示,本实施例公开了一种虚拟机增量镜像访问方法,有两类独立运行的进程协作参与了这个协作过程。第一类是qemu进程,每个虚拟机对应一个qemu进程,qemu进程为其所属的虚拟机处理io请求。第二类是代理进程,这个代理进程负责母盘文件和母盘镜像缓存之间数据块的交换。两类进程协作的中介是母盘镜像缓存,里面缓存着母盘文件最近被访问过的数据块。从母盘镜像缓存的角度,qemu进程是消费者,而代理进程是生产者。两个逻辑过程是以母盘镜像缓存为中介的相对独立的并行的逻辑过程。
27.具体包括两个流程:a是虚拟机访问自身镜像文件和母盘镜像缓存的流程;b是代理进程对母盘镜像缓存中未命中的缓存项进行填充的过程。两个过程之间以新增的母盘镜像缓存为中间媒介进行协作。
28.a.1虚拟机通过virtio-blk驱动发出磁盘访问请求。如果是写请求,直接转a.2;如果是读请求,通过虚拟机磁盘镜像文件中保存的映射表作进一步判断,如果目标是本虚拟机新建或改写过的数据块,转a.2;否则转a.3。
29.a.2virtio-blk驱动执行磁盘访问请求,如果是读请求,从自身的磁盘镜像文件中的目标位置读出数据块并返回到虚拟机;如果是写请求,向目标位置写入数据块。至此,本次处理结束,等待处理虚拟机下一个访问请求。
30.a.3qemu进程的virtio-blk驱动尝试从母盘镜像缓存中读目标数据块。如果缓存
命中,直接返回数据块,流程结束;如果未命中,清理缓存中最近最少使用的一项作为等待项,qemu进程进入等待状态,转b.1。
31.b流程:
32.b.1唤醒代理进程。
33.b.2代理进程通过宿主机操作系统的系统调用,从母盘镜像文件中读出目标数据。
34.b.3代理进程用读到的目标数据填充母盘镜像缓存中的等待项,然后唤醒等待该缓存项的进程(即a.3中进入等待的qemu进程)。qemu进程的virtio-blk驱动从母盘镜像缓存中取得数据块并返回到虚拟机,流程结束。
35.需要说明的是,母盘镜像缓存只对被访问过的数据块进行缓存。母盘镜像缓存的实现机制就是在宿主机操作系统中开辟一块共享缓存,因为它是共享的,所以所有qemu进程都可以访问到它,因此它不是任何一个qemu进程的私有缓存。
36.需要说明的是,缓存是前置于文件的。大致可表示为“读者
”‑
》“缓存
”‑
》“文件”。这里“读者”就是qemu进程。最初时,缓存是空的。读者想从缓存中读一个数据块,肯定读不到,这就是“未命中”,此时读者必须等待。另外有一个进程(即代理进程)被唤醒,负责把“未命中”的数据块从文件中填充到缓存里面。然后,读者被唤醒,就可以读到那个目标数据块了。上述过程一旦开始,很快缓存就会被填满,其中始终维持着最近最常被访问的数据块,这些数据块有较大几率也是其它虚拟机的qemu进程想去访问的,有较高的缓存命中率,从而减少了直接访问文件的频率。另外,缓存容量相对于文件的容量总是非常有限的,所以如果缓存满了,填充新数据块时就要先把最老最不常用的一块先逐出去,腾出地方。
37.实施例二
38.本实施例的目的是提供一种虚拟机增量镜像访问系统,其特征在于,包括:
39.虚拟机:用于向虚拟机磁盘发出镜像文件的访问请求;
40.virtio-blk驱动:用于将虚拟机访问请求发送至虚拟机磁盘并在虚拟机磁盘中执行访问请求;
41.虚拟机磁盘:用于接收虚拟机发送的镜像文件访问请求并判断所访问请求的目标数据块是否存在于虚拟机磁盘的镜像文件中;
42.宿主机缓存区:用于缓存母盘镜像文件,接收虚拟机的访问请求,将访问请求的目标数据块返至虚拟机。
43.在本实施例中,还包括:虚拟机磁盘:还用于在虚拟机发送的镜像文件访问请求为写请求时,在目标位置写入访问写请求对应的目标数据块。
44.虚拟机磁盘:用于在虚拟机发送的镜像文件访问请求为读请求时,根据虚拟机磁盘保存的映射表判定访问读请求对应的目标数据块是否存在于虚拟机磁盘中,若存在,则返回访问读请求对应的目标数据至虚拟机。
45.宿主机缓存区:用于接收虚拟机的访问读请求,若宿主机缓存区存在访问读请求对应的目标数据块,则将访问读请求对应的目标数据块返至虚拟机。
46.清理模块:在宿主机缓存区不存在访问读请求对应的目标数据块时,用于清理宿主机缓存区最近最少使用的一项作为等待项。
47.第一唤醒模块:在宿主机缓存区不存在访问读请求对应的目标数据块时,用于唤醒代理进程。
48.代理进程:从母盘镜像文件中读取访问读请求对应的目标数据块,并将读到的目标数据块填充至宿主机缓存区中的等待项中。
49.第二唤醒模块:用于唤醒等待项的qemu进程,qemu进程的virtio-blk驱动从母盘镜像缓存中取得目标数据块并返回到虚拟机。
50.上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1