7.5.1. 简介

KVM (Kernel-Based Virtual Machine) 是基于内核的虚拟机,是Linux内核的一个可加载模块,通过调用Linux本身内核功能,实现对CPU的底层虚拟化和内存的虚拟化,使Linux内核成为虚拟化层。

KVM必须依赖CPU提供的硬件虚拟化技术,以Intel、AMD为代表的硬件平台中很多虚拟化相关的硬件特性。

在普通的Linux系统中,进程一般有两种执行模式:内核模式和用户模式,在KVM环境中,增加了第三种模式:客户模式。KVM本身并不提供任何虚拟仿真功能,它仅仅是简单的提供的一个接口,接口位于 /dev/kvm ,用户空间通过 ioctl 使用此接口实现相关功能。

  • 用户模式(User Mode):主要处理I/O的模拟和管理,由QEMU实现。

  • 内核模式(Kernel Mode):主要处理特别需要高性能和安全相关的指令,如处理客户模式到内核模式的转换,处理客户模式下的I/O指令或其他特权指令引起的退出(VM-Exit),处理影子内存管理(shadow MMU)。

  • 客户模式(Guest Mode):主要执行guest OS中的大部分指令,I/O和一些特权指令除外。

7.5.1.1. 历史

KVM虚拟机最初是由一个名为Qumranet的以色列创业公司作为他们的VDI产品的虚拟机开发的。

KVM的开发人员并没有选择从底层开发Hypervisor,而是选择了基于Linux Kernel,通过加载新的模块从而使Linux Kernel本身变成一个Hypervisor。

2006年8月,在先后完成了基本功能、动态迁移以及主要的性能优化之后,Qumranet正式对外宣布了KVM的诞生并推向Linux内核社区。同年10月,KVM模块的源代码被正式接纳进入Linux Kernel,成为内核源代码的一部分。之后2007年2月发布的Linux 2.6.20是第一个带有KVM模块的Linux内核正式发布版本。

2008年,Qumranet被Red Hat收购。