KVM架构
KVM(Kernel-based Virtual Machine)包含一个为处理器提供底层虚拟化、可加载的核心 模块kvm.ko(kvm-intel.ko或kvm-amd.ko),使用QEMU(QEMU-KVM)作为虚拟机上层 控制工具。KVM无需改变Linux或Windows系统就能运行。
KVM就是内核的一个模块,用户空间通过QEMU模拟硬件提供给虚拟机使用,一台虚拟机就 是一个普通的Linux进程,通过对这个进程的管理,就可以完成对虚拟机的管理
qemu
QEMU本身并不是KVM的一部分,其本身是一个著名的开源虚拟机软件,与KVM不同, QEMU是一个纯软件的实现,所以性能低下。但是,其优点是可以模拟很多硬件
以盖房子为例,KVM可以理解为开发商,房子盖的很好,但是不会装修;QEMU可以理解为 装修公司,房子盖的不好,但是装修做的很好;所以我们采用KVM盖房子(硬件虚拟化,实 现CPU和内存计算资源的模拟),使用QEMU装修(软件模拟,实现网卡、显卡、存储控制器 和硬盘等)。
KVM只是一个内核的模块,没有用户控件的管理工具,KVM虚拟机可以借助QEMU的管理工 具来管理,QEMU也可以借助KVM来加速,提升虚拟机的性能
首先KVM(Kernel Virtual Machine)是Linux的一个内核驱动模块,它能够让Linux主机成为一个Hypervisor(虚拟机监控器)。在支持VMX(Virtual Machine Extension)功能的x86处理器中,Linux在原有的用户模式和内核模式中新增加了客户模式,并且客户模式也拥有自己的内核模式和用户模式,虚拟机就是运行在客户模式中。KVM模块的职责就是打开并初始化VMX功能,提供相应的接口以支持虚拟机的运行。
QEMU(quick emulator)本身并不包含或依赖KVM模块,而是一套由Fabrice Bellard编写的模拟计算机的自由软件。QEMU虚拟机是一个纯软件的实现,可以在没有KVM模块的情况下独立运行,但是性能比较低。QEMU有整套的虚拟机实现,包括处理器虚拟化、内存虚拟化以及I/O设备的虚拟化。QEMU是一个用户空间的进程,需要通过特定的接口才能调用到KVM模块提供的功能。从QEMU角度来看,虚拟机运行期间,QEMU通过KVM模块提供的系统调用接口进行内核设置,由KVM模块负责将虚拟机置于处理器的特殊模式运行。QEMU使用了KVM模块的虚拟化功能,为自己的虚拟机提供硬件虚拟化加速以提高虚拟机的性能。
KVM只模拟CPU和内存,因此一个客户机操作系统可以在宿主机上跑起来,但是你看不到它,无法和它沟通。于是,有人修改了QEMU代码,把他模拟CPU、内存的代码换成KVM,而网卡、显示器等留着,因此QEMU+KVM就成了一个完整的虚拟化平台。
KVM只是内核模块,用户并没法直接跟内核模块交互,需要借助用户空间的管理工具,而这个工具就是QEMU。KVM和QEMU相辅相成,QEMU通过KVM达到了硬件虚拟化的速度,而KVM则通过QEMU来模拟设备。对于KVM来说,其匹配的用户空间工具并不仅仅只有QEMU,还有其他的,比如RedHat开发的libvirt、virsh、virt-manager等,QEMU并不是KVM的唯一选择。
所以简单直接的理解就是:QEMU是个计算机模拟器,而KVM为计算机的模拟提供加速功能。