KVM(Kernel—based Virtual Machine)是一个开源全虚拟化方案,依赖X86硬件支持Intel VT-X/AMD-V 内核模块 使得Linux内核成为Hypervisor。2006年10月 以色列公司Qumranet发布KVM,红帽6.0之后仅支持KVM。Openstack Eucalyptus 华为云等同时支持KVM和Xen。Linux 的插件叫做kvm.ko, kvm主要用于CPU和内存的虚拟化。但KVM需要CPU中虚拟化功能的支持,只可在具有虚拟化支持的CPU上运行,即具有VT功能的Intel CPU和具有AMD-V功能的AMD CPU
KVM是集成到Linux内核中的VMM,是X86架构且硬件支持虚拟化的全虚拟化解决方案,是一个很小的模块,本身不具有虚拟化,通过调用Linux内核来完成虚拟化,如任务调度,内存管理与硬件设备交互等。是一个典型的II型虚拟化安装了linux后并且安装此模块,就变成了Hypervisor,每个虚拟机都是一个进程,直接使用Kill命令杀掉。
当Linux安装KVM后会出现三种运行模式:
Guest mode:虚拟机
User mode:用户空间,运行QEMU软件模拟工具,实现IO虚拟化。
kernel mode:内核空间,可以直接选择硬件或者硬件操作系统,执行特权与敏感指令。
Kvm.ko只提供了CPU和内存的虚拟化,但是一个虚拟机除了Cpu和内存外,还需要网卡、硬盘等其他IO设备,这时候就需要另外一个组件——QEMU,kvm和QEMU一起才能构成一个完整的虚拟化技术。QEMU本身可以模拟CPU和内存,在KVM中,只使用QEMU来模拟IO设备,所以KVM叫做QEMU-KVM。KVM加上QEMU后才是完整意义上的虚拟化。
除了各种设备的虚拟化外,KVM还提供了原生工具对虚拟机的创建、修改和删除等操作,Libvirt是目前使用最为广泛的管理KVM虚拟机的工具和API。Libvirt 就是 KVM 的管理工具。它可以管理KVM、XEN、VMware、以及Hyper-V等,libvirt是一套由C语言开发的API接口,可以被很多应用使用,管理工具中的其他命令集都可以通过libvirt管理KVM虚拟机
VirtIO:
用了VirtIO,模拟一个同样的虚拟机网卡,该网卡的速率可以提升到10G,当某些应用对网卡速度有要求时,就必须要用virtIO,节省QEMU模拟时所需的硬件资源,缩短IO请求的路径,提高虚拟化设备的性能。Windows中就没有virtIO驱动,需要添加virtIO软驱安装驱动,完成硬件的添加。
XEN和KVM的区别,为什么现在云厂商要用KVM而不用XEN:
因为KVM早期就是为Openstack提供代码支持,而XEN则是帮助CloudStack,后来Openstack流行,华为转KVM,要跟着KVM的生态走。因为如果XEN出问题需要维护而KVM大家一起维护,问题少。
1、XEN需要升级内核,维护一套内核,进来的数据包需要经过Domain0来处理,当虚拟机多的时候速度变慢
2、kvm更轻量,通过内核模块来实现,一个VM就是一个进程 linux的一个应用
3、XEN被Citrix思杰收购,支持cloudstack,后来CloudStack没有干过Openstack,导致XEN也由此没落
4、kvm被红帽收购,支持openstack,相比cloudstack更流行,有更多的厂商支持
5、只有xen虚拟化才有domain0,跟半虚拟化全虚拟化无关,xen也有全虚拟化
6、kvm也有半虚拟化和硬件辅助虚拟化,不需要domain0,所以性能不必担心,但是依赖于CPU,需要驱动支持