xen save/restore 过程
以下分析基于 xen4.2.3, 虚拟机都是hvm模式
使用libxl库有两种方式启动一个虚拟机,一种是 xl create xx.conf , 这种方式从一个配置文件开始启动一个虚拟机,速度相对较慢。另一种是xl restore checkpointfile , 这种从一个checkpoint文件启动(恢复)虚拟机,速度非常快。 checkpointfile 可以认为是一个虚拟机快照,保存了虚拟机某一时刻的内存和设备状态,这里的‘某一时刻’其实就是执行保存快照 xl save domainname checkpointfile 的时刻。
一. xl save 流程
假设一开始是从xl create的方式启动的虚拟机 domtest, 执行到某一时刻相要通过xl save保存快照,xl save 执行的时候涉及多个进程,如下:
进程1: xl create domtest.conf
进程2: qemu-dm
进程3: xl save
进程4: libxl_save_helper (xen4.2 引入的)
一般xl create虚拟机后会发生多次fork和daemon调用,但完全启动之后主要的应用层进程就是 xl create 和 Qemu-dm 两个精灵进程。xl save执行时候还涉及两个文件,如下:
文件1: /var/lib/xen/userdata-d.domid.domuuid 文件
文件2:/var/lib/xen/qemu-resume.domid 文件
xl create过程中,虚拟机的配置会被保留一份在上述文件1里,而文件2是在xl save执行过程中由qemu-dm进程产生的。
下面是 "xl save checkpointfile " 命令执行的基本过程:
1. xl save 进程将文件1拷贝到checkpointfile文件开头
2. xl save 进程调用fork, 子进程调用 execvp 载入可执行程序 libxl-save-helper 变成进程4, 这个helper进程通过 libxc 库将虚拟机的整个内存状态保存在一个虚拟地址开始的内存空间里,这个虚拟地址是启动 libxl-save-helper时由 xl save 进程传进去的
3. 在子进程执行libxl-save-helper时,父进程执行下述步骤
3.1 调用 xc_domain_shutdown 关闭虚拟机,并进入一个循环,循环内调用 xc_domain_getinfolist 查看虚拟机是否关闭,如果关闭退出循环进入3.2. 这一步执行完之后,xl create进程就死掉了
3.2 调用xenstore接口往 /local/domain/0/device-model/%d/command 键写入 'save' , 这会导致进程进程3 qemu-dm 将设备状态保存到文件 /var/lib/xen/qemu-save.xx,保存好之后,qemu-dm会进入状态paused
3.3 进入一个循环,循环内检测/local/domain/0/device-model/1/state 的值是否为 paused ,如果不是等待超时
3.4 如果在3.3超时退出,则save失败。如果没有超时,则开始等待 libxl-save-helper 进程,如果后者执行完成,则执行3.5
3.5 将 /var/lib/xen/qemu-save.xx文件的内容拷贝到checkpointfile文件,至此,虚拟机的配置、内存、设备模型都已经保存到了checkpointfile文件
3.6 杀死 qemu-dm 进程并调用 libxc 接口删除虚拟机(内核部分的清理)
二 restore 流程
restore流程跟save流程基本相反, xl restore checkpointfile
1. 从checkpointfile里读取第一部分的配置部分,根据配置分配结构启动内核进程等等
2. 调用 libxl-save-helper , 恢复内存状态
3. 将checkpointfile 的最后设备模型那部分拷贝到 /var/lib/xen/qemu-save.xx文件, 并启动 Qemu-dm 进程, qemu-save.xx 文件作为 qemu-dm 的 loadvm 参数传进去
参考:
2010 的文章,比较老了,流程跟4.2 的也有些不一样:Fast, Lightweight Virtual Machine Checkpointing
xen save/restore 过程的更多相关文章
- android学习6——canvas的save,restore作用
先看如下代码 public class SaveRestoreActivity extends Activity { @Override public void onCreate(Bundle sav ...
- 莫烦tensorflow(9)-Save&Restore
import tensorflow as tfimport numpy as np ##save to file#rember to define the same dtype and shape w ...
- 深度学习原理与框架-猫狗图像识别-卷积神经网络(代码) 1.cv2.resize(图片压缩) 2..get_shape()[1:4].num_elements(获得最后三维度之和) 3.saver.save(训练参数的保存) 4.tf.train.import_meta_graph(加载模型结构) 5.saver.restore(训练参数载入)
1.cv2.resize(image, (image_size, image_size), 0, 0, cv2.INTER_LINEAR) 参数说明:image表示输入图片,image_size表示变 ...
- HTM5 之 Canvas save 、restore 恢复画布状态的理解
save是用来保存canvas状态,这句话很关键,意思是指后续对canvas的操作:平移.放缩.旋转.错切.裁剪等可以恢复. 我之前一直没能理解,认为对画布的画线等操作也可以恢复,其实不是这样子的,只 ...
- 实验五:分析system_call中断处理过程
原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 如果我写的不好或者有误的地方请留言 ...
- Xen安装部署和基本原理
Refer to : http://www.178linux.com/14764 目录: 1. Xen的简介 1.1 Xen的大体结构 1.2 Xen对VM的称呼 1.3 Xen对C ...
- Xen虚拟化
Xen虚拟化基础 Xen虚拟化类型 hypervisor Xen组件 Xen hypervisor Colletion CPU.Memory.Interrupter Domain0 ---> D ...
- O060、Restore Volume 操作
参考https://www.cnblogs.com/CloudMan6/p/5668872.html 前面我们学习了backup操作,现在我们来学习如何使用backup进行restore. r ...
- Tensorflow 保存和载入训练过程
本节涉及点: 保存训练过程 载入保存的训练过程并继续训练 通过命令行参数控制是否强制重新开始训练 训练过程中的手动保存 保存训练过程前,程序征得同意 一.保存训练过程 以下方代码为例: import ...
随机推荐
- 007---Django的视图层
视图函数 一个视图函数,简称视图,是一个简单的python函数.它接收web请求并且返回web响应. 1.一张网页的HTML内容 2.一个重定向 3.一个404错误 4.一个xml文档 5.一个字符串 ...
- Hadoop环境搭建 (伪分布式搭建)
一,Hadoop版本下载 建议下载:Hadoop2.5.0 (虽然是老版本,但是在企业级别中运用非常稳定,新版本虽然添加了些小功能但是版本稳定性有带与考核) 1.下载地址: hadoop.apache ...
- 理解线程3 c语言示例线程基本操作
Table of Contents 1. 基本线程的动作 1.1. 设置线程属性 1.1.1. 设置脱离状态 1.1.2. 设置调度属性 1.2. 取消线程 1.3. 主线程创建多个线程示例 2. 了 ...
- build dynamic libraries for iOS and load them at runtime
编译了libmt.dylib, 和 test 程序调用,均正常.在xcode中显示调用正常,隐式调用则出现问题. 提示 dyld: Library not loaded. 即使存在在/usr/lib/ ...
- ACE handle_timeout 事件重入
当多线程运行反应器事件时, 注意handle_timeout会重入,单独线程不存在下列问题! 1. 一个timer事件 // test_ace_timer.cpp : Defines the entr ...
- Android保持屏幕常亮唤醒状态
第一步: 首先添加权限: <uses-permission android:name="android.permission.WAKE_LOCK"></uses ...
- 《Cracking the Coding Interview》——第4章:树和图——题目4
2014-03-19 03:40 题目:给定一棵二叉树,把每一层的节点串成一个链表,最终返回一个链表数组. 解法:前序遍历,遍历的同时向各个链表里添加节点.水平遍历好像还不如前序遍历来得方便. 代码: ...
- 《Cracking the Coding Interview》——第3章:栈和队列——题目2
2014-03-18 05:08 题目:实现一个栈,除了能进行push和pop之外,还能在O(1)时间内返回栈中最小的元素. 解法:用另一个“最小栈”存放最小的元素,每当有不小于当前最小值的元素进栈时 ...
- CocosCreator设置模拟器默认横竖屏以及机型
之前好好的横屏,今天不知道为毛突然变成竖屏了,虽然可以在点击模拟器左上角进行设置, 但是 每次启动模拟器又变成竖屏了,折腾了很久,终于找到了设置的地方,记录下:
- web前端开发总结(未完)
由于我也是接触前端开发不久,所以呢,自己也会做点小功课,于是,我把前端能够用到的知识稍稍做了下总结,总结的不全面,以后会慢慢完善的! 移动前端开发基础 (总结----待完善)1.移动前端开发:简而言之 ...