一、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
--------------------------------------分割线 --------------------------------------
CentOS 5.6下KVM的安装/桥接设置/虚拟机创建及运行
Ubuntu下用libvirt安装KVM虚拟机时找不到/bin/qemu-kvm问题解决
--------------------------------------分割线 --------------------------------------
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技术可以降低内存占用而提高整体性能。