虚拟化类型

目录 [显示)]

全虚拟化(Full Virtualization)

全虚拟化也成为原始虚拟化技术,该模型使用虚拟机协调 guest 操作系统和原始硬件,VMM 在 guest 操作系统和裸硬件之间用于工作协调,一些受保护指令必须由 Hypervisor(虚拟机管理程序)来捕获处理。

openstack, kvm, qemu-kvm以及libvirt之间的关系 | 黄玮@CUC - 图1

图 1 全虚拟化模型

全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机,因为 Hypervisor 需要占用一些资源。

半虚拟化(Para Virtualization)

半虚拟化是另一种类似于全虚拟化的技术,它使用 Hypervisor 分享存取底层的硬件,但是它的 guest 操作系统集成了虚拟化方面的代码。该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作。

openstack, kvm, qemu-kvm以及libvirt之间的关系 | 黄玮@CUC - 图2

图 2 半虚拟化模型

半虚拟化需要 guest 操作系统做一些修改,使 guest 操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能。

虚拟化技术

KVM(Kernel-based Virtual Machine) 基于内核的虚拟机

KVM 是集成到 Linux 内核的 Hypervisor,是 X86 架构且硬件支持虚拟化技术(Intel VT 或 AMD-V)的 Linux 的全虚拟化解决方案。它是 Linux 的一个很小的模块,利用 Linux 做大量的事,如任务调度、内存管理与硬件设备交互等。

openstack, kvm, qemu-kvm以及libvirt之间的关系 | 黄玮@CUC - 图3

图 3 KVM 虚拟化平台架构

Xen

Xen 是第一类运行在裸机上的虚拟化管理程序 (Hypervisor)。它支持全虚拟化和半虚拟化, Xen 支持 hypervisor 和虚拟机互相通讯,而且提供在所有 Linux 版本上的免费产品,包括 Red Hat Enterprise Linux 和 SUSE Linux Enterprise Server。Xen 最重要的优势在于半虚拟化,此外未经修改的操作系统也可以直接在 xen 上运行 (如 Windows),能让虚拟机有效运行而不需要仿真,因此虚拟机能感知到 hypervisor,而不需要模拟虚拟硬件,从而能实现高性能。

openstack, kvm, qemu-kvm以及libvirt之间的关系 | 黄玮@CUC - 图4

图 4 Xen 虚拟化平台架构

QEMU

QEMU 是一套由 Fabrice Bellard 所编写的模拟处理器的自由软件。它与 Bochs,PearPC 近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由 kqemu 这个开源的加速器,QEMU 能模拟至接近真实电脑的速度。

KVM 和 QEMU 的关系

准确来说,KVM 是 Linux kernel 的一个模块。可以用命令 modprobe 去加载 KVM 模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有 KVM 模块是 远远不够的,因为用户无法直接控制内核模块去作事情, 你还必须有一个运行在用户空间的工具才行。这个用户空间的工具,kvm 开发者选择了已经成型的开源虚拟化软件 QEMU。说起来 QEMU 也是一个虚拟化软件。它的特点是可虚拟不同的 CPU。比如说在 x86 的 CPU 上可虚拟一个 Power 的 CPU,并可利用它编译出可运行在 Power 上的程序。KVM 使用了 QEMU 的一部分,并稍加改造,就成了可控制 KVM 的用户空间工具了。所以你会看到,官方提供的 KVM 下载有两大部分 (qemu 和 kvm) 三个文件(KVM 模块、QEMU 工具以及二者的合集)。也就是说,你可以只升级 KVM 模块,也可以只升级 QEMU 工具。这就是 KVM 和 QEMU 的关系。

openstack, kvm, qemu-kvm以及libvirt之间的关系 | 黄玮@CUC - 图5

图 5 KVM 和 QEMU 关系

openstack, kvm, qemu-kvm 以及 libvirt 之间的关系

KVM 是最底层的 hypervisor,它是用来模拟 CPU 的运行,它缺少了对 network 和周边 I/O 的支持,所以我们是没法直接用它的。

QEMU-KVM 就是一个完整的模拟器,它是构建基于 KVM 上面的,它提供了完整的网络和 I/O 支持。

Openstack 不会直接控制 qemu-kvm,它会用一个叫 libvirt 的库去间接控制 qemu-kvm。libvirt 提供了跨 VM 平台的功能,它可以控制除了 QEMU 之外的模拟器,包括 vmware, virtualbox, xen 等等。

所以为了 openstack 的跨 VM 性,所以 openstack 只会用 libvirt 而不直接用 qemu-kvm。libvirt 还提供了一些高级的功能,例如 pool/vol 管理。

openstack, kvm, qemu-kvm以及libvirt之间的关系 | 黄玮@CUC - 图6

参考文献