1. 传输方式

传输方式 跳转函数
TCP tcp_start_outgoing_migration
RDMA rdma_start_outgoing_migration
EXEC exec_start_outgoing_migration
UNIX unix_start_outgoing_migration
FD fd_start_outgoing_migration

通常libvirt控制的虚机迁移都使用fd迁移,这是一种方便管理的迁移方式,由上层应用程序(libvirt)打开文件描述符,qemu只负责往描述符里面发送数据,这样可以把迁移的控制层和实现层完全分开。

2. 迁移方式

2.1. 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) 停止源服务器,启动目标服务器

2.2. Post-copy内存后拷贝

先把虚拟机现有的CPU state, registers and, optionally, non-pageable memory(内存中不会进行交换或者移动的内存)等信息传输到目的服务器,不管dirty page,并迅速把虚拟机在目的服务器启动起来。同时,源服务器也会动态的把剩余的memory推送到目的服务器上。但是当虚拟机运行调用到还没传输过来的memory时,会触发page-fault.

postcopy基于userfault机制,可以在用户空间中通过文件描述符fd获得page fault信息。当虚拟机在目的服务器上调用到这些还未传输完成的内存时,userfaultfd可以到源服务器上把这些内存信息取出,并传输到目的服务器上,让虚拟机继续运行。


使用postcopy不会受虚机对内存io的压力影响,但迁移完成后如果内存io压力大,会频繁调用userfault,这就会对服务器带宽带来压力,造成虚机性能下降。

2.3. hybrid-copy混合拷贝

同时迁移存储数据和内存数据,融合了pre-copy和post-copy两者的优势,降低了网络流量传输,减少了访问源端内存次数。

缺点式依然存在post-copy阶段中的稳健性问题

三种模式的比较:

参考:
边缘计算场景下虚拟机迁移研究现状
虚拟机迁移技术漫谈,第 1 部分
【研究任务】热迁移方式——pre-copy、post-copy和x-multifd
KVM/QEMU2.3.0 虚拟机动态迁移分析(一)
qemu内存迁移流程

KVM热迁移方式漫谈相关推荐

  1. 2021 => KVM冷迁移与热迁移

    KVM冷迁移

  2. openstack 热迁移(Live Migration)和冷迁移(Cold Migration)

    一.迁移分类 1.冷迁移(cold migration),也叫静态迁移. 在迁移到另外的计算节点时,这段时间虚拟机实例是处于宕机状态的,即关闭电源的虚拟机进行迁移.      通过冷迁移,可以选择将关 ...

  3. 虚拟机迁移技术漫谈(转)

    http://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm1/index.html 如何在虚拟机和物理机以及虚拟机和虚拟机之间的迁移系统 虚拟机迁移技 ...

  4. 华为云计算IE面试笔记-华为云迁移工具Rainbow功能简介。支持哪些虚拟化平台和操作系统的迁移?支持哪些业务迁移方式?Windows在线迁移和Linux在线迁移前针对OS需要做哪些检查?

    1. 功能简介:Rainbow迁移工具是华为自研的基于操作系统层面的迁移工具,提供将主机(X86架构服务器)系统及数据或其它虚拟化平台的业务系统完整地.在线不中断地迁移到华为FusionSphere虚 ...

  5. 华为云迁移工具推荐最佳实践:KVM虚拟化迁移到华为云

    1.迁移需求分析 KVM虚拟化是当前开源虚拟化技术下大家使用比较多的,而且现在好多云底层都是使用的KVM虚拟化作为云平台虚拟化技术底座,华为云也是全面应用了KVM虚拟化技术,所以在将本地KVM的虚拟化 ...

  6. UCloud首尔机房整体热迁移是这样炼成的

    2019独角兽企业重金招聘Python工程师标准>>> 2018年下半年,UCloud首尔数据中心因外部原因无法继续使用,需要在很短时间内将机房全部迁走.为了不影响用户现网业务,我们 ...

  7. KVM虚拟机迁移原理分析

    KVM虚拟机在不同主机之间的迁移,是个复杂的问题,有非常多的解决方案,但是不同的解决方案都有其优点和缺点,下面来分析下当前几种可用的KVM虚拟机迁移的方案. 1. 虚拟机迁移过程中数据的传输(磁盘镜像 ...

  8. libvirt热迁移报Connection refused错误解决办法

    通过virsh命令迁移虚拟机 virsh migrate --live --verbose testvm qemu+ssh://192.168.10.215/system tcp://192.168. ...

  9. mysql 热迁移,proxmox迁移详解

    转载来自51cto:https://blog.51cto.com/15082392/2656486 proxmox迁移详解 骚年 运维少年 proxmox 迁移详解 一.迁移概述 迁移,顾名思义,即将 ...

最新文章

  1. IE 8兼容:meta http-equiv=X-UA-Compatible content=IE=edge / X-UA-Compatible的解释
  2. 在centos7上设置swap交换空间
  3. 深度学习-数学-第一篇-标量,向量,矩阵,张量
  4. parafac 分解_基于PARAFAC分解的大规模MU-MIMO稀疏信道估计
  5. Dreamweaver网页设计与制作100例:用DIV+CSS技术设计的书法主题网站(web前端网页制作课作业)...
  6. 有赞云支付php接口,Erphpdown wordpress插件集成有赞云支付的接口申请方法
  7. 详解rem布局-利用rem布局实现移动端高清显示
  8. javascript实现图片轮播_Node.js实现将文字与图片合成技巧
  9. html制作唯品会登陆页面,唯品会网页登陆页面高清,唯品会网页版登陆页面,唯品会网页登陆页面...
  10. Linux 启动项管理
  11. CentOS7开启Google TCP-BBR优化算法
  12. 单位计算机网络管理员论文,计算机专业毕业论文(计算机网络管理软件的研究)教案.doc...
  13. 好用的在线画图工具processon
  14. NumPy的矩阵表示方法
  15. 微信小程序实现显示pdf格式的两种方式
  16. 常德职院美和易思校企共建专业第一届PPT制作与演讲大赛圆满落幕
  17. Eckart-Young-Mirsky theorem
  18. ESB(企业服务总线)相关知识点总结
  19. 窗口置顶工具v2.0.0
  20. 我总结的经营理念,做人做事都该如此

热门文章

  1. Kafka是如何处理Netflix每天2万亿条消息的?
  2. BZOJ1901:Zju2112 Dynamic Rankings——题解
  3. 一朵更好的云 MADE IN 青云QingCloud
  4. SQL Server 自动化运维系列
  5. 利用文件扫描符恢复数据库.txt
  6. RsyncServer服务无法启动的解决方法
  7. ZT:Java代码编写的30条建议
  8. Tempset 暴风射击
  9. 不得不学的http协议
  10. Ubuntu 16.04安装UML工具StarUML 2