1.一种基于版本控制的在线快照管理方法,其特征在于,包含以下步骤:
(1)增量快照储存管理:
(11)监控虚拟机的运行状态,当被监控虚拟机发生系统调用或进程切换时,将进程名称、事件原因和事件时间信息存放到固定物理内存区间中,再通过超级调用(hypercall)通知虚拟机管理器(hypervisor)进行增量快照处理;
(12)虚拟机管理器(hypervisor)将控制权移交给被监控虚拟机对应的存储例程,存储例程读取虚拟机管理器保存的被监控虚拟机扩展页表指针(EPTP),遍历其指向的页表,找出新增脏页,然后根据新增脏页的物理页帧生成对应的宿主机虚地址页帧;
(13)从固定物理内存区间中读取进程名称、事件原因和事件时间作为当前提交增量快照的初始元数据,通过对应新增脏页的宿主机虚地址页帧,复制对应新增脏页并存入数据库中,生成增量快照,最后根据数据库容量设置阈值,存储的增量快照容量超出阈值后自动对最早期时间段内的增量快照进行合并操作,并将合并后增量快照作为对应被监控虚拟机的基快照;
(2)请求快照生成分析:
(21)根据请求应用的快照生成请求读取物理内存,若发现内存中有对应快照则对快照信息进行机器语言到应用语言的翻译,并将翻译结果提交给请求应用,结束流程;否则为每个请求应用生成一个前端请求例程;
(22)前端请求例程将快照请求的时间信息和地址范围信息放入一个环形消息队列中,并设定一个时间阀值;当环形队列满或者超时时,通过超级调用(hypercall)通知虚拟机管理器(hypervisor)进行快照生成;
(23)虚拟机管理器(hypervisor)为环形队列中的每个快照生成请求初始化一个后端请求例程,后端请求例程首先对相应的快照生成请求按照虚拟机编号A、时间B、地址范围C到D和进程E进行格式化处理;
(24)获取快照生成请求的格式化信息,当前被监控虚拟机A的基快照为F时刻的全系统快照,分析数据库中F时刻到B时刻虚拟机A所有增量快照的元数据,提取出该时间段内新增脏页的物理页帧,找出最接近B时刻的新增脏页对应的增量快照,对数据库中基快照进行修改更新,生成虚拟机A在B时刻的全系统快照K,再截取地址范围C到D的E线程快照内容生成快照存储到物理内存中。
2.一种基于版本控制的在线快照管理系统,其特征在于,包含以下模块:
内核事件通知驱动模块,用于监控虚拟机的运行状态,当被监控虚拟机发生系统调用或进程切换时,将进程名称、事件原因和事件时间信息存放到固定物理内存区间中,再通过超级调用(hypercall)通知虚拟机管理器(hypervisor)进行增量快照处理;
快照库增量处理模块,用于将控制权移交给被监控虚拟机对应的存储例程,存储例程读取虚拟机管理器保存的被监控虚拟机扩展页表指针(EPTP),遍历其指向的页表,找出新增脏页,然后根据新增脏页的物理页帧生成对应的宿主机虚地址页帧;
快照版本控制库模块,用于从固定物理内存区间中读取进程名称、事件原因和事件时间作为当前提交增量快照的初始元数据,通过对应新增脏页的宿主机虚地址页帧,复制对应新增脏页并存入数据库中,生成增量快照,最后根据数据库容量设置阈值,存储的增量快照容量超出阈值后自动对最早期时间段内的增量快照进行合并操作,并将合并后增量快照作为对应被监控虚拟机的基快照;
快照信息翻译库模块,用于根据请求应用的快照生成请求读取物理内存,内存中有快照则对快照信息进行机器语言到应用语言的翻译,并将翻译结果提交给请求应用,内存中没有快照则为每个请求应用生成一个前端请求例程;
快照请求管理模块,用于控制前端请求例程将快照请求的时间信息和地址范围信息放入一个环形消息队列中,并设定一个时间阀值;当环形队列满或者超时时,通过超级调用(hypercall)通知虚拟机管理器(hypervisor)进行快照生成;
快照请求格式化模块,用于为环形队列中的每个快照生成请求初始化一个后端请求例程,后端请求例程首先对相应的快照生成请求按照虚拟机编号A、时间B、地址范围C到D和进程E进行格式化处理;
请求快照生成模块,用于获取快照生成请求的格式化信息,当前被监控虚拟机A的基快照为F时刻的全系统快照,分析数据库中F时刻到B时刻虚拟机A所有增量快照的元数据,提取出该时间段内新增脏页的物理页帧,找出最接近B时刻的新增脏页对应的增量快照,对数据库中基快照进行修改更新,生成虚拟机A在B时刻的全系统快照K,再截取地址范围C到D的E线程快照内容生成快照存储到物理内存中。