完全虚拟化软件KVM的应用

ChasingChasing 2014-11-06

一、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架构图

安装了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技术可以降低内存占用而提高整体性能。

相关推荐