虚拟化指创建某事物的虚拟(而非实际)版本,包括虚拟的计算机硬件平台、存储设备,以及计算机网络资源),虚拟化是一种资源管理技术,它将计算机的各种实体资源(CPU、内存、存储、网络等)予以抽象和转化出来,并提供分割、重新组合,以达到最大化利用物理资源的目的。
KVM 全称是 Kernel-based Virtual Machine,即基于内核的虚拟机,是采用硬件虚拟化技术的全虚拟化解决方案。KVM 从诞生开始就定位于基于硬件虚拟化支持的全虚拟化实现。它以内核模块的形式加载之后,就将 Linux 内核变成了一个 Hypervisor,但硬件管理等还是通过 Linux kernel 来完成的。
一个 KVM 客户机对应于一个 Linux 进程,每个 vCPU 则是这个进程下的一个线程,还有单独的处理 IO 的线程,也在一个线程组内。所以,宿主机上各个客户机是由宿主机内核像调度普通进程一样调度的,即可以通过 Linux 的各种进程调度的手段来实现不同客户机的权限限定、优先级等功能。其主要特性如下:
1、 内存管理
KVM 依赖 Linux 内核进行内存管理。一个 KVM 客户机就是一个普通的 Linux 进程,所以,客户机的“物理内存”就是宿主机内核管理的普通进程的虚拟内存。Linux 内存管理的机制,如大页、KSM(Kernel Same PageMerge,内核的同页合并)、NUMA(Non-Uniform Memory Arch,非一致性内存架构)、通过 mmap 的进程间共享内存,统统可以应用到客户机内存管理上。
2、 存储和客户机镜像的格式
KVM 能够使用 Linux 支持的任何存储来存储虚拟机镜像,包括具有 IDE、SCSI 和 SATA 的本地磁盘,网络附加存储(NAS)(包括 NFS 和 SAMBA/CIFS),或者支持 iSCSI 和光线通道的 SAN。多路径 I/O 可用于改进存储吞吐量和提供冗余。由于 KVM 是 Linux 内核的一部分,它可以利用所有领先存储供应商都支持的一种成熟且可靠的存储基础架构,它的存储堆栈在生产部署方面具有良好的记录。
KVM 还支持全局文件系统(GFS2)等共享文件系统上的虚拟机镜像,以允许客户机镜像在多个宿主机之间共享或使用逻辑卷共享。磁盘镜像支持稀疏文件形式,支持通过仅在虚拟机需要时分配存储空间,而不是提前分配整个存储空间,这就提高了存储利用率。KVM 的原生磁盘格式为 QCOW2,它支持快照,允许多级快照、压缩和加密。
3、 实时迁移
KVM 支持实时迁移,这提供了在宿主机之间转移正在运行的客户机而不中断服务的能力。实时迁移对用户是透明的,客户机保持打开,网络连接保持活动,用户应用程序也持续运行,但客户机转移到了一个新的宿主机上。除了实时迁移,KVM 支持将客户机的当前状态(快照,snapshot)保存到磁盘,以允许存储并在以后恢复它。
4、 设备驱动程序
KVM 支持混合虚拟化,其中半虚拟化的驱动程序安装在客户机操作系统中,允许虚拟机使用优化的 I/O 接口而不使用模拟的设备,从而为网络和块设备提供高性能的 I/O。KVM 使用的半虚拟化的驱动程序是 IBM 和 Redhat 联合 Linux 社区开发的 VirtIO 标准;它是一个与 Hypervisor 独立的、构建设备驱动程序的接口,允许多种 Hypervisor 使用一组相同的设备驱动程序,能够实现更好的对客户机的互操作性。
同时,KVM 也支持 Intel 的 VT-d 技术,通过将宿主机的 PCI 总线上的设备透传(pass-through)给客户机,让客户机可以直接使用原生的驱动程序高效地使用这些设备。这种使用是几乎不需要 Hypervisor 的介入的。
5、 性能和可伸缩性
KVM 也继承了 Linux 的性能和可伸缩性。KVM 在 CPU、内存、网络、磁盘等虚拟化性能上表现出色,大多都在原生系统的 95%以上。KVM 的伸缩性也非常好,支持拥有多达 288 个 vCPU 和 4TB RAM 的客户机,对于宿主机上可以同时运行的客户机数量,软件上无上限。任何要求非常苛刻的应用程序工作负载都可以运行在 KVM 虚拟机上。
虚拟化发展到今天,各个 Hypervisor 的主要功能都趋同。KVM 作为后起之秀,并且在公有云上广泛部署,其功能的完备性是毋庸置疑的。并且由于其开源性,反而较少一些出于商业目的的限制。