虚拟化技术 — QEMU-KVM 基于内核的虚拟机

高手在线求帮请说下,虚拟化技术 — QEMU-KVM 基于内核的虚拟机
最新回答
野稚

2024-09-23 06:41:58

探索虚拟化之巅:QEMU-KVM的基石与高效运行


QEMU-KVM,作为Linux内核集成的高效虚拟化解决方案,其核心是TYPE1 Hypervisor,利用硬件辅助虚拟化技术,与Linux内核紧密协作,以卓越的性能和资源管理能力脱颖而出。理解KVM,首先要知道它如何在硬件支持下,作为内核模块,提供对虚拟环境的控制与优化,确保兼容性和效率。


2007年,KVM正式加入Linux大家庭,支持多核架构(SMP)和NUMA,其功能扩展至Live Migration和Kernel Same-page Merging(KSM),显著提升了虚拟机的动态迁移和内存管理效率。启动时,KVM内核模块kvm.ko以Root Mode初始化,通过User Application QEMU,如魔术般模拟虚拟硬件,为虚拟机提供服务。


QEMU,由天才开发者Fabrice Bellard于2001年推出,作为TYPE2 Hypervisor,它凭借动态二进制翻译技术,兼容多种CPU架构和设备模拟,尽管性能相较于KVM稍显逊色,但QEMU的灵活性使其与KVM结合,孕育了QEMU-KVM这一强大分支,两者共同推动虚拟化技术的革新。


KVM软件组件包括:内核模块kvm.ko、开源虚拟机管理器QEMU、在云服务商如AWS和阿里云中应用的QEMU-KVM,以及virtio驱动,它们共同构建起虚拟化技术的坚实基础。


尽管QEMU-KVM分支是QEMU的一部分,但在KVM环境中,我们更倾向于称QEMU作为KVM的执行引擎。KVM工作原理巧妙,kvm.ko在内核空间,通过/dev/kvm与用户空间进行实时交互,提供libkvm库。QEMU通过系统调用如open、close和ioctl来访问KVM接口,实现CPU、内存和I/O的虚拟化,而VM的管理和I/O模拟则由QEMU独立处理。


创建虚拟机的过程,如同艺术般的精密操作:首先打开/dev/kvm,通过ioctl命令创建VM,配置硬件抽象层(HVA)与物理地址(HPA),以及模拟PCI设备。接着映射QEMU镜像,构建vCPU,并启动Guest OS。在此过程中,主线程持续监听VM的退出事件,以响应虚拟环境中的中断和设备访问等。


当缺页中断或设备访问引发退出事件时,KVM接管CPU,Linux内核通过ioctl与QEMU交互,管理虚拟机及其vCPU。KVM支持三种运行模式:User、Kernel(根模式)和Guest(非根模式)。QEMU通过/dev/kvm实现内存虚拟化,创建全局页表(GPA)映射,确保Guest OS的隔离性。对于I/O虚拟化,QEMU负责模拟设备并捕获I/O请求,构建出QEMU-KVM的架构,由vCPU、虚拟内存、虚拟I/O和Guest OS构建,形成独特的用户进程结构。


QEMU-KVM的架构设计巧妙,vCPU在Host OS的调度下,由Guest OS和Host OS共同管理,形成两层调度:Guest OS负责高级调度,而Host OS(Linux Scheduler)负责低级调度,涉及vCPU线程、QEMU线程和物理CPU。KVM支持SMP和NUMA,允许用户自定义虚拟机的vCPU布局,确保在迁移时CPU模型的安全性。


通过-qemu-kvm命令,开发者可以定制VM的CPU配置,选择自定义模型和特性,但需注意,软件模拟可能影响性能。默认情况下,使用-host模型,磁盘设备选项丰富多样,包括文件路径、接口类型、索引和格式。启动选项如-boot则用于指定引导设备,根据架构支持不同的字符标识。QEMU的网卡模拟功能强大,支持多种NIC类型、MAC地址和VLAN,甚至可通过Tap接口连接物理网络,支持用户模式的网络栈设计。


虚拟化技术的卓越之旅,QEMU-KVM以卓越的性能和灵活性,引领着我们探索更高层次的计算世界。无论是基础配置还是高级特性,QEMU-KVM都以其卓越的工程设计,为云计算和虚拟化环境提供了强大的支撑。