CN106775956B - Xen虚拟机Fork机制建立方法 - Google Patents
Xen虚拟机Fork机制建立方法 Download PDFInfo
- Publication number
- CN106775956B CN106775956B CN201710026549.1A CN201710026549A CN106775956B CN 106775956 B CN106775956 B CN 106775956B CN 201710026549 A CN201710026549 A CN 201710026549A CN 106775956 B CN106775956 B CN 106775956B
- Authority
- CN
- China
- Prior art keywords
- domu
- father
- xenstore
- virtual machine
- sub
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
Abstract
本发明属于计算机虚拟技术领域,具体涉及Xen虚拟机Fork机制建立方法。主要步骤:启动xen系统,在Xen内核的libxl模块主函数中,设置两个进程;父DomU构建完成并启动起来,读取Xenstore中自身DomU下的is_parent标志位,判断若等于1,执行父DomU的fork操作;子DomU构建完成并启动起来,读取Xenstore中自身DomU下的is_parent标志位,判断等于0,执行子DomU的操作;子DomU读取Xenstore中授权表下标和页内偏移、寄存器状态值和要执行的函数名称,映射授权页面,恢复寄存器状态,然后执行函数。
Description
技术领域
本发明属于计算机虚拟技术领域,具体涉及Xen虚拟机Fork机制建立方法。
背景技术
Xen是一个开放源代码的虚拟机监视器,在Xen上运行的虚拟机称为Domain(域),在Xen上的众多Domain中存在一个特权域用来辅助Xen管理其他Domain,提供相应的虚拟资源服务,特别是其他Domain对I/O设备的访问,这个特权域称为Domain0(简称:Dom0),而其他则称为DomainU(简称:DomU),本文中Fork机制所指虚拟机均指DomU,Fork表示分叉,克隆的意思。Xen系统实现了共享内存机制,用于Domain之间数据的共享和传递。它建立在Domain之间的授权机制之上,即对共享内存的访问须要预先通过授权。Domain之间的授权机制称为授权表机制,它是一种基于页(Pages)的授权访问机制。Xenstore是Xen提供的一个域间共享的存储系统,这个系统由Dom0管理和维持。Xenstore是一个具有层次结构的目录,类似于Linux中的树形目录。Xenstore中存储了Domain之间共享的配置信息,Dom0作为管理域,可以查看整个结构的内容,而DomU只能查看自身的信息。MiniOS是包含在Xen源代码中的一个轻量级的操作系统内核,主要作为存根域的操作系统,存根域是一个为分解Dom0Qemu设备模型(为Xen的全虚拟化功能提供支持)运行在Xen之上的特殊的系统域。
经过修改的MiniOS成为可以提供单一服务的虚拟机,称作Unikernel。由此可以将Xen看作一个整体的操作系统,其上运行的各个提供单一服务的Domain看作操作系统中的进程。实际上,Domain在Xen系统中的地位与传统Linux系统中的进程无异。在Linux系统中,进程通过Fork(分叉)产生子进程,Fork过程首先会对父进程进行克隆,产生一个几乎完全一样的子进程,之后父子进程会执行不同的代码,从而完成不同任务,进程的Fork是Linux中产生新进程的主要方式。受Linux进程Fork的启发,因此提出Xen之上虚拟机的Fork机制。使虚拟机能在运行过程中Fork出具有相同初始状态的子虚拟机,去完成其他任务。
虚拟机Fork机制本质上是虚拟机的克隆,但是目前的虚拟机克隆都是属于静态克隆,即先将要克隆的虚拟机挂起或关闭,然后手动执行克隆操作,最后恢复原始虚拟机并启动新虚拟机。不同的虚拟机监视器有着不同的克隆策略。目前业界主流的虚拟机监视器有VMware、KVM和Xen等。VMware支持两种类型的克隆:完整克隆和链接克隆,一个完整克隆是和原始虚拟机完全独立的一个拷贝,它不和原始虚拟机共享任何资源。可以脱离原始虚拟机独立使用。一个链接克隆需要和原始虚拟机共享同一虚拟磁盘文件,不能脱离原始虚拟机独立运行。但采用共享磁盘文件却大大缩短了创建克隆虚拟机的时间,同时还节省了宝贵的物理磁盘空间。KVM与Xen有着相同的两种虚拟机克隆方式,一个是将虚拟机关闭之后,使用Virt-manager(一个开源的虚拟机管理工具)的Virt-clone工具(或者使用其他虚拟机管理工具)对虚拟机进行克隆,然后修改新虚拟机的主机名和IP地址等;另外一种方式是手动直接复制磁盘文件与配置文件,然后修改配置文件。这两种方式本质上都是对虚拟机的磁盘文件和配置文件进行了拷贝,均需要挂起或关闭原始虚拟机。目前各种虚拟机监视器中,类似于Linux进程Fork机制这种动态克隆虚拟机的机制还未实现。
现有虚拟机的克隆技术均是静态克隆,先将要克隆的虚拟机挂起或关闭,然后手动执行克隆操作,最后恢复原始虚拟机并启动新虚拟机,这种方式不符合虚拟机Fork这种在原虚拟机运行过程中克隆出一个子虚拟机场景的自动化需求,这种克隆方式可以称为动态克隆。而且静态克隆因为挂起或关闭了原虚拟机,有着明确的一段服务不可用的时间,违背了模仿Linux进程Fork机制的思想。
发明内容
针对上述技术问题,本发明的目的是使Xen之上的虚拟机在运行过程中就能克隆出子虚拟机,然后自动去运行其他服务,而不必挂起或关闭原虚拟机,一是使虚拟机的克隆和运行不同服务达到了自动化需求,二是节省了由于原虚拟机挂起或关闭而造成了服务中断。使整个虚拟机的克隆过程更加类似于Linux中进程的Fork机制。本发明提出了一种Xen虚拟机Fork机制建立方法,包括以下步骤:
(S1)启动xen系统,将在Xen上运行的虚拟机分为两类,第一类是用来辅助Xen管理和提供虚拟服务资源的虚拟机,记为Dom0(也称为特权域),第二类是除第一类外的虚拟机,记为DomU(也称为非特权域);初始的DomU称为父DomU,对应的父DomU通过Fork产生的虚拟机称为子DomU;
(S2)在Xen内核的libxl模块主函数中,设置两个进程,进程一用于创建父DomU,进程二用于轮询Xenstore中父DomU的done_fork标志位;并定义全局变量is_parent,在进程一中设置is_parent=1,进程二中设置is_parent=0;
(S3)在libxl模块的DomU构建函数中,判断全局变量is_parent是否等于1,若is_parent=1,开始构建父DomU,在Xenstore的父DomU节点下写入标志位is_parent=1;父DomU构建完成并启动起来,进入到DomU的用户进程主函数,读取Xenstore中自身DomU下的is_parent标志位,判断若等于1,执行父DomU的fork操作;
(S4)父DomU进行Fork开始时,首先授权父DomU内存页面,并在Xenstore中记录授权表下标和页内偏移,然后在Xenstore对应的父DomU节点中写入done_fork标志位等于1,并记录父DomU各寄存器状态和派发给将要启动的子DomU执行的任务函数名;
(S5)当Dom0中进程二轮询到Xenstore中父DomU的done_fork标志位等于1,跳出循环,进入到DomU构建函数中;
(S6)在DomU构建函数中,判断全局变量是否等于1,若is_parent不等于1,开始构建子DomU,在Xenstore的子DomU节点下写入标志位is_parent=0,此过程中,Dom0读取Xenstore中父DomU节点下的各数据值,并写入到子DomU节点中;子DomU构建完成并启动起来,进入到DomU的用户进程主函数,读取Xenstore中自身DomU下的is_parent标志位,判断等于0,执行子DomU的操作;
(S7)子DomU读取Xenstore中授权表下标和页内偏移、寄存器状态值和需要执行的函数名称,映射授权页面,恢复寄存器状态,然后执行函数(即:需要执行的函数名称对应的函数)。
进一步地,所述步骤(S4)中父DomU通知Dom0启动子DomU是通过设置done_fork标志位让Dom0轮询的方式,替换为事件通知方式,采用Xen的事件通道机制,即DomU通过发送事件来让Dom0启动子DomU。
进一步地,所述父DomU将授权表下标、自身寄存器状态、执行函数名等消息值发送给子DomU用写入Xenstore Dom0作为中介的方式替换为域间通信方式,即待子DomU启动完成,父DomU将所述消息值直接发送给子DomU。
进一步地,使子DomU恢复父DomU相同的内存状态,采用父DomU将内存共享给子DomU的方式,替换为直接采用内存拷贝的技术。目前虚拟机快照和虚拟机迁移中的内存预拷贝策略可满足不挂起或停止虚拟机的要求。
进一步地,复制父DomU配置文件生成子DomU配置文件时,采用手动复制并更改的方式,替换成通过代码在对配置文件进行解析的过程中,更改配置文件中的某些参数,使子DomU区别于父DomU。
采用本发明获得的有益效果:本发明使Xen之上的虚拟机在运行过程中就能克隆出子虚拟机,然后自动去运行其他服务,而不必挂起或关闭原虚拟机,一是使虚拟机的克隆和运行不同服务达到了自动化需求,二是节省了由于原虚拟机挂起或关闭而造成了服务中断。使整个虚拟机的克隆过程更加类似于Linux中进程的Fork机制。
附图说明
图1是本发明的流程示意图;
图2是本发明实施例数据处理图。
具体实施方式
下面结合附图和实施例对本发明作进一步说明。
由于Dom0和DomU均是Xen上的虚拟机,实施例中Fork的虚拟机仅包括DomU,但Dom0也是Fork过程中的重要角色,为免于造成误解,下面实现实施例描述中Fork过程的“虚拟机”词语均以“DomU”指代。
本发明要实现的目标是使DomU在运行过程中Fork出子DomU执行相应的程序功能,其实现的主要思路是,当父DomU要进行Fork时,告知Dom0启动一个与父DomU内核相同但配置文件不同的新DomU(即子DomU),待子DomU启动完成后,将父DomU的内存和寄存器状态复制给子DomU。
结合附图1,本发明主要对Xen内核的Libxl模块进行修改,更改DomU镜像建立和启动过程,DomU Fork具体流程描述如下。
在xen系统中,DomU的创建、暂停、销毁等均由Dom0完成,通过Libxl模块。因此Libxl模块的代码是在Dom0中运行。在libxl模块主函数中,设置两个进程,一个用于创建父DomU,另外一个进程用于轮询done_fork标志位,该标志位等于1时即创建子DomU,两个进程分别会对is_parent全局变量设置成1或0。
在libxl模块的创建DomU代码中,通过is_parent全局变量判断要启动的是父DomU还是子DomU,然后设置Xenstore中对应DomU节点下的is_parent标志位(is_parent=1表示父DomU,反之亦然)。当父DomU要进行Fork时,首先会授权其内存页面(共享内存),并在Xenstore中记录授权表下标和页内偏移,然后设置Xenstore对应DomU节点中done_fork标志位等于1,并记录自身各寄存器状态和子DomU要执行的函数名称。Dom0运行过程中,设置一个进程一直轮询Xenstore中父DomU节点的done_fork标志位,当done_fork标志位等于1时就开始构建子DomU,使用与父DomU相同的内核但配置文件不同,同时Dom0会读取Xentore的父DomU域中的各项消息值,包括授权表下标、页内偏移、子DomU要执行的函数名称和父DomU各寄存器状态,并写到Xentore的子DomU节点中。然后当子DomU启动完成,就读取Xenstore中的这些值,然后映射父DomU共享的内存页面,恢复寄存器状态,最后跳转到要执行的函数名称进行执行,至此父DomU就完成了Fork。
Xenstore的结构为类似于linux目录结构的树形结构,每个Domain都拥有自己的节点(Domain id为key),节点下面存储着自身的各种信息,各DomU之间不能互相访问,但是Dom0可以访问xentore全部结构,在构建DomU时,xenstore中已经存在相应Domain id的节点,Dom0知道DomU的Domain id,就可以在其节点写入数据。
如图1所示的流程图中,进程二是一直在轮询,只有待进程一先执行过后,当父DomU写入标志位done_fork=1后,进程二才往下进行剩余步骤。图1中DomU构建函数根据全局变量is_parent的取值来判断构建的是父DomU、还是子DomU,则启动DomU则根据上面构建的是父DomU或子DomU则对应启动该DomU。Dom U的用户进程主函数,在实践中也可以分别编程为父Dom U、子Dom U的用户进程主函数,本实施例中将两部分代码集成为一个用户进程主函数中,不影响两者功能的实现。
实施例中,复制父DomU的配置文件并更改ip地址,主机名等参数,成为子DomU的配置文件;构建父DomU,父DomU启动之后,进行fork,一段时间之后,通过xl list命令(此命令查看xen启动的所有Domain),可以查看子DomU也启动起来,通过xl console子DomUID命令(接入Domain控制台),可以查看到子DomU调用指定函数的结果(一直打印某个字符串)T如图2所示。
本发明模仿Linux进程的Fork机制,使Xen之上的虚拟机在运行过程中就能克隆出子虚拟机,然后自动去运行其他服务,而不必挂起或关闭原虚拟机,使Xen的功能越来越接近于整个操作系统。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换等,均应包含在本发明的保护范围之内。
Claims (1)
1.一种Xen虚拟机Fork机制建立方法,其特征在于,包括以下步骤:
(S1)启动xen系统,将在Xen上运行的虚拟机分为两类,第一类是用来辅助Xen管理和提供虚拟服务资源的虚拟机,记为Dom0,第二类是除第一类外的虚拟机,记为DomU;初始的DomU称为父DomU,对应的父DomU通过Fork产生的虚拟机称为子DomU;
(S2)在Xen内核的libxl模块主函数中,设置两个进程,进程一用于创建父DomU,进程二用于轮询Xenstore中父DomU的done_fork标志位;并定义全局变量is_parent,在进程一中设置is_parent=1,进程二中设置is_parent=0;
(S3)在libxl模块的DomU构建函数中,判断全局变量is_parent是否等于1,若is_parent=1,开始构建父DomU,在Xenstore的父DomU节点下写入标志位is_parent=1;父DomU构建完成并启动起来,进入到DomU的用户进程主函数,读取Xenstore中自身DomU下的is_parent标志位,判断若等于1,执行父DomU的fork操作;
(S4)父DomU进行Fork开始时,首先授权父DomU内存页面,并在Xenstore中记录授权表下标和页内偏移,然后在Xenstore对应的父DomU节点中写入done_fork标志位等于1,并记录父DomU各寄存器状态和派发给待启动的子DomU执行的任务函数名;
(S5)Dom0中进程二此时轮询到Xenstore中父DomU的done_fork标志位等于1,跳出循环,进入到DomU构建函数中;
(S6)在DomU构建函数中,判断全局变量是否等于1,若is_parent不等于1,开始构建子DomU,在Xenstore的子DomU节点下写入标志位is_parent=0,此过程中,Dom0读取Xenstore中父DomU节点下的各数据值,并写入到子DomU节点中;子DomU构建完成并启动起来,进入到DomU的用户进程主函数,读取Xenstore中自身DomU下的is_parent标志位,判断等于0,执行子DomU的操作;
(S7)子DomU读取Xenstore中授权表下标和页内偏移、寄存器状态值和要执行的函数名称,映射授权页面,恢复寄存器状态,然后执行函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710026549.1A CN106775956B (zh) | 2017-01-14 | 2017-01-14 | Xen虚拟机Fork机制建立方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710026549.1A CN106775956B (zh) | 2017-01-14 | 2017-01-14 | Xen虚拟机Fork机制建立方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106775956A CN106775956A (zh) | 2017-05-31 |
CN106775956B true CN106775956B (zh) | 2019-09-06 |
Family
ID=58946622
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710026549.1A Active CN106775956B (zh) | 2017-01-14 | 2017-01-14 | Xen虚拟机Fork机制建立方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106775956B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10817402B2 (en) | 2018-01-03 | 2020-10-27 | Nec Corporation | Method and system for automated building of specialized operating systems and virtual machine images based on reinforcement learning |
CN112162830B (zh) * | 2020-10-30 | 2021-11-09 | 北京易捷思达科技发展有限公司 | 虚拟机快速启动方法、存储介质及终端 |
CN115309511B (zh) * | 2022-09-28 | 2023-04-04 | 亿咖通(湖北)技术有限公司 | 基于Xen的数据交互方法、装置、存储介质以及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009070673A1 (en) * | 2007-11-27 | 2009-06-04 | Manageiq, Inc. | Methods and apparatus for locating an unauthorized virtual machine |
CN101211272B (zh) * | 2006-12-29 | 2012-03-21 | 英特尔公司 | 虚拟机生成器、虚拟机生成方法和虚拟机管理器 |
CN101512488B (zh) * | 2006-08-07 | 2013-11-27 | 甲骨文国际公司 | 在虚拟机环境中提供硬件虚拟化的系统和方法 |
CN103955362A (zh) * | 2014-04-03 | 2014-07-30 | 广东工业大学 | 一种基于Xen的操作系统内核监控方法 |
CN104407916A (zh) * | 2014-12-15 | 2015-03-11 | 北京国双科技有限公司 | 虚拟机的克隆方法和装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW201007574A (en) * | 2008-08-13 | 2010-02-16 | Inventec Corp | Internet server system and method of constructing and starting a virtual machine |
US20100162236A1 (en) * | 2008-12-22 | 2010-06-24 | Witchey Nicholas J | Using Stored State To Instantiate A Virtual Computer |
US9507623B2 (en) * | 2014-12-15 | 2016-11-29 | Vmware, Inc. | Handling disk state inheritance for forked virtual machines |
-
2017
- 2017-01-14 CN CN201710026549.1A patent/CN106775956B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101512488B (zh) * | 2006-08-07 | 2013-11-27 | 甲骨文国际公司 | 在虚拟机环境中提供硬件虚拟化的系统和方法 |
CN101211272B (zh) * | 2006-12-29 | 2012-03-21 | 英特尔公司 | 虚拟机生成器、虚拟机生成方法和虚拟机管理器 |
WO2009070673A1 (en) * | 2007-11-27 | 2009-06-04 | Manageiq, Inc. | Methods and apparatus for locating an unauthorized virtual machine |
CN103955362A (zh) * | 2014-04-03 | 2014-07-30 | 广东工业大学 | 一种基于Xen的操作系统内核监控方法 |
CN104407916A (zh) * | 2014-12-15 | 2015-03-11 | 北京国双科技有限公司 | 虚拟机的克隆方法和装置 |
Non-Patent Citations (4)
Title |
---|
Dalvik虚拟机进程模型分析;周毅敏,等;;《计算机技术与发展》;20100228;第20卷(第2期);83-86 |
Secure reincarnation of compromised servers using Xen based time-forking virtual machines;Anwar,et al.,;《 5th IEEE International Conference on Pervasive Computing and Communications》;20070323;1-6 |
SnowFlock: rapid virtual machine cloning for cloud computing;Lagar-Cavilla H A,et al.;《Proceedings of the 4th ACM European conference on Computer systems. ACM》;20091231;1-12 |
基于XML的分布式虚拟运行环境建模与实现;李东升,等;;《计算机研究与发展》;20091231;第46卷(第增刊期);277-282 |
Also Published As
Publication number | Publication date |
---|---|
CN106775956A (zh) | 2017-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112199162B (zh) | 基于虚拟化磁盘双活容灾的磁盘快照方法、装置及介质 | |
CN109062655A (zh) | 一种容器化云平台及服务器 | |
CN103019802B (zh) | 一种虚拟机管理方法及平台 | |
CN110088733A (zh) | 虚拟机迁移的基于存储层的编排 | |
CN101349976A (zh) | 操作系统 | |
CN106775956B (zh) | Xen虚拟机Fork机制建立方法 | |
CN104137062B (zh) | 将代码动态注入到运行中的进程 | |
JP5186098B2 (ja) | データをバックアップするための方法、システム、およびコンピュータ・プログラム | |
Cerling et al. | Mastering Microsoft Virtualization | |
CN101387989A (zh) | 构建基于分区管理的虚拟存储设备的计算机系统及方法 | |
CN102541561B (zh) | 配置式软件开发方法及装置 | |
JP2004234114A (ja) | 計算機システム、計算機装置、オペレーティングシステムの移送方法及びプログラム | |
CN106201657A (zh) | 一种基于虚拟机的网卡信息处理方法及装置 | |
Marshall | Mastering VMware VSphere 6 | |
Jaaskelainen et al. | Automatic GUI test generation for smartphone applications-an evaluation | |
CN112418447B (zh) | 提供机器学习服务的系统、方法、介质和设备 | |
WO2010044150A1 (ja) | プログラム変更管理装置、プログラム変更管理プログラムおよびプログラム変更管理方法 | |
CN104133706A (zh) | 固件修改方法及固件修改装置 | |
Meike et al. | Inside the android OS: building, customizing, managing and operating android system services | |
JP2011248742A (ja) | ストレージ管理システム、及び管理計算機、並びにプログラム | |
JPH04245545A (ja) | マルチ・ユーザ仮想計算機システム構成方法およびマルチ・ユーザ仮想計算機システム | |
CN100390741C (zh) | 程序处理系统、程序处理方法以及计算机程序 | |
Thomas et al. | Simulation factory: Taming application configuration and workflow on high-end resources | |
CN103425550B (zh) | 一种系统克隆方法和装置 | |
US11593098B2 (en) | Synchronization of source code under development in multiple concurrent instances of an integrated development environment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |