云计算中热迁移指的是虚拟机热迁移还是虚拟机中运行的业务系统热迁移?
热迁移是一种将虚拟机(VM)从一台物理服务器迁移到另一台物理服务器的技术,而无需关闭虚拟机。这种迁移可以在不中断用户业务的情况下完成,确保了服务的高可用性和用户体验的连续性。热迁移的应用场景往往包括两种,一种是硬件或系统的主动升级但又不希望中断虚机上的重要业务;一种是某台物理机的负载太重进行主动的虚拟机迁移。热迁移的好处是对用户业务的影响非常小,中断时间可到ms级,用户内存数据进行了迁移,对业务应用无感知。
热迁移实际就是数据的迁移,在虚拟机热迁移过程中源端主机业务有可能继续提供有关内存写入的服务,生成新的未被迁移的内存,这就是所谓的“脏内存”,硬件标脏是指在热迁移过程中,由硬件来进行“脏内存”的标记,通知软件迁移对应的内存数据,来达到无感知迁移的目的。在现有市面上的实现方案中,基于FPGA硬件标脏的热迁移一般由迁移准备、迭代迁移、停机迁移三个阶段组成。
在迁移准备阶段,软件侧根据源虚拟机所占用的内存空间的大小,以bitmap上的1bit对应1pagesize为映射关系,申请对应大小的bitmap空间用于记录该虚拟机迭代迁移阶段的“脏页”,申请完成后,通过enable logen将脏页的base addr、max size和page size写到FPGA中源虚拟机对应的virtio vf,启动对该虚拟机的硬件标脏。
在迭代迁移阶段,软件负责检查dirt page bitmap,迁移内存数据,clear dirty bitmap。同时FPGA virtio后端设备根据配置的bitmap信息通过dma写内存更新dirty bitmap,期间会用到上面初始化的base addr、max size和page size。由于pcie dma最小写请求为1Byte,所以FPGA进行标脏直接以1Byte为单位,其中一个页为脏,会同时把相邻的7个页全部标脏,FPGA侧标脏这里需要对8*page size进行取模进行脏页标脏。
当在迭代迁移的过程中,计算的剩余脏页内存的量,可以在预期停机时间内一次性传输到对端,就开始停机迁移。停机迁移阶段会先对源虚拟机的virtio vf进行暂停操作,然后软件侧从FPGA读取各virtio vf的avail idx和used idx等信息,然后配置disable logen停止FPGA的硬件标脏,这样整体完成网卡设备的stop操作。
由于内存里虚拟机的内存里的数据是动态变化的,虚拟机里运行的负载的大小直接影响迁移的时间长短。而由于pcie dma最小写请求为1Byte,FPGA进行标脏直接以1Byte为单位,其中一个页为脏,会同时把相邻的7个页全部标脏,最坏的情况是会有7个page size会被非必要的迁移,这就给网络带宽造成了很大的浪费,并且也降低了热迁移的效率。考虑到热迁移的效率对于云主机是一个很重要的指标,本文基于多bitmap架构根据迁移状态反馈,动态调整迁移粒度,通过软硬件协作,提升热迁移效率,优化资源使用。
图一是系统架构图。在该架构中包含至少一台安装FPGA板卡的服务器。管理软件通过PCIe接口对FPGA配置bitmap信息到相应的寄存器,FPGA上的virtio vf根据硬件标脏寄存器的配置值对相应的dma wr通道进行内存计算并增加标脏的dma wr通道用于更新bitmap,管理软件负责检查dirty page bitmap,迁移内存数据,clear dirty bitmap,并在迁移完成后对FPGA配置停止硬件标脏的信息到相应的寄存器,FPGA即停止该vf的硬件标脏。
本文方法使用多bitmap方法用于实现动态调整热迁移硬件标脏粒度,从而达到降低资源消耗和成本、提升热迁移效率、提升用户体验的效果。在本架构中,host DDR针对FPGA中的virtio vf可能先后配置多个bitmap,这些bitmap的page size可能不同,即存在不同的内存映射关系。图二是以每1bit映射4KByte的映射模型。
图三是一个完整的硬件标脏流程。
在迁移准备阶段,管理软件申请1个bitmap用于热迁移的源vf的硬件标脏,申请完成后通过PCIe寄存器接口配置bitmap的base addr、max size和page size至FPGA中的vf并通过enable logen启动FPGA对该vf的标脏。
迭代迁移阶段,FPGA virtio后端设备根据配置的bitmap信息通过dma写内存更新dirty bitmap,具体bitmap更新的bit由当前dma wr的addr、bitmap的base addr和page size计算得出。管理软件负责检查dirty page bitmap,迁移内存数据,clear dirty bitmap。同时管理软件根据迁移效率、网络带宽的占用率等情况,可能调整page size申请新的bitmap,并重新配置新的bitmap的base addr、max size和page size至FPGA,FPGA基于新的bitmap信息进行标脏。管理软件必须先完成之前申请的bitmap的数据迁移并释放bitmap,再开始新bitmap的数据迁移。同时,管理软件监控剩余脏页内存的量,可以在预期停机时间内一次性传输到对端,就开始停机迁移。
停机迁移阶段,管理软件会对FPGA源vf进行停流操作,然后读取vf信息用于后续目的端的状态恢复。同时通过寄存器对该vf进行停止标脏,这样整体完成对源vf的stop操作。同时管理软件将该vf的dirty page bitmap全部迁移完成并释放,这样就完成了停机迁移。
本文构建了一套完整的动态提升热迁移硬件标脏效率的流程,核心点在于可以在迭代迁移阶段根据迁移效率、网络带宽等状态实时申请不同page size的bitmap,通过调整bitmap的映射关系来调整热迁移的迁移效率,从而实现一个功能更灵活、效率更高、资源更节省、用户体验更好的热迁移流程。
本篇文章转载自天翼云官方网站开发者社区,了解更多云计算知识可登录天翼云官方网站开发者社区,点击专栏查看更多技术干货,与技术大咖促膝论道!
往期回顾:veth实现详解 - 知乎 (zhihu.com)