一段时间以来,我一直在阅读有关KVMQemu的信息。到目前为止,我对它们的功能已有清晰的了解。

KVM支持硬件虚拟化,以为Guest Operating System提供几乎本机的性能。另一方面,QEmu模拟目标操作系统。

我感到困惑的是这两个坐标处于什么级别。 Like


谁负责管理RAM和/或内存的共享?
谁安排I / O操作?


#1 楼

Qemu:

QEmu是一个完整的独立软件。您使用它来模拟机器,它非常灵活且可移植。主要是由一个特殊的“重新编译器”工作,该编译器将为给定处理器编写的二进制代码转换为另一个(例如,在PPC mac上运行MIPS代码,或在x86 PC上运行ARM)。 Qemu不仅可以模拟处理器,还可以提供大量的外设模拟器:磁盘,网络,VGA,PCI,USB,串行/并行端口等。

KQemu:

在特定的情况下,源和目标都是相同的体系结构(例如x86在x86上的常见情况),它仍然必须解析代码以删除任何“特权指令”,并用上下文切换替换它们。为了使其在x86 Linux上尽可能高效,有一个称为KQemu的内核模块可以处理此问题。

作为内核模块,KQemu能够不变地执行大多数代码,仅替换最低级别的ring0。 -仅说明。在这种情况下,用户空间Qemu仍会为仿真机分配所有RAM,并加载代码。不同之处在于,它无需重新编译代码,而是调用KQemu进行扫描/修补/执行。所有外围硬件仿真都在Qemu中完成。

这比普通Qemu快得多,因为大多数代码未更改,但仍必须转换ring0代码(VM内核中的大多数代码),因此性能仍然会受到影响。

KVM:

KVM有两点:首先,它是Linux内核模块(现已包含在主线中),可将处理器切换到新的“客人”状态。来宾状态具有其自己的一组环状态,但是特权ring0指令回退到系统管理程序代码。由于这是一种新的处理器执行模式,因此无需以任何方式修改代码。

除了处理器状态切换外,内核模块还处理仿真的一些低级部分,例如MMU寄存器(用于处理VM)和PCI仿真的硬件的某些部分。

第二, KVM是Qemu可执行文件的分支。两个团队都在积极工作,以尽量减少差异,并且在减少差异方面取得了进步。最终,目标是Qemu应该可以在任何地方工作,并且如果KVM内核模块可用,则可以自动使用它。但是在可预见的未来,Qemu团队专注于硬件仿真和可移植性,而KVM团队则专注于内核模块(有时将仿真的一小部分移到那里,如果能提高性能的话),并与其余用户空间代码交互。

kvm-qemu可执行文件的工作方式与普通Qemu相同:分配RAM,加载代码,而不是重新编译或调用KQemu,而是生成线程(这很重要)。该线程调用KVM内核模块以切换到访客模式,然后继续执行VM代码。根据特权指令,它切换回KVM内核模块,必要时,该模块会发信号通知Qemu线程以处理大多数硬件仿真。来宾代码在posix线程中仿真,您可以使用普通的Linux工具进行管理。如果要使用2个或4个内核的VM,则kvm-qemu创建2个或4个线程,它们中的每一个都调用KVM内核模块以开始执行。并发(如果您有足够的实际核心)或调度(如果没有)则由普通的Linux调度程序管理,以使代码小巧并限制意外。

评论


对于像我这样不具备VT支持CPU的thouse来说,这是个坏消息(好吧,如果可以将其称为“新闻”),那么Ubuntu将不再支持KQEMU。没有该支持,KVM不能与CPU一起使用。

– Hi-Angel
15-10-27在15:02



#2 楼

一起工作时,KVM会仲裁对CPU和内存的访问,而QEMU会仿真硬件资源(硬盘,视频,USB等)。单独工作时,QEMU会仿真CPU和硬件。

评论


@Javier的答案很详细,当然应该被接受,但是您的答案使我用了几句话就完全符合了我需要知道的内容,因此+1并表示感谢。

–Bill The Ape
15年1月7日,下午2:53

#3 楼

Qemu是一种处理器仿真虚拟化软件,具有许多虚拟设备支持,例如hdd,mb,ram,snd,eth,usb,vga ... KVM是内核模块,它允许通过主机直通通过cpu内核而无需虚拟化它们。它还允许通过vfio-pci内核模块通过pci设备。所有这些都可以通过IOMMU(输入输出存储器映射单元)实现,该模块将实际DMA地址映射到虚拟地址,因此直接访问成为可能,并带来了裸机(本机)性能。 IOMMU是一种机制,既是内核中的部分软件,又是芯片组中的部分硬件,被称为VT-D(vmx)AMD-VI(svm)。 SR-IOV是一种芯片组功能,可以通过并行化的直接IO访问将一个pci设备拆分为多个虚拟设备,而不会降低性能。
Libvirt是一个库,允许您使用python和其他编程语言来配置虚拟机。 Virsh是一个工具箱,可在终端中工作以监视和配置虚拟机设置。 Virt-manager是类似于virsh的gui的vmware播放器。
Qemu-img是cli工具,用于创建,转换,快照磁盘映像。 Qemu-nbd也是一个cli工具,它允许通过nbd通过网络对虚拟磁盘进行原始I / O访问。
Virto是iommu访问驱动程序,是磁盘,nics(以太网)和视频的方法名称。 Virgil是opengl支持virtio vga。 Redhat和Fedora在其网站上为Windows和Linux提供了virtio驱动程序iso cd rom映像。
OVMF是开放式虚拟机固件,为qemu虚拟机提供UEFI引导映像。 Spice是用于qemu虚拟机的非常快的vnc客户端。
您可以通过在ubuntu或任何debian的终端中输入这些来开始摆弄:
sudo apt-get update
sudo apt-get install qemu-kvm libvirtd virt-manager ovmf
virt-manager 

经验使这些半功能的功能更加清晰概念性术语,介绍了对问题“没有X不可能发生的事情”的答案的实现。