searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享

live migration在线迁移的三种方式

2023-09-27 05:45:35
74
0

Pre-Copy预考被

预拷贝内存(Pre-copy)通过一个循环,将内存数据发送至目的主机VM,循环第一轮发送所有内存数据,接下来每一轮发送上一轮预拷贝过程中的脏页。最后一轮是停机拷贝阶段,源主机被挂起,停止内存更新,将脏页整体拷贝到目的主机vm上。

对于更新速度非常快的内存部分,每次循环过程都会变脏,需要重复 pre-copy,同时也导致循环次数非常多,迁移的时间变长。针对这种情况,KVM 虚拟机建立了三个原则:集中原则,一个循环内的 dirty pages 小于等于 50;不扩散原则, 一个循环内传输的 dirty pages 少于新产生的;有限循环原则,循环次数必须少于 30。在实现上,就是采取了以下措施:

有限循环:循环次数和效果受到控制,对每轮 pre-copy 的效果进行计算,若 pre-copy 对于减少不一致内存数量的效果不显著,或者循环次数超过了上限,循环将中止,进入停机拷贝阶段。

在被迁移 VM 的内核设置一个内存访问的监控模块。在内存 pre-copy 过程中,VM 的一个进程在一个被调度运行的期间,被限制最多执行 40 次内存写操作。这个措施直接限制了 pre-copy 过程中内存变脏的速度,其代价是对 VM 上的进程运行进行了一定的限制。

KVM 的预拷贝在线迁移过程详解:

系统验证目标服务器的存储器和网络设置是否正确,并预保留目标服务器虚拟机的资源。

1. 源服务器和目标服务器简图

当虚拟机还在源服务器上运转时,第一个循环内将全部内存镜像复制到目标服务器上。在这个过程中,KVM 依然会监视内存的任何变化。

2. 内存镜像复制示意图

以后的循环中,检查上一个循环中内存是否发生了变化。 假如发生了变化,那么 VMM 会将发生变化的内存页即 dirty pages 重新复制到目标服务器中,并覆盖掉先前的内存页。在这个阶段,VMM 依然会继续监视内存的变化情况。

3. 进行有变化的内存复制

VMM 会持续这样的内存复制循环。随着循环次数的增加,所需要复制的 dirty pages 就会明显减少,而复制所耗费的时间就会逐渐变短,那么内存就有可能没有足够的时间发生变化。最后,当源服务器与目标服务器之间的差异达到一定标准时,内存复制操作才会结束,同时暂停源系统。

 4. 所需复制的数据在减少

在源系统和目标系统都停机的情况下,将最后一个循环的 dirty-pages 和源系统设备的工作状态复制到目标服务器。

 5. 状态信息的复制

然后,将存储从源系统上解锁,并锁定在目标系统上。启动目标服务器,并与存储资源和网络资源相连接。

 6. 停止源服务器,启动目标服务器

Post-Copy后拷贝

与预拷贝算法相反,后拷贝算法在目标虚拟机启动后才传输内存数据。后拷贝算法的第一步是暂停源虚拟机。然后,将虚拟CPU(VCPUs)、设备状态和一些内核数据传输到目标虚拟机。接着,在目标虚拟机上恢复执行。最后,将源虚拟机的内存数据传输到目标虚拟机,主要有两种方式:按需分页和主动推送。

按需分页是同步内存数据的最简单方式。一旦目标虚拟机在启动后访问未同步的内存页,将导致页面错误。然后,虚拟机会从源虚拟机获取相应的页面。然而,网络延迟会严重影响虚拟机性能。从用户的角度来看,页面错误发生时会感觉像服务器崩溃了。因此,我们应该尽量避免在迁移过程中发生页面错误。此外,如果没有其他机制,迁移过程可能会持续很长时间,因为虚拟机的某些内存页可能很长时间没有被访问。

主动推送是减少对源节点剩余依赖时间的一种方式。源节点会一直保持运行,直到迁移过程完成。源虚拟机将主动将剩余的内存页面推送到目标虚拟机。

Hybrid-Copy 混合拷贝

混合拷贝算法通过在迁移的第一步仅运行一次预拷贝算法来工作。在这个阶段,源虚拟机在将所有内存数据复制到目标虚拟机的同时继续为用户提供服务。然后,虚拟机被暂停,其处理器状态被复制到目标虚拟机,而未复制剩余的脏内存页面。随后,虚拟机立即在目标虚拟机上恢复执行,然后启动后拷贝算法。其余的内存页面将在后拷贝阶段同步。

后拷贝阶段的页面错误总是会导致显著的性能损失;有时候甚至会导致迁移后的虚拟机中的服务完全不可用。混合拷贝算法可以通过预拷贝算法避免许多页面错误。此外,与后拷贝机制一样,它还有助于解决预拷贝算法在写密集工作负载中的问题。在原始的混合拷贝算法中,预拷贝算法只运行一轮。如果执行更多的拷贝迭代,可以进一步减少后拷贝阶段的页面错误。然而,一定数量的轮次不能满足各种工作负载的需求。如果网络状况良好且虚拟机运行读密集工作负载,则应执行更多的迭代拷贝轮次,以进一步减少页面错误。相反,如果网络状况不佳或虚拟机运行写密集工作负载,则应执行较少的迭代拷贝行为,以节省网络资源和迁移时间。在本文中,我们提出了一个新的参数,根据实际情况确定停止迭代拷贝阶段的合适时机。

0条评论
0 / 1000
h****n
4文章数
1粉丝数
h****n
4 文章 | 1 粉丝

live migration在线迁移的三种方式

2023-09-27 05:45:35
74
0

Pre-Copy预考被

预拷贝内存(Pre-copy)通过一个循环,将内存数据发送至目的主机VM,循环第一轮发送所有内存数据,接下来每一轮发送上一轮预拷贝过程中的脏页。最后一轮是停机拷贝阶段,源主机被挂起,停止内存更新,将脏页整体拷贝到目的主机vm上。

对于更新速度非常快的内存部分,每次循环过程都会变脏,需要重复 pre-copy,同时也导致循环次数非常多,迁移的时间变长。针对这种情况,KVM 虚拟机建立了三个原则:集中原则,一个循环内的 dirty pages 小于等于 50;不扩散原则, 一个循环内传输的 dirty pages 少于新产生的;有限循环原则,循环次数必须少于 30。在实现上,就是采取了以下措施:

有限循环:循环次数和效果受到控制,对每轮 pre-copy 的效果进行计算,若 pre-copy 对于减少不一致内存数量的效果不显著,或者循环次数超过了上限,循环将中止,进入停机拷贝阶段。

在被迁移 VM 的内核设置一个内存访问的监控模块。在内存 pre-copy 过程中,VM 的一个进程在一个被调度运行的期间,被限制最多执行 40 次内存写操作。这个措施直接限制了 pre-copy 过程中内存变脏的速度,其代价是对 VM 上的进程运行进行了一定的限制。

KVM 的预拷贝在线迁移过程详解:

系统验证目标服务器的存储器和网络设置是否正确,并预保留目标服务器虚拟机的资源。

1. 源服务器和目标服务器简图

当虚拟机还在源服务器上运转时,第一个循环内将全部内存镜像复制到目标服务器上。在这个过程中,KVM 依然会监视内存的任何变化。

2. 内存镜像复制示意图

以后的循环中,检查上一个循环中内存是否发生了变化。 假如发生了变化,那么 VMM 会将发生变化的内存页即 dirty pages 重新复制到目标服务器中,并覆盖掉先前的内存页。在这个阶段,VMM 依然会继续监视内存的变化情况。

3. 进行有变化的内存复制

VMM 会持续这样的内存复制循环。随着循环次数的增加,所需要复制的 dirty pages 就会明显减少,而复制所耗费的时间就会逐渐变短,那么内存就有可能没有足够的时间发生变化。最后,当源服务器与目标服务器之间的差异达到一定标准时,内存复制操作才会结束,同时暂停源系统。

 4. 所需复制的数据在减少

在源系统和目标系统都停机的情况下,将最后一个循环的 dirty-pages 和源系统设备的工作状态复制到目标服务器。

 5. 状态信息的复制

然后,将存储从源系统上解锁,并锁定在目标系统上。启动目标服务器,并与存储资源和网络资源相连接。

 6. 停止源服务器,启动目标服务器

Post-Copy后拷贝

与预拷贝算法相反,后拷贝算法在目标虚拟机启动后才传输内存数据。后拷贝算法的第一步是暂停源虚拟机。然后,将虚拟CPU(VCPUs)、设备状态和一些内核数据传输到目标虚拟机。接着,在目标虚拟机上恢复执行。最后,将源虚拟机的内存数据传输到目标虚拟机,主要有两种方式:按需分页和主动推送。

按需分页是同步内存数据的最简单方式。一旦目标虚拟机在启动后访问未同步的内存页,将导致页面错误。然后,虚拟机会从源虚拟机获取相应的页面。然而,网络延迟会严重影响虚拟机性能。从用户的角度来看,页面错误发生时会感觉像服务器崩溃了。因此,我们应该尽量避免在迁移过程中发生页面错误。此外,如果没有其他机制,迁移过程可能会持续很长时间,因为虚拟机的某些内存页可能很长时间没有被访问。

主动推送是减少对源节点剩余依赖时间的一种方式。源节点会一直保持运行,直到迁移过程完成。源虚拟机将主动将剩余的内存页面推送到目标虚拟机。

Hybrid-Copy 混合拷贝

混合拷贝算法通过在迁移的第一步仅运行一次预拷贝算法来工作。在这个阶段,源虚拟机在将所有内存数据复制到目标虚拟机的同时继续为用户提供服务。然后,虚拟机被暂停,其处理器状态被复制到目标虚拟机,而未复制剩余的脏内存页面。随后,虚拟机立即在目标虚拟机上恢复执行,然后启动后拷贝算法。其余的内存页面将在后拷贝阶段同步。

后拷贝阶段的页面错误总是会导致显著的性能损失;有时候甚至会导致迁移后的虚拟机中的服务完全不可用。混合拷贝算法可以通过预拷贝算法避免许多页面错误。此外,与后拷贝机制一样,它还有助于解决预拷贝算法在写密集工作负载中的问题。在原始的混合拷贝算法中,预拷贝算法只运行一轮。如果执行更多的拷贝迭代,可以进一步减少后拷贝阶段的页面错误。然而,一定数量的轮次不能满足各种工作负载的需求。如果网络状况良好且虚拟机运行读密集工作负载,则应执行更多的迭代拷贝轮次,以进一步减少页面错误。相反,如果网络状况不佳或虚拟机运行写密集工作负载,则应执行较少的迭代拷贝行为,以节省网络资源和迁移时间。在本文中,我们提出了一个新的参数,根据实际情况确定停止迭代拷贝阶段的合适时机。

文章来自个人专栏
虚拟机迁移技术
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0