KVM虚拟机简介
Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux2.6.20之后继承Linux的主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的VMM之一。
Kvm仅仅是一个linux内核的模块,当在linux中安装了kvm后,linux会变成了hypervisor,即VMM,进行CPU和内存的虚拟管理,而qemu工具,实现虚拟机的创建管理,monitor管理各个IO设备,redhat在购买掉kvm后,专门定制了适合于redhat系统的qemu-kvm管理工具。
Kvm只能运行在支持硬件虚拟化的CPU上,并且只支持64bits系统。kvm属于完全虚拟化的实现软件。
KVM架构

如上kvm架构图 安装了kvm后的内核变得很诡异,其模式分为了三部分:内核模式,用户模式,来宾模式 VCPU:用线程模拟实现的CPU KVM的主要两类组件: 1、/dev/kvm:管理虚拟机的设备文件,用户空间的程序可通过调用其ioctl()来完成虚拟机的创建启动等管理工作,它是一个字符设备;其主要完成的操作包括: 创建虚拟机; 为虚拟机分配内存; 读、写VCPU的寄存器; 向VCPU注入中断请求; 运行VCPU; 2、qemu进程:工作于用户空间的组件,用于方针PC机的I/0类硬件设备。
KVM内存管理
KVM继承了Linux系统管理内存的诸多特性,比如分配给虚拟使用的内存可以被交换至交换空间、能够使用大内存页以实现更好的性能,以及对NUMA的 的支持能够让虚拟机高效访问更大的内存空间等。
KVM基于Intel的EPT(Extended Page Table)或AMD的RVI(Rapid Virtualization Indexing)技术可以支持更新的内存虚拟功能,这可以降低CPU的占用率,并提高较好的吞吐量。
此外,KVM还借助于KSM(Kernel Same-page Merging)这个内核特性实现了内存页面恭喜那个。KSM 通过扫描每个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存合并为一个被各种相关虚拟机共享的单独页面。在某虚拟机试图修改此页面中的数据时,KSM会重新为其提供一个新的页面副本。实践中,运行于同一台物理主机上的具有相同GuestOS的虚拟机之间出现相同内存页面的概率是很大的,比如共享库,内核或其他内存对象等都有可能表现为相同的内存页,因此KSM技术可以降低内存占用而提高整体性能。
KVM的管理工具

使用qemu-kvm管理KVM虚拟机
Qemu是一个广泛使用的开源计算机仿真器和虚拟机。当作为仿真器时,可以在一种架构(如PC机)下运行另一种架构如(ARM)的操作系统和程序。而通过动态转换,其可以获得很高的运行效率,当作为一个虚拟机时,qemu可以通过直接使用真机的系统资源,让虚拟系统能够获得接近于物理机的性能表现。qemu支持xen或者kvm模式下的虚拟化。当用kvm时,qemu可以虚拟x86、服务器和嵌入式powerpc,以及s390的系统
Qemu当运行与主机架构相同的目标架构时可以使用KVM。例如当在一个x86兼容处理器上运行qemu-system-x86时,可以利用kvm加速——为宿主机和客户机提供更好的性能
Qemu的组成部分:
处理器模拟器(x86、PowerPC和Sparc)
仿真设备(显卡、网卡、硬盘、鼠标等)
用于将仿真设备连接至主机设备(真实设备)的通用设备;
模拟机的描述信息;
调试器;
与模拟器交互的用户接口;