一种高效的脏页获取方法

文档序号:6585316阅读:178来源:国知局
专利名称:一种高效的脏页获取方法
技术领域
本发明涉及一种脏页获取方法,该技术涉及到基于虚拟化的可靠性系统中虚拟机
管理器获取主虚拟机检查点的方法,属于虚拟化技术和可靠性系统领域。
背景技术
基于虚拟化的可靠性系统是在虚拟机管理器之上实现的可靠性系统方案,目前 在这方面的系统包括加拿大英属哥伦比亚大学开发的Remus (Remus :High availability viaasynchronous virtual machine replication),日本NTT公司开发的Kemari (Kemari : Virtualmachine synchronization for fault tolerance),以及北京大学网络实验室开发 的Taiji (http:〃net. pku. edu. cn/vc/files/ft/index. html)。相对于传统的可靠性解决 方案,基于虚拟化的可靠性系统具有经济、透明、易于部署等优点。 该系统的核心是Checkpoint/Recovery机制。在每一个执行周期,虚拟机管理器 监测主虚拟机修改的内存页面,并在执行周期结束时把脏页面发送到备份虚拟机。目前,在 以上系统的实现中,赃页获取技术采用了虚拟机迁移中的赃页获取方法。虚拟机迁移中的 赃页获取方法是在每一个执行周期开始时,虚拟机管理器销毁主虚拟机的所有的影子页表 表项;在执行周期中,主虚拟机对任何页面的第一次修改都会发生缺页异常,从而虚拟机管 理器可以探测到哪些页面被修改。这种方法对主虚拟机的性能产生了很大的影响。本发明 主要是基于系统运行行为的分析,公开了一项高效的赃页获取技术,该项技术提高了基于 虚拟化的可靠性系统的性能。

发明内容
本发明的目的是为基于虚拟化的可靠性系统提供一种高效的赃页获取方法。本发
明可使虚拟机管理器在主虚拟机的每个执行周期都能截获到主虚拟机修改的内存页面,同
时还不对主虚拟机的性能产生较大的影响。 本发明的技术方案为 —种高效的脏页获取方法,其步骤为 1)虚拟机管理器为每个主虚拟机维护一个影子页表,并为每个第一级影子页表维 护一 n位的标记;其中n为正整数,第一级影子页表表项划分为n段,每一段对应于n位标 记中的一位; 2)在一执行周期之前,虚拟机管理器将第一级影子页表的所有页表项设置为只 读,相应的每个第一级影子页表的标记都设置为所述n位标记中的未修改标记号;
3)在该执行周期内,当主虚拟机通过某个影子页表表项发生第一次写操作时,虚 拟机管理器截获到一缺页异常信息; 4)虚拟机管理器根据截获到的该缺页异常信息,将该影子页表表项对应的页面记 录为脏页面;同时将该影子页表表项置为可写,并将其所对应的标记位设置为所述n位标 记中的修改标记号;
3
5)在该执行周期结束时,主虚拟机停止执行,虚拟机管理器记录主虚拟机的所有 脏页;同时,虚拟机管理器遍历标记位为修改标记号的影子页表表项段,将所有可写影子页 表表项设置为只读; 6)虚拟机管理器恢复主虚拟机的执行,重复步骤2) 5),开始新的执行周期。
进一步的,当所述虚拟机管理器截获缺页异常信息时,虚拟机管理器将与该缺页 异常的影子页表表项相邻的影子页表表项预设置为可写。 进一步的,所述虚拟机管理器首先为每个第一级影子页表维护一个数值his— stride,用来描述第一级影子页表在历史的执行周期中发生写操作的局部性行为;然后虚 拟机管理器将与发生缺页异常的影子页表表项相邻的前his—stride个影子页表表项和后 hiS_stride/3个影子页表表项预设置为可写。 进一步的,所述his_stride的计算方法为his_stride = his_stride*a+ave_ stride*(1-a);其中ave—stride为影子页表中所有连续的可写影子页表表项段长度的平 均值,a为一权重参数,a取值范围为(0, 1)。 进一步的,所述虚拟机管理器将所述预设置为可写的影子页表表项添加一预测标 记,并且清空该表项的脏页位。 进一步的,所述虚拟机管理器遍历所有第一级影子页表,将带所述预测标记的影 子页表表项中,脏页位没有被设置的页表项所对应的页面确定为非脏页面,脏页位被设置 的页表项所对应的页面确定为脏页面。 进一步的,所述执行周期结束时,虚拟机管理器把脏页面发送到一备份虚拟机。 进一步的,所述第一级影子页表表项平均划分为n段;所述n取值为8。 进一步的,所述n位标记由0、1标记号组成,其中标号1为修改标记号,标号0为
未修改标记号。 相对于现有技术,本发明的积极效果为 本发明可提高主虚拟机的性能,与虚拟机迁移中使用的脏页获取方法不同,本发 明采用遍历影子页表表项的方法收回所有页表项写权限,并且采用一个八位的标记,选择 性地遍历影子页表;另外,在主虚拟机执行过程中,采用基于历史行为的预测,有效地减少 了虚拟机执行过程中的缺页次数,进一步调高了主虚拟机执行的效率。图2是性能对比。在 这个试验中,主虚拟机的执行周期是20msec。"迁移"表示使用迁移代码中的脏页获取方法, "本发明"表示采用本发明中陈述的脏页获取方法。通过图2可以看到,主虚拟机中分别运 行四种不同的基准测试程序时,主虚拟机的性能都得到了较大的提升。


图1表示一个影子页表上发生缺页异常,预测程序预测和校正的过程;
图2表示本发明的脏页获取方法与Xen的迁移的脏页获取方法的性能比较。
具体实施例方式
本发明涉及到的赃页获取方法应用在基于虚拟化的可靠性系统中,该系统包括如 下两个部分主虚拟机和虚拟机管理器。主虚拟机是受保护的虚拟机,其中运行关键性服 务;虚拟机管理器运行在硬件之上,维护虚拟机的运行,在基于虚拟化的可靠性系统中,虚
4拟机管理器还需要记录主虚拟机执行过程中修改的内存页面,并把所有脏页在每个执行周 期结束时发送给备份虚拟机。影子页表是内存虚拟化机制。虚拟机管理器为每个运行在其 上的虚拟机维护一个影子页表,影子页表表项实现虚拟地址到物理地址的转换。为了记录 主虚拟机执行过程中修改的脏页,本发明的方法如下 1)虚拟机管理器为每个第一级影子页表维护了一个八位的标记,每一位对应于这 个第一级影子页表八分之一的影子页表表项段。例如,对于32位PAE系统,每个第一级影 子页表有512个页表项,那么该标记的第一位就对应着这个影子页表的前64个影子页表表 项,第二位对应第65个到第128个影子页表表项,等等。 2)在开始新的执行周期之前,第一级影子页表的所有页表项都被设置为只读,相 应的每个第一级影子页表的标记都为O,表明所有的影子页表中没有可写的影子页表表项。
3)主虚拟机恢复执行,由于该虚拟机的影子页表表项都是只读,当主虚拟机通过 某个影子页表表项发生第一次写操作时,将会发生缺页异常。虚拟机管理器截获到该异常, 并把该影子页表表项对应的页面记录为脏页面;同时,把这个影子页表表项置为可读写,这 样,在这个执行周期中,再次通过该页表项修改页面将不会发生缺页异常;同时,虚拟机管 理器根据发生缺页异常的影子页表表项的位置,查看相应的标记位,如果对应的标记位为 O,则把这个位设置为l,表明这个位对应的影子页表表项段中出现了可读写页表项。
4)在每个执行周期结束时,主虚拟机停止执行,虚拟机管理器把主虚拟机修改过 的页面发送到备份虚拟机;同时,为了在新的执行周期中记录主虚拟机修改的脏页,虚拟机 管理器需要把主虚拟机的所有内存重新标记为只读。虚拟机管理器根据每个第一级影子页 表的标记位选择性地遍历影子页表表项,即虚拟机管理器只遍历那些标记位为1的影子页 表表项段,因为只有这些影子页表表项段中有可读写的影子页表表项,其他影子页表表项 段不需要遍历。通过这种方法,虚拟机管理器提高了遍历影子页表表项的效率。在遍历过 程中,所有可写的影子页表表项都被重新设置为只读页表项,相应的将每个第一级影子页 表的标记1都修改为0。 5)在完成4)的基础上,虚拟机管理器使主虚拟机恢复执行,开始新的执行周期。
在上述的脏页获取方法中,每一个执行周期开始时,本发明保留了所有的影子页 表表项,仅仅通过去除可写权限,便可达到设置所有页面只读的目的;另外,通过为每个第 一级影子页表设置标记,提高了遍历影子页表的效率。 本发明的另一目的是,在以上方法的基础上,尽量减少主虚拟机执行过程中发生 缺页的次数。本发明使用了一种预测方法根据主虚拟机的执行行为,预测在同一个执行周 期中还有哪些页面可能被修改,从而提前把这些页面标记为脏页面,把对应的影子页表表 项置为可读写,具体过程如下 a)虚拟机管理器为每个第一级影子页表维护一个数值his—stride,用来描述每 个第一级影子页表在历史的执行周期中发生写操作的局部性行为。his—stride的定义如 下 his—stride = his_stride*a+ave_stride* (l_a) 其中,ave—stride描述了第一级影子页表在前一个执行周期中发生写操作的局部 性特征;ave—stride表示这个影子页表中所有连续的可写影子页表表项段长度的平均值。 ave—stride体现了在上一个执行周期中影子页表表项发生写操作的局部性,越大表明局部
5性越好;越小表明局部性越差。例如,ave—stride等于O,说明在上一个执行周期中没有页表项被置为可写,也就是没有通过该影子页表发生写操作;ave—stride等于512,说明所有的页表项都发生了写操作,所有页表项都具有可写权限。在此基础上,为了体现影子页表发生可写操作的局部性的历史行为,his—stride由ave—stride得到,并通过参数a进行控制,a越小,则his—stride的值越依赖于最近的执行周期的ave_stride ;a越大,his_stride则依赖于较长的历史行为信息。 b)由于所有的影子页表表项最初都被标记为只读,所以,主虚拟机对某个页面的第一次访问都会发生缺页异常。当发生缺页异常的时候,虚拟机管理器根据his—stride的值进行预测,即将与发生缺页异常的影子页表表项相邻的前his—stride个影子页表表项和后his_Stride/3个影子页表表项都预测为将会发生写操作,然后将这些影子页表表项设置为可写。这样,在这个执行周期内,通过这些影子页表表项发生的写操作将不再发生缺页异常。 c)在b)中,可能会发生预测错误,也就是说有些页面在这个执行周期中没有被修改,而预测程序把这个页面标记为脏页面。为了找出这些错误的预测,虚拟机管理器给被预测的影子页表表项添加了一个预测标记(预测标记位可以是页表项中的一个可用位),并且清空该表项的Dirty位(即脏页位)。当这个影子页表表项真正发生写操作时,其Dirty位会被CPU自动设置。在每个执行周期结束时,虚拟机管理器遍历所有的第一级影子页表,在所有被预测的影子页表表项中(即添加有预测标记的影子页表表项中),Dirty位没有被设置的页表项都是预测错误的页表项,即其对应的页面为非脏页面,Dirty位被设置的页表项对应的页面为脏页面。 图1是脏页预测的一个例子。在这个例子中,初始状态时,所有的影子页表表项都被设置为只读;第五个页表项由于写操作发生缺页异常,预测程序把发生缺页异常的这个页表项标记为可写,同时把3、6、7和8这几个页表项预测为发生写操作,并把这些页表项的Dirty位去除;在这个执行周期结束时,第六个页表项的Dirty位为0,表明这个页表项没有发生写操作,所以,第六个页表项对应的页面不是脏页。在这个例子中,3、 7和8这三个页表项的写操作被成功预测,在执行过程中,通过这些页表项发生的写操作不发生缺页异常,提高了主虚拟机的执行效率。
权利要求
一种高效的脏页获取方法,其步骤为1)虚拟机管理器为每个主虚拟机维护一个影子页表,并为每个第一级影子页表维护一n位的标记;其中n为正整数,第一级影子页表表项划分为n段,每一段对应于n位标记中的一位;2)在一执行周期之前,虚拟机管理器将第一级影子页表的所有页表项设置为只读,相应的每个第一级影子页表的标记都设置为所述n位标记中的未修改标记号;3)在该执行周期内,当主虚拟机通过某个影子页表表项发生第一次写操作时,虚拟机管理器截获到一缺页异常信息;4)虚拟机管理器根据截获到的该缺页异常信息,将该影子页表表项对应的页面记录为脏页面;同时将该影子页表表项置为可写,并将其所对应的标记位设置为所述n位标记中的修改标记号;5)在该执行周期结束时,主虚拟机停止执行,虚拟机管理器记录主虚拟机的所有脏页;同时,虚拟机管理器遍历标记位为修改标记号的影子页表表项段,将所有可写影子页表表项设置为只读;6)虚拟机管理器恢复主虚拟机的执行,重复步骤2)~5),开始新的执行周期。
2. 如权利要求1所述的方法,其特征在于当所述虚拟机管理器截获缺页异常信息时, 虚拟机管理器将与该缺页异常的影子页表表项相邻的影子页表表项预设置为可写。
3. 如权利要求2所述的方法,其特征在于所述虚拟机管理器首先为每个第一级影子页 表维护一个数值his—stride,用来描述第一级影子页表在历史的执行周期中发生写操作的 局部性行为;然后虚拟机管理器将与发生缺页异常的影子页表表项相邻的前his—stride 个影子页表表项和后his_Stride/3个影子页表表项预设置为可写。
4 如权利要求3所述的方法,其特征在于所述his—stride的计算方法为hiS_Stride =his_stride*a+ave_stride*(l_a);其中ave_stride为影子页表中所有连续的可写影子 页表表项段长度的平均值,a为一权重参数,a取值范围为(0, 1)。
5. 如权利要求3或4所述的方法,其特征在于所述虚拟机管理器将所述预设置为可写 的影子页表表项添加一预测标记,并且清空该表项的脏页位。
6. 如权利要求5所述的方法,其特征在于所述虚拟机管理器遍历所有第一级影子页 表,将带所述预测标记的影子页表表项中,脏页位没有被设置的页表项所对应的页面确定 为非脏页面,脏页位被设置的页表项所对应的页面确定为脏页面。
7. 如权利要求1或6所述的方法,其特征在于所述执行周期结束时,虚拟机管理器把脏 页面发送到一备份虚拟机。
8. 如权利要求1所述的方法,其特征在于所述第一级影子页表表项平均划分为n段; 所述n取值为8。
9. 如权利要求1所述的方法,其特征在所述n位标记由0、1标记号组成,其中标号1为 修改标记号,标号0为未修改标记号。
全文摘要
本发明公开了一种高效的脏页获取方法,属于虚拟化技术领域。本方法为1)虚拟机管理器为每个第一级影子页表维护一n位的标记;2)在一执行周期之前,虚拟机管理器将第一级影子页表的所有页表项设置为只读,并将对应标记设置为0;3)在该执行周期内,虚拟机管理器根据截获的缺页异常信息,将对应的页面记录为脏页面;同时将该影子页表表项置为可写,并将其所对应的标记位设置为1;4)在该执行周期结束时,虚拟机管理器记录主虚拟机的所有脏页;同时遍历标记位为1的影子页表表项段,将所有可写影子页表表项设置为只读;5)虚拟机管理器恢复主虚拟机的执行,重复2)~4),开始新的执行周期。本发明可大大提升主虚拟机的性能。
文档编号G06F12/02GK101706736SQ200910243439
公开日2010年5月12日 申请日期2009年12月22日 优先权日2009年12月22日
发明者施晓罡, 朱君, 江哲夫, 肖臻, 董嵬 申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1