迁移速度与计算性能兼得!天翼云 DirtyLimit 技术大显身手
虚拟机技术的快速发展使系统迁移变得更加灵活且多样化,其广泛应用也促使用户对虚拟机迁移速度和性能影响提出了更高要求。天翼云弹性计算虚拟化团队创新研发 DirtyLimit 虚拟机迁移加速技术,能够在保证读 vCPU 性能几乎不下降的情况下,有效缩短虚拟机迁移时间,为用户打造更加优质的迁移体验。
虚拟机迁移加速技术背景
虚拟机迁移技术能够将虚拟机从一台物理服务器迁移到另一台物理服务器。在云计算环境中,虚拟机迁移技术可以提高云数据中心服务器的资源利用率,达到节能和负载均衡的目的。
热迁移开始前,虚机在源主机运行,迁移开始后会在目的主机创建虚机并将其状态设置为暂停,源源不断地接受源主机发送的内存数据,直到源主机剩余内存量足够小,最后暂停源主机,将剩余的内存一次性拷贝至目的主机。
一些业务程序繁忙的虚机,迁移过程会产生大量内存脏页,这类虚机迁移成功的关键在于迁移拷贝脏页的速率要大于产生脏页的速率。为满足该条件,业界提出了许多迁移加速算法,包括 auto-converge,compression,multifd,xbzrle 等。
虚拟机迁移加速技术路线
auto-converge
核心思想是降低脏页产生的速率。通过减少虚拟机 vCPU 运行时间来降低虚机脏页产生速率,使其小于迁移拷贝速率,以满足迁移收敛条件。
优点:任何虚拟化场景都适用且有效。
缺点:限制虚机脏页产生的同时,也限制了虚机 CPU 运行时间,虚机的计算性能在迁移过程中也随之下降。
compression
核心思想是压缩减少迁移传输的数据量。通过在拷贝数据前压缩数据量,间接增大单位时间内迁移拷贝的数量,以满足迁移收敛条件。
缺点:在计算资源充足且网络带宽有限的情况下适用,应用场景有限。
xbzrle
核心思想是压缩迁移时传输的增量数据。利用 CPU cache 缓存要压缩的增量数据,间接增大迁移传输速率,以满足收敛条件。
缺点:在虚机增量数据多为稀疏类型的情况下适用,应用场景有限。
multifd
核心思想是在迁移时建立多个传输通道。通过增加迁移时并发传输的数量,间接增大迁移传输速率,以满足迁移收敛条件。
缺点:在没有最大化利用迁移带宽的场景下适用,应用场景有限。
在众多迁移加速技术路线中,auto-converge 由于不受场景限制且可以有效降低虚机脏页速率,成为了主流的迁移加速配置。但 auto-converge 无法确定虚机中产生脏页的 vCPU,在方案实现时往往采用较为激进的方式将所有虚机 vCPU 都限制运行,以达到降低脏页速率的目的,虚机中并不产生脏页的读 vCPU 也成为了“受害者”,导致整体计算性能下降。
天翼云基于 Intel PML 硬件机制,借助内核 dirty ring 特性,提出了软硬结合的 vCPU 速率检测和限制方法,作为 DirtyLimit 的核心技术,最终解决了迁移过程中读 vCPU 性能下降的问题。
天翼云 DirtyLimit 技术
DirtyLimit 核心思想与 auto-converge 相同,都是通过减少虚拟机 vCPU 运行时间来降低虚机脏页产生速率。但在具体实现上则采用了完全不同的底层技术,以克服 auto-converge 使虚机 vCPU 性能下降的缺点。
DirtyLimit 除了具有传统 auto-converge 的优点外,还弥补了它的不足,具备更强大的使用潜质和更广泛的推广场景。
DirtyLimit 与 auto-converge 技术对比如下:
限制脏页产生的方式
auto-converge 与 DirtyLimit 相同,都通过减少虚拟机 vCPU 运行时间来实现。
auto-converge 为“主动型”,hypervisor 主动采样数据判断迁移收敛情况,如果不收敛会“主动”限制 vCPU 运行时间;DirtyLimit 为“被动型”,利用 Intel 提供的 PML(Page Modification logging)硬件脏页日志跟踪机制,实现物理 CPU 的脏页速率监测,速率限制会在脏页速率大于阈值时“被动”触发。
对比两种策略,auto-converge 因为要“主动”采样计算,计算资源开销更大,而且从采样计算到速率限制有一定延迟,虚机脏页速率限制较为“迟钝”。DirtyLimit 则没有上述缺点,“被动”地触发速率限制,没有计算资源开销,对限制也更“灵敏”,能够更快地开始速率限制,从而减少虚机迁移时间。
脏页限制的粒度
auto-converge 对于脏页限制的粒度为整个虚机的所有 vCPU,因此无论 vCPU 是否产生脏页,都会被 hypervisor“盲目”地限制,使不产生脏页速率的读进程成为“受害者”,计算性能随之下降。
DirtyLimit 只针对脏页速率大于阈值的 vCPU,不仅速率限制的粒度更小,限制策略更灵活,而且对不产生脏页的 vCPU 不做速率限制,使读进程不受 hypervisor 速率限制的影响,迁移过程中读进程所在 vCPU 的计算性能几乎接近正常运行的 vCPU。
相比 auto-converge,DirtyLimit 迁移在读 vCPU 计算性能方面有明显提升,可有效降低对用户业务的影响。
对比测试结果
1.迁移时间对比测试结果
3 种测试环境迁移时间对比 场景 1 第三个柱状图百分比更新为 76%
从实际测试数据中可以看到:
随着虚机脏页速率的增大,auto-converge 与 DirtyLimit 迁移总时间差距会逐渐拉大。
对于带宽较小的场景(如场景 1),虚机脏页速率很大,在极端情况下,auto-converge 可能会出现迁移失败的情况。而 DirtyLimit 依然能保证虚机成功迁移。
2.vCPU 计算性能对比测试
测试方法
虚机内部分别绑核运行脏页产生程序和计算性能测试工具 unixbench,脏页产生程序运行在 0-1 核,性能测试工具运行在 8-15 核(如下图测试模型所示),保证两个程序互不干扰。分别测试虚机在正常运行时间窗口、DirtyLimit 迁移时间窗口、auto-converge 迁移时间窗口三种场景下的 unixbench 跑分。
测试模型
迁移过程虚拟机性能对比
从测试结果可以看到,auto-converge 迁移相比正常运行的虚机,计算性能下降相对明显,而 DirtyLimit 迁移相比正常运行的虚机,计算性能几乎没有下降。
DirtyLimit 是天翼云在虚拟机迁移加速技术上的创新尝试,使用户迁移速度与计算性能兼得,大幅提升用户系统迁移体验。未来,天翼云将继续优化 DirtyLimit 脏页采集逻辑,提升迁移过程中虚机内存性能,并将 DirtyLimit 迁移特性实现代码同步至 Libvirt、QEMU、欧拉社区,为行业虚拟机迁移加速技术的研究贡献力量。
版权声明: 本文为 InfoQ 作者【天翼云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/f57b4264063527eb0382ee183】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论