找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7169|回复: 1

Xen虚拟机快照技术介绍

[复制链接]

238

主题

329

帖子

2119

积分

超级版主

Rank: 8Rank: 8

积分
2119
QQ
发表于 2016-3-4 23:50:16 | 显示全部楼层 |阅读模式
IMG_6047.JPG
虚拟机快照技术概述

虚拟机快照技术可以将一个运行中虚拟机的所有状态保存起来,并且在以后的某一时刻可以将该虚拟机恢复到快照时刻的状态并继续执行。虚拟机快照可以应用在虚拟机迁移中,也可以应用在本地机器上单纯的虚拟机快照中。在本地机器上做虚拟机快照的目的是以后某一时刻可以恢复到快照时的状态并继续运行虚拟机,目前所用的技术是保存所有虚拟机状态信息和虚拟机内存空间。该技术有一个固有的缺点就是随着内存空间的扩大其快照文件也将随着增大,而现在虚拟机分配的内存空间以GB数量级计的已非常普遍,这种技术对于大量频繁的快照来说,将会占用极大的磁盘空间来存储这些快照文件。增量快照技术可以弥补这一不足,增量快照技术就是在第一次快照中保存所有的内存内容,在后续的快照中,只保存上次快照后改变的内存页面,恢复的时候从最新的快照逐步恢复到所需要的快照点。在增量快照中要想恢复到一个较老的快照点时需要恢复该快照点后的所有快照点,并且要保证这些快照点都能正常恢复。

Xen的虚拟机快照技术

虚拟机内存是影响虚拟机快照文件大小、虚拟机快照时间和虚拟机快照恢复时间的主要因素。虚拟机快照可以在处于运行或停止状态的虚拟机上进行。对停止状态的虚拟机做快照仅需要保存外部存储设备的状态即可,这种虚拟机快照实际意义不大,通常意义上的虚拟机快照主要针对运行中的虚拟机。Xen现有虚拟机快照技术主要是为动态迁移设计,同时提供虚拟机的停止和恢复功能。
一个运行中虚拟机的快照内容主要包括VCPU的上下文信息、虚拟机的虚拟设备上下文信息以及分配给虚拟机的内存信息。
VCPU的上下文信息主要包括VCPU的基本信息结构体、VCPU运行所需要的相关寄存器信息、VCPU调度信息、Guest OS异常处理堆栈信息、与VCPU相关的共享信息等。VCPU寄存器主要包括CR0-CR7控制寄存器、用户级CPU寄存器(AX,BX,SI,DI等)、DB0-DB7调试寄存器等。VCPU调度信息主要包括VCPU时间、VCPU的运行状态(运行态、可运行态、阻塞态和离线态中的一种)及每个运行状态上的运行时间等、VCPU切换信息。
虚拟设备上下文信息主要包括虚拟设备(如网络适配器、键盘、显示器)的连接状态,I/O共享页,中断信息,与GuestOS相关的设备模型信息等。
虚拟机内存信息包括分配给该虚拟机的所有内存页框中的数据。虚拟机内存信息是虚拟机快照所要保存信息的主要部分,由于其信息量相对于其它信息要大很多,因而是影响虚拟机快照时间和快照文件大小的主要因素。
Xen同时支持全虚拟机和半虚拟化方式,全虚拟化和半虚拟化方式的虚拟机快照技术有不同的实现。在半虚拟化环境下,VMM在对虚拟机快照前,首先通过Para-API通知Guest OS该虚拟域将要进行虚拟机快照。Guest OS得到通知后,执行快照前的预处理程序,包括断开设备连接,关中断,标记页表等。完成快照前的预处理后,Guest OS将控制权交由VMM。VMM停止虚拟机的运行,通过Dom0将该虚拟机的内存信息、VCPU上下文信息和虚拟设备上下文信息等保存到虚拟机快照文件中。
      在全虚拟化环境下,Guest OS不能像半虚拟化环境下的Guest OS一样协助VMM完成虚拟机快照。VMM在接到虚拟机快照的命令后,首先断开与该虚拟机相关的设备连接,屏蔽与该虚拟域相关的事件通道,收集与该虚拟域相关的虚拟设备状态、I/O共享页信息以及该虚拟域相关的通道事件,然后停止虚拟机的运行并通过Dom0将该虚拟机的内存信息、VCPU上下文信息和虚拟设备上下文信息保存到虚拟机快照文件中。
在虚拟机快照中,VMM除了将虚拟机相关的虚拟设备状态和VCPU信息保存到快照文件,还需要将虚拟机的内存信息保存到快照文件中。Xen虚拟机快照技术对虚拟机内存的处理方式是将整个虚拟机内存数据直接保存到快照文件中。
Xen虚拟机快照中将分配给虚拟机的内存中的数据全部保存到快照文件中,该快照方法会使快照文件占用大量的磁盘空间。随着虚拟机内存容量的增大,虚拟机快照文件也会随着增大。虽然计算机系统中内存容量和磁盘容量相差两个数量级(如320GB的磁盘,4GB的内存)。该方法产生的大量快照文件同样会占用大量的磁盘空间。
     虚拟机快照的恢复是虚拟机快照流程的反过程。VMM在虚拟机快照恢复时,首先创建一个虚拟域,VMM给该新创建的虚拟域分配和虚拟机快照前相同数量的虚拟机内存页框。同时将分配给虚拟机的内存页框信息记录在虚拟机域控制结构中,并且在P2M映射表和M2P映射表记录机器页框号和物理页框号的对应关系。然后根据快照文件中的VCPU上下文信息创建VCPU,恢复VCPU的状态,从快照文件中读取虚拟机内存数据填充虚拟机内存,根据设备上下文信息恢复虚拟设备状态。虚拟机运行的各状态恢复后,VMM启动该新虚拟机的运行。

   【备注:P2M映射表和M2P映射表】
      引入虚拟化技术后,物理内存就不再属于Xen或任何一个Guest OS。对应每一个Guest 0S,在运行过程中只能使用物理内存的一部分且不能相互重叠,以达到相互隔离的目的。对于基于X86架构的操作系统来说,其内存地址都应该使用从地址0开始的并且连续的内存空间。在Xen虚拟化环境中,X86架构的操作系统对内存地址的这一要求是不可能是实现的,因为物理地址为0的内存地址只有一个,不可能满足所有Domain中基于X86的操作系统对这一条件的要求。为此,Xen提供了一套内存管理机制,能够将分配给某一个Domain的分散内存变成从0地址开始且连续的内存。为实现这一功能需要在传统的虚拟地址和机器地址之间插入一层,即表示从地址0开始的那一层。
       Xen在虚拟地址和机器地址之间引入了一层新的地址后,从Guest OS的角度,它将不会直接看到机器地址,其看到的是插入的这一层地址。这样,内存模型由传统的两层地址(虚拟地址和机器地址)扩展到了三层地址(虚拟地址、物理地址和机器地址)。
      引入三层地址的内存模型后。Guest OS使用虚拟地址和物理地址,而VMM使用物理地址和机器地址。在大部分情况下,客户操作系统没有必要知道物理地址之下还有机器地址的存在。但当客户操作系统对页表进行操作时,需要涉及物理地址到机器地址的转换关系,这两者的转换关系记录在两张表中,P2M表和M2P表。其中P2M表是物理地址到机器地址的转换表(Physical—to·Machine Translation Table),M2P表是机器地址到物理地址的转换表(Machine·to—Physical Translation)。
     M2P表是位于Xen内存空间的一个全局表,能够被系统中所有虚拟机使用,该表是一个以机器页框号为索引的结构数组,与机器页框号对应相对应的是物理页框号。对于P2M表,半虚拟化和全虚拟化方式处理不同。在全虚拟化环境下通过影子页表模式来处理地址转换,客户操作系统不参与其中,P2M表位于Xen内存空间。而在半虚拟化环境下,P2M表存在于客户机操作系统中。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表