qemu manager
作为云计算领域的重要技术之一,KVM虚拟化软件在现代数据中心中得到了广泛应用。基于KVM的hypervisor为虚拟机中的应用程序提供了高性能的CPU、内存和IO设备等资源。在大规模生产环境中,保证软硬件的可运维性一直是云服务提供商关注的焦点。
为了给用户提供稳定、安全、高效并且功能丰富的云资源,IaaS的底层软件必须支持各种运维需求。例如,在硬件故障发生时,需要实现虚拟机的热迁移;在软件安全漏洞或功能缺陷被修复后,需要通过热升级及时部署到生产环境中。
实现用户无感知的热迁移和热升级是一个复杂的系统工程问题。KVM虚拟化涉及众多不同层次的组件、诸多特性和灵活可选的组合方式,其中不乏一些复杂的软硬件技术。这些软硬件模块各自都有复杂的接口和内部状态,在不影响虚拟机正常运行的情况下,要做到宿主机软件的热升级和热迁移,还需要做一些针对性的设计或改造。
目前,各个开源社区和云计算公司都在尝试对KVM的热升级支持进行研发,字节跳动技术团队从实际场景出发,对热升级问题进行了深入分析,并与开源社区紧作,做出了深度探索并取得了进展。
本文将回顾KVM Forum中分享的主要技术方案。KVM虚拟化中PCI设备的直通技术广泛应用于当前的数据中心场景,为虚拟机应用提供高性能的IO设备。直通设备的使用也为云计算底层设施的运维带来了一些复杂度。其中,热升级和热迁移的兼容性是PCI直通设备的一大难点。
在技术调研部分,介绍了在KVM中对PCI设备的直通需要通过VFIO-PCI接口来完成。对于热升级过程,虚拟机的运行状态需要稳定地保持在升级前的状态。对于PCI直通设备,有两种主要的思路:一种是通过提取设备状态数据备份,然后在升级后恢复;另一种是在升级过程中不改变设备状态。
本文提出的解决方案主要包括三个部分:改进一是在hypervisor中引入必要的静态页面分配,保证kexec重启过程中的状态保持;改进二是在内核态实现静态分配;改进三是对VFIO设备进行简化,保证硬件状态不扰。
目前,该团队在QEMU模拟环境中对方案进行了实验验证,并获得了显著的效果。使用VFIO-PCI透传设备的宿主机上部署了改进后的host内核和QEMU程序,基于QEMU通用的checkpointing and recovery(CPR)框架,支持低损耗的host内核热升级动作。从暂停虚拟机到重启进入新内核并继续执行虚拟机,整个过程可在160ms左右完成。
此技术方案具有较高的实用价值,能够显著降低运维成本,提高云的安全性,并优化运维过程中的虚拟机运行性能和客户体验。字节跳动系统与技术工程团队将继续优化Linux内核和虚拟化软件,为数据中心提供安全、稳定、高效运行的系统软件。
该团队还在Virtio设备标准、QEMU热升级、Linux启动时间、io_uring、kexec等方面进行了深入的研究和优化。欢迎大家交流学习,并投递简历至指定邮箱。