qemu,kvm,qemu

50次阅读
没有评论

共计 2485 个字符,预计需要花费 7 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 qemu,kvm,qemu-kvm,xen,libvirt 的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

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

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

从存在形式看,KVM 是两个内核模块 kvm.ko 和 kvm_intel.ko(对 AMD 处理器来说,就是 kvm_amd.ko),这两个模块用来实现 CPU 的虚拟化。  如果要让用户在 KVM 上完成一个虚拟机相关的操作,显然需要用户空间的东西,同时还包括 IO 虚拟化,所以 KVM 的解决方案借鉴了 QEMU 的东西并做了一定的修改,形成了自己的 KVM 虚拟机工具集和 IO 虚拟化的支持,也就是所谓的 qemu-kvm.(KVM is a fork of QEMU, namely qemu-kvm)

Xen

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

QEMU

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

QEMU 本身可以不依赖于 KVM,但是如果有 KVM 的存在并且硬件 (处理器) 支持比如 Intel VT 功能,那么 QEMU 在对处理器虚拟化这一块可以利用 KVM 提供的功能来提升性能。

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 的关系。

QEMU 是个独立的虚拟化解决方案,从这个角度它并不依赖 KVM。而 KVM 是另一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器 (Intel VT, AMD SVM) 虚拟化特性的支持,换言之,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,所以它借用了 QEMU 的代码并加以精简,连同 KVM 一起构成了另一个独立的虚拟化解决方案,不妨称之为:KVM+QEMU. 

KVM 用户空间虚拟机管理工具有 kvm,kvm-img,kvm-nbd,kvm-ok 和 kvm_stat,实际上 kvm 就是一个指向 qemu-system-x86_64 的符号链接,kvm-img 则是指向 qemu-img 的符号链接。从适用的范围来讲,QEMU 虚拟化方案除了支持 x86 架构外,还支持其他很多架构,比如 qemu-system-m68k,qemu-system-mips64,qemu-system-ppc64,qemu-system-arm 等等。但是目前提到 KVM,一般指 x86 上基于 Intel VT 和 AMD SVM 的解决方案,虽然目前将 KVM 移植到 ARM, PPC 的工作正在进行中。

当然由于 redhat 已经开始支持 KVM,它认为 KVM+QEMU 的方案中用户空间虚拟机管理工具不太好使,或者通用性不强,所以 redhat 想了一个 libvirt 出来,一个用来管理虚拟机的 API 库,不只针对 KVM, 也可以管理 Xen 等方案下的虚拟机。

kvm-qemu 可执行程序像普通 Qemu 一样:分配 RAM, 加载代码,不同于重新编译或者调用 callingKQemu,它创建了一个线程(这个很重要);这个线程调用 KVM 内核模块去切换到用户模式,并且去执行 VM 代码。当遇到一个特权指令,它从新切换会 KVM 内核模块,该内核模块在需要的时候,像 Qemu 线程发信号去处理大部分的硬件仿真。

这个体系结构一个比较巧妙的一个地方就是客户代码被模拟在一个 posix 线程,这允许你使用通常 Linux 工具管理。如果你需要一个有 2 或者 4 核的虚拟机,kvm-qemu 创建 2 或者 4 个线程,每个线程调用 KVM 内核模块并开始执行。并发性(若果你有足够多的真实核)或者调度(如果你不管)是被通用的 Linux 调度器,这个使得 KVM 代码量十分的小。
当一起工作的时候,KVM 管理 CPU 和 MEM 的访问,QEMU 仿真硬件资源(硬盘,声卡,USB,等等)当 QEMU 单独运行时,QEMU 同时模拟 CPU 和硬件。

看完了这篇文章,相信你对“qemu,kvm,qemu-kvm,xen,libvirt 的区别有哪些”有了一定的了解,如果想了解更多相关知识,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计2485字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)