Hypervisor

虚拟化主要是通过软件实现的方案。
image.png

虚拟机监控器VMM,即Hypervisor。运行在物理机和虚拟机之间的一个软件层。
是提供虚拟机硬件模拟的专门软件,主要分为:原生型和宿主型
原生型:又称裸机型(图Type1)
直接运行在硬件之上以控制硬件资源并管理虚拟机。常见的有Vmware ESXi Hyper-V
宿主型:又称托管型(图Type2)
Hypervisor运行在传统的操作系统上,常见的有VMware Workstation、Oracle Virtualbox
Linux虚拟化技术 - 图2

两种类型对性能都有损耗,生产环境中大多数使用的是原生型Hypervisor,宿主型的一半用于实验或测试环境中。

根据虚拟化实现技术的不同分为:全虚拟化和半虚拟化

全虚拟化:VMware ESXi 和KVM
虚拟机的操作系统和底层的硬件是完全隔离的。因其所有的虚机资源都是通过虚拟化模拟出来的,所以虚拟机的性能会有损耗。
半虚拟化:Hyper-V和XEN
修改虚拟机中的操作系统来集成一些虚拟化方面的代码,以减小虚拟化软件的负载。性能相比全虚拟化较好。但是因其要修改操作系统层面,用户会有感知,兼容性比较差。

KVM

KVM是一种基于Linux x86硬件平台等开源全虚拟化解决方案。需要CPU的虚拟化指令集的支持。如Intel的VT vmx,AMD的AMD-V svm。

想要在Linux系统中使用KVM,需要加载内核模块KVM。Intel架构使用kvm-intel.ko模块,amd使用kvm-amd.ko模块
kvm模块负责对虚拟机CPU和内存进行管理和调度,主要任务是初始化CPU硬件,是一个轻量级的Hpyervisor。

QEMU

一个纯软件的独立的全虚拟化解决方案,性能较低。可单独模拟出完整的虚拟机

KVM与QEMU

KVM只模拟CPU和内存,但是没法与外部进行交互,因此需要qemu这个工具跟用户进行交互。qemu通过kvm达到了硬件虚拟化的速度,而KVM通过qemu来模拟设备。
对于KVM来说,其匹配的用户空间工具并不仅仅只有QEMU,还有其他的,比如RedHat开发的libvirt、virsh、virt-manager等,QEMU并不是KVM的唯一选择。

QEMU-KVM

社区 fork 分支 qemu-kvm,把 CPU 和内存的替换成 kvm,而设备的模拟代码部分保留下来,从而实现虚拟化加速、提高性能。并在1.3版本之后合并进主干分支,因此 qemu + kvm 就组成了一个完整的虚拟化平台。