openstack虚拟机热迁移优化如何治本?
楼主经过把 openstack 各个版本的热迁移代码花式折腾之后发现,对于提高迁移成功率,openstack 本身能做的真的不多,本质上还是因为 openstack 是个上层建筑,受到底层的内存拷贝机制以及网络的限制。但是既然任务是优化那也只好想办法了。
前言
看这个之前需要了解openstack、libvirt、qemu、kvm之间的位置关系
目前默认使用的是传统的 ditry bitmap 模式的脏页追踪技术,造成了虚拟机规格越大迁移越困难的问题,从2020年开始 qemu 和 kvm 新增了 ditry ring 模式的脏页追踪技术,从设计上根本性的解决了这个问题
脏页追踪技术
追踪流程
vcpu —> PMU buffer —> ditry bitmap 或者 ditry ring(二选一)
ps:只能在x86上面用,因为需要PMU buffer
ditry bitmap 与 ditry ring 对比
ditry bitmap
社区默认使用 ditry bitmap ,ditry bitmap对清洁部分(空闲的)以及脏的部分(使用的)都有记录,描述的是整个虚拟机的内存
优点:1位就表示1页,所以操作效率很高,保持数据一致性的难度也比较低
缺点:1.虚拟机越大,脏页收集速度越慢,拷贝速度也越慢,开销也越大(因为脏页拷贝的时候会记录全部的内存)
ditry ring
优点:只记录脏的部分,所以与虚拟机的内存规格大小无关
缺点:数据一致性保持难度较高
本质:以CPU为指引,跟踪每一个CPU获取它最近访问的内存脏页组成一个环(即每个CPU都有一个环,去记录它的脏页),通过Mmap映射到用户态,然后让qemu共享到此环(共享实现0拷贝)
ditry ring工作机制
跟踪模式(每个vcpu都有一个脏环)
脏环维护
step1:内核态kvm负责将页的表象置为脏页(状态为dirty) -----> step2:用户态收集脏页(状态为collected) -----> step3:内核态kvm将colletced的脏页置为空(状态为empty)----> step1循环
ps:开启ditry ring的开关在qemu上,libvirt上没有
脏页速率测量
获取更准确的脏页的产生速率,决定那些虚拟机可以迁移(电信云测试结果如下)
抽样测量
间接反应脏页速率
方式:在虚拟机的区间(比如qemu的RAMBlock)设置采样点,周期性的选取若干内存页计算内容,在每一次周期性采样中对比每次同一块页的数据是否有变化,有变化就记为脏页,变化次数越多,脏的频率越高
这种方式存在假设前提(实际上这个前提可能不符合实际)
- 假设测量过程中虚拟机写内存是均匀分布的
- 假设测量过程中虚拟机只做一次写操作
缺:虚拟机规格越大,开销越高,准确性不高
优:平台通用、简单
基于 dirty ring的测量
直接反应脏页速率
方式:统计ditry ring中新增的脏页的条目,转换为内存大小,再除以时间得出脏页速率
优点:非常精准,开销小
缺点:只能在x86上用,因为dirty ring是基于x86的PMU buffer的
热迁移优化
基本上可以分为2个方向去进行热迁移优化
一、内存拷贝方向优化:
- 改用 ditry ring 脏页追踪 (电信云已经实现)
- 基于 dirty ring 的测量脏页速率(电信云已经实现)
- 基于 dirty ring 的新降频模式
二、网络速度方向优化:
目前还没有调研,待续吧
参考文档:
https://blog.csdn.net/huang987246510/article/details/113854928
https://live.issmart.com.cn/Live/issmart_live/#/pc?eventId=4452&liveId=f52af1a6&lang=cn&utm_source=live
https://blog.csdn.net/yadehuiyin/article/details/81382060
https://blog.didiyun.com/index.php/2019/03/07/qemu-multifd/
https://www.cnblogs.com/ccxikka/p/9477530.html
openstack虚拟机热迁移优化如何治本?相关推荐
- openstack虚拟机热迁移优化(victoria版)(附源码分析以及日志分析)
优化目标 提高热迁移成功率 热迁移认知 热迁移是转移内存(或存储)的过程.源主机不断把虚拟机的内存转移到目的主机,直到源主机仅仅省一部分可以一次转移完成的内存未被转移,此时把源主机上的虚拟机暂停,转移 ...
- OpenStack 虚拟机热迁移流程图
目录 文章目录 目录 源计算节点与目的计算节点之间的交互流程 Nova 和 Neutron 之间的交互流程 源计算节点与目的计算节点之间的交互流程 热迁移主要包括三个阶段: pre_live_migr ...
- CPU类型不同导致OpenStack虚拟机热迁移失败
故障现象:虚拟机在不同类型CPU的服务器间热迁移时报错:InvalidCPUInfo: Unacceptable CPU info: CPU doesn't have compatibility 故障 ...
- OpenStack 的 SR-IOV 虚拟机热迁移
目录 文章目录 目录 前言列表 前言 SR-IOV Pass-through 虚拟机热迁移的问题 基于 macvtap 层的 SR-IOV 虚拟机热迁移 Workaround SR-IOV Pass- ...
- 硬核实测 | 深信服超融合承载Oracle,重载虚拟机热迁移居然这么平滑
云化时代,虚拟机热迁移(Live migration)是被大家广泛关注的的热点技术,作为云计算平台核心技术之一,虚拟机热迁移也是信服云一直深入钻研的底层技术. 那么信服云旗下的超融合产品在热迁移上实力 ...
- openstack云主机无法绑定ip_智汇华云|OpenStack 虚拟机 GPU 性能优化
随着大数据.人工智能技术的发展,越来越多的用户产生了获取拥有GPU算力的弹性计算服务的需求,GPU云主机具有突出的图形处理和高性能计算能力,适用于科学计算.视频处理.深度学习等应用场景,受到了市场的青 ...
- vSphere 通过 vMotion 实现虚拟机热迁移
在实际环境中,总会有新陈代谢,旧机器总还是躲不过时间的摧残,这就需要更换新机器,而 vMotion 是 VMware 开发出的一项独特技术,可将正在运行的虚拟机从一台服务器迁移到另一台服务器上. 若要 ...
- OpenStack之虚拟机热迁移
这里的环境是centos7版本,openstack K版 1.在各个计算节点设置权限 chmod 755 /var/lib/nova/instances 2.修改各个节点的nova.conf(/etc ...
- OpenStack 虚拟机冷/热迁移功能实践与流程分析
目录 文章目录 目录 前文列表 官方文档 虚拟机迁移的应用场景 需要迁移的虚拟机数据类型 虚拟机迁移的存储场景 文件存储 块存储 非共享存储 迁移的类型 迁移的方式 执行虚拟机冷迁移 冷迁移日志分析 ...
- Docker热迁移研究背景,问题描述及解决方案
1.研究背景 云计算作为一种新兴的计算模式,近几年受到越来越多的关注和应用,随着云服务规模的扩大,数据中心不断的扩张,为了可以在大规模的云服务平台下有效实现负载均衡,将计算资源进行有效分配,在线迁移技 ...
最新文章
- POJ 1260 Pearls(DP)
- 探测函数 中断 linux,linux中断编程函数
- 烂泥:CentOS6.5挂载windows共享文件夹
- C# Socket服务器及多客户端连接应用例程
- 使用CRT调试内存分配堆来找出未释放的内存空间
- Qt工作笔记-QT_BEGIN_NAMESPACE与QT_END_NAMESPACE的理解
- 服务器多个网站开启quarz,GitHub - WuLex/QuartzSynchroData: 多个不同站点服务器数据同步到总服务器(数据中心)...
- ROS入门笔记(一): ROS简介
- iOS静态库.a文件制作和导入使用
- Android控件Gallery 3D效果
- jenkins不识别mvn命令
- Android 给透明png图片添加白色底色(修改像素点的形式)
- 奇偶归一猜想(多组数据)——又称为3n+1猜想、冰雹猜想、角谷猜想
- 使用navicat将mysql数据转换为postgresql
- 节日代码php,php 排除周末与节假日程序实例代码
- php 怎么验证邮箱验证码,PHP实现邮箱验证码验证功能
- 扫描建模在三维建模中有多厉害?
- revit插件建模助手的【快速工具箱】功能
- No module named 'torchvision.ops'的解决办法
- vue笔记:父子传值奥利给!