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 ...
随机推荐
- sed命令例子详解
sed -e '/Patricia/h' -e '/Margot/x' datafile 包含Margot的行将被包含Patricia的行替换: sed -e /WE/{h;d;}' -e '/CT/ ...
- 笔记-python-lib-lxml
笔记-python-lib-lxml 1. lxml简介 lxml是一个实现解析网页文件的库,python中自带有解析库,但没有lxml方便好用. The lxml XML toolkit ...
- 剑指offer题目练习一
看见了一道二维数组找数的题,已排好序的数组(从左至右从上到下,都是由小变大的)让找数,瞬间就出思路了,并没有必要去看他的解释,两次二分就搞定了. #include<cstdio> #inc ...
- C# p-Inovke C++动态链接库
在C++的动态链接库 写了一个测试方法,然后想在C#客户端进行pInvoke调用,始终报异常如下: 试图加载格式不正确的程序. (异常来自 HRESULT:0x8007000B). 最后发现, 需要将 ...
- jpg、png、gif图片格式的浅析
原文地址:图片格式与设计那点事儿 之前面试时被面试官问到了jpg.gif.png格式的区别,当时就扯了一些,感觉都是扯淡,上网搜了下,分享一篇文章 第一次写技术博客,有不尽如人意的地方,还请见谅和指正 ...
- 剑指Offer - 九度1351 - 数组中只出现一次的数字
剑指Offer - 九度1351 - 数组中只出现一次的数字2013-11-23 01:23 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. ...
- Django笔记 —— 模板
最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...
- Python 3基础教程11-如何利用pip命令安装包和模块
本文介绍如何利用pip命令安装Python相关的包和模块.在Python中有些方法或者模块是自带的功能,也叫(build-in),内构函数,实际使用,可能内构函数或者模块不能完成我们的任务,我们就需要 ...
- Spider_Man_6 の Scrapy_Downloader Middleware(针对一下🐷🐷🐷)
下载器中间件(Downloader Middleware) 下载器中间件是介于Scrapy的request/response处理的钩子框架.是用于全局修改Scrapy request和response ...
- RPG游戏黑暗之光
1.设置默认鼠标光标 PlayerSettings → Default Cursor 下设置 2.为人物创建单一类 为人物创建了PlayerAnimation.cs.PlayerDir.cs.Play ...