4月29日,信服云研发技术专家Frank.Lee在信服云《Tech Talk · 云技术有话聊》系列直播课上进行了《高业务负载虚拟机热迁移的挑战和优化实践》的分享,详细介绍了原生QEMU在高业务负载虚拟机热迁移场景里面临的挑战、导致高业务负载虚拟机热迁移困难的原因、信服云的优化实践经验分享等内容。以下是他分享的内容摘要,想要了解更多可以关注“深信服科技”公众号回顾本期直播。
一、虚拟机热迁移技术介绍
热迁移是指把虚拟机从一个物理主机(源主机)迁移到另一个物理主机(目的主机),分为:只迁移虚拟机运行位置的同存储热迁移、同时迁移虚拟机运行位置和存储位置的跨存储热迁移。在热迁移过程中,虚拟机业务不会中断,最后的停机迁移阶段,虚拟机会有短暂的停顿,热迁移完成后,虚拟机会在目的主机上继续运行。
随着越来越多的用户将核心业务部署到云平台,用户对业务的停机时间要求越来越高,甚至提出了零停机的能力要求。尤其是在物理主机维护、云平台热升级、云平台调度集群内虚拟机运行位置等场景中,虚拟机热迁移操作的性能影响、迁移结果、资源消耗、迁移时长都会影响云平台的使用体验。
二、挑战和优化实践
挑战1:算法效率低下
原生QEMU热迁移内存数据使用的压缩算法是zlib,它单核的压缩性能低,QEMU压缩线程的CPU消耗高。这些会导致:性能无法满足高负载场景,在带宽受限场景下可能无法热迁移完成,会严重消耗物理主机的CPU资源,导致物理主机其它业务系统性能下降。
信服云提出了QEMU热迁移压缩算法替换为lz4的优化实践方法,这使得速率提升7倍以上,CPU消耗降低80%。
挑战2:脏数据放大
QEMU在迁移磁盘数据时,会通过BITMAP来记录磁盘脏数据块,原生QEMU的磁盘BITMAP对应数据块的粒度大小是1M,假设某个数据块中有4K数据发生修改,BITMAP也会将整个数据块(1M大小)标记为脏,后续就需要迁移这1M的数据,由此带来了磁盘脏数据放大问题。
针对这个挑战,信服云实现了磁盘热迁移BITMAP数据块粒度动态调整机制,将BITMAP数据块粒度做成迁移前动态可配置,BITMAP数据块粒度默认值从1M改为64K。
原生QEMU进行跨存储热迁移,在增量迭代迁移阶段,热迁移流程会遍历磁盘每个数据块,检测其状态是否为脏;在磁盘热迁移进入到增量迭代的最后阶段,如果磁盘数据块总量比较多,而剩余脏数据块量比较少时,热迁移线程的CPU大量消耗在干净数据块的无效遍历。在Oracle场景的实测结果,这里会导致60%以上的CPU额外消耗。
信服云改进了磁盘脏数据块的检索机制, 对磁盘脏数据块维护一个多级检索位图;磁盘热迁移时,对脏数据块的检测方式,由遍历检测改为直接对脏数据块进行多级检索,能够更高效地定位脏数据块位置。最终实现了跨存储热迁移总耗时下降20%,热迁移线程的CPU消耗下降60%。
进入到增量迭代迁移阶段后,如果内存脏数据的生成速率大于迁移速率时,迁移就永远无法完成。原生QEMU通过CPU节流策略来解决此问题,原生QEMU热迁移的CPU节流策略较为保守和呆板,在高业务负载场景下,CPU节流持续时间长,导致业务性能持续受到影响。
信服云实现了一套新的CPU节流策略,在热迁移过程中引入直接节流和阶段式节流两种节流方式,替换QEMU默认的节流策略,大幅缩短切换downtime时间,大约在2s内。
现在的业务系统在架构设计方面大多都遵循内存局部性原理,内存局部性原理分为:时间局部性和空间局部性。根据内存局部性原理,虚拟机业务在运行过程中,会存在大量的热点内存,在短时间内被频繁地访问和修改。虚拟机热迁移进入到增量迭代迁移阶段时,热点内存由于频繁修改,在每轮迭代都会变脏而重复迁移。这会导致网络带宽和CPU资源的浪费,以及热迁移时间变长。
信服云实现了一套热点内存脏数据延迟迁移机制——热点内存脏数据延迟迁移机制,减少重复内存数据传输,耗时缩短30%,内存数据量降低35%。
三、优化实践效果总结
同存储热迁移场景
(1)跑满万兆带宽,QEMU压缩线程的CPU消耗减少80%;
(2)热迁移耗时减少30%;
(3)迁移内存总量减少35%;
(4)Oracle虚拟机业务性能受影响时间控制在6s以内。
跨存储热迁移场景
(1)Oracle数据库场景(8K随机写IO模型),磁盘脏数据放大率从93下降到8,大幅降低了磁盘脏数据传输量;
(2)QEMU热迁移线程的CPU开销减少60%;
(3)跨存储热迁移总耗时减少20%;
(4)Oracle虚拟机磁盘迁移能力提升10倍。
实践证明,深信服超融合承载的Oracle业务在迁移过程中性能仅抖动了6s,其中业务中断时间仅1s,上层业务可获得近乎0中断的平滑迁移体验。
以上就是本次直播的主要内容。对云计算感兴趣的IT朋友可以关注“深信服科技”公众号回顾本期直播,了解更多云计算知识。