专栏名称: 细说云计算
关注云平台的网络技术、存储技术,以及少量架构技术。
目录
相关文章推荐
美团技术团队  ·  可信实验白皮书系列03:随机对照实验 ·  3 天前  
架构师之路  ·  爸爸!除了你,沈括,沈万三... ... ·  4 天前  
51好读  ›  专栏  ›  细说云计算

UCloud虚拟化在线迁移优化实践(二): UCloud虚拟化跨机迁移优化

细说云计算  · 公众号  · 架构  · 2017-07-05 22:00

正文

请到「今天看啥」查看全文


由于 UDisk 是网络块存储,在迁移一台带有 UDisk 机器时, 迁移 UDisk 盘是没有必要的,因为这个盘可以通过网络挂到目标。为此,我们在迁移时过滤掉虚拟机的 UDisk 盘,同时对 UDisk 产品做了改造,支持多点挂载,这样就解决了这个问题,提高了迁移的效率。在迁移前目标端 DestHost 会将 UDisk 进行挂载操作,同时迁移过程中会跳过 UDisk 的传输,当迁移结束时源端 SourceHost 会将 UDisk 进行卸载,这样既避免对 UDisk 数据进行迁移,同时避免虚拟机在迁移过程中,对 UDisk 数据的访问,实现迁移过程对用户完全透明。

3. 迁移结束优化

目前,在线迁移默认情况下它不能很好地处理内存写密集型的虚拟机。由于在线迁移过程中,用户虚拟机并不关机,这就使得迁移过程中用户会不停产生新的内存脏数据。这些新增脏数据需要通过多次迭代的增量数据迁移来传递到目标端 DestHost 上,并在预期新增脏数据传输时间少于最大停机时间时,进行最后一次停机增量数据传输,然后将虚拟机切换到目标端 DestHost。如果用户产生的脏内存数据过多,就会使得迁移的增量数据传输时间一直大于最大停机时间,使得增量传输阶段不断进行循环迭代,导致整个迁移过程无法完成。

图 2.3 内存迁移的 auto-coverge 优化

由于用户产生脏内存数据的速度与虚拟机的 vCPU 被提交运行的时间有关,因此能够减少用户虚拟机 vCPU 执行时间可以阻止用户产生过多的内存脏数据,从而让迁移数据传输得以在内存脏数据产生之前的完成。为此,我们对 Qemu 的 auto-converge 功能进行了优化,首先,我们提高了 Qemu 的 throttling 迁移速度,避免迁移速度限制迁移的完成时间。其次,我们修改了 auto-converge 的触发条件。在增量迁移数据时,如果产生脏数据的量大于上次产生传输数据量的 50%,并重复发生多次,则自动触发自动 auto-converge 功能。该功能默认情况下,将削减 20% 的虚拟机 vCPU 执行时间,也就减低用户虚机 vCPU 的执行速度,并减少新增的脏数据。在每次内存迭代开始时,它会根据之前的削减情况,决定后续削减粒度。

如果新增脏数据仍然过多,它将重复削减 10% 的许可 vCPU 的运行时间,直至削减 CPU 直至 99%,从而触发最后阶段的停机迁移,以完成迁移过程。虽然,这种优化会使得虚拟机的停机时间稍长,但是根据长期实践结果,整个迁移的停机时间仍然非常小(小于 100ms),因此这项优化对提高迁移的成功率有重要意义。

4. 压缩迁移优化

虽然 Qemu 的 auto-converge 功能可以在一定程度上解决用户内存负载对迁移的影响,提高迁移成功率。但是如果用户产生的脏数据对 vCPU 的执行速度依赖不大的话,就会使得迁移的增量数据传输时间一直大于最大停机时间,从而使得整个迁移过程无法完成。考虑到内存负载高的用户,往往会反复修改某一内存页,这些内存页面很容易被压缩。为此,可以考虑在迁移内存数据前,对这些内存进行压缩。

如图 2.4 所示,当前 Qemu 支持的 XBZRLE 压缩算法会将之前发送的内存页面维护在其内存缓存区内。在迁移内存页面时,会先查找该页面是否在其 XBZRLE 缓存内,如果在缓存内,则进行异或编码,只传输被压缩后的增量数据;如果没有,则直接传输内存页面。通过这个过程可以大大减少发送内存页面数据量,并提高内存迁移速度。

图 2.4 内存迁移的 xbzrle 压缩迁移优化

目前,UCloud 的在线迁移已经使用 XBZRLE 进行高内存负载的迁移优化。实际使用表明通过这种压缩方法可以提高高内存负载虚拟机的迁移成功率、并缩短迁移时间,同时 CPU 使用率提高也在合理范围内;而且对于普通内存负载虚拟机的迁移,几乎没有额外的 CPU 使用率消耗。后续还会结合底层硬件加速卡,并适时的开启多线程内存压缩迁移优化。

切换阶段
1. 源端 paused 优化

迁移的过程是由 Qemu 来具体执行,但是对于整个迁移过程的控制则是来自更上层的 Libvirt。当 Qemu 在执行最后一步机器数据迁移切换时,两边的虚拟机都是处于 paused 状态。后续 Libvirt 将关闭源端 SourceHost 上的被迁移虚拟机,并拉起目标端 DestHost 上的对应虚拟机。在线迁移的最大优点在于不能因为迁移失败而导致虚拟机关机,不管成功或者失败,都要保障虚拟机实例的存活(源端或目标端)。







请到「今天看啥」查看全文