KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。
KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。
关于KVM:
1).KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。 2).是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。 3).它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。 4).KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。 5).KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)。 6).在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。
————摘自WIKI百科
KVM 与 vbox的区别
vbox 是由 qemu 改写而成,包含大量qemu 代码。
1).可以使用于"不支持"虚拟化技术的cpu。
2).值得说的一点:vbox 在图形方面比较好,能进行2D 3D加速;但cpu控制不理想(估计是因为图形支持的缘故);操作上有独立的图形界面,易于上手。
kvm 是linux内核包含的东西,使用qemu作为上层管理(命令行)。
1).要求cpu 必须支持虚拟化。
2).性能:作为服务器很好,可是图形能力十分的差。即使放电影,图像也是像刷油漆一样,一层一层的。
3).cpu使用率控制很好。
4).控制上比较简洁,功能比较丰富:比如使用“无敌功能”所有更改指向内存,你的镜像永远保持干净。“母镜像”功能让你拥有n个独立快照点。还有很多参数。另外,kvm作为内核级的虚拟机,刚开始发展关注的公司比较多——但是还没有达到商业应用的水平。
总体而言:在支持虚拟化的情况下,vbox 和 kvm 的性能差不多,主要是面向对象不同:kvm适用于服务器,vbox适用于桌面应用。
qemu 全称Quick Emulator。是独立虚拟软件,能独立运行虚拟机(根本不需要kvm)。kqemu是该软件的加速软件。kvm并不需要qemu进行虚拟处理,只是需要它的上层管理界面进行虚拟机控制。虚拟机依旧是由kvm驱动。所以,大家不要把概念弄错了,盲目的安装qemu和kqemu。qemu使用模拟器
KVM内存管理
KVM继承了Linux系统管理内存的诸多特性,比如,分配给虚拟使用的内存可以被交换至交换空间、能够使用大内存页以实现更好的性能,以及对NUMA的支持能够让虚拟机高效访问更大的内存空间等。
KVM基于Intel的EPT(ExtendedPage Table)或AMD的RVI(Rapid Virtualization Indexing)技术可以支持更新的内存虚拟功能,这可以降低CPU的占用率,并提供较好的吞吐量。
此外,KVM还借助于KSM(Kernel Same-pageMerging)这个内核特性实现了内存页面共享。KSM通过扫描每个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存页合并为一个被各相关虚拟机共享的单独页面。在某虚拟机试图修改此页面中的数据时,KSM会重新为其提供一个新的页面副本。实践中,运行于同一台物理主机上的具有相同GuestOS的虚拟机之间出现相同内存页面的概率是很的,比如共享库、内核或其它内存对象等都有可能表现为相同的内存页,因此,KSM技术可以降低内存占用进而提高整体性能。
相关连接:
KVM的官方地址:
KVM的Howto文档:
Kqemu源码地址:
Qemu下载地址:
二.KVM虚拟化平台构建
1.安装准备
查看你的硬件是否支持虚拟化。命令:
#egrep '(vmx|svm)' /proc/cpuinfo
注意:
1).要有 vmx 或 svm 的标识才行。总的说来,AMD在虚拟化方面作得更好一些。
2).我用的是虚拟机,我使用了VBOX,发现其不支持硬件虚拟化,启动虚拟机后执行查看命令无法发现上述的选项;所以我就换成了VMware Workstation 10,并在虚拟机的设置中打开了CPU设置中的虚拟化引擎,选择了Intel VT-x/EPT或AMD-V/RVI(V)这个选项;具体设置如下图:
2.安装KVM
由于Linux内核已经将KVM收录了,在安装系统时已经加入了KVM,我们只需要在命令行模式下启用KVM即可:
启用KVM模块
#modprobe kvm
功能区分intel/amd的启用:
#modprobe kvm-intel # lsmod |grep kvm kvm_intel 55496 0 kvm 337772 1 kvm_intel
3.KVM虚拟机创建和管理所依赖的组件介绍