KVM 和 QEMU 之间的区别

KVM 和 QEMU 之间的区别

我已经阅读了KVM一段Qemu时间了。到目前为止,我对他们的工作有了清晰的了解。

KVM 支持硬件虚拟化,为客户操作系统提供接近原生的性能。另一方面,QEmu 模拟目标操作系统。

我感到困惑的是,这两者在什么层面上是协调的。就像

  1. 谁管理 RAM 和/或内存的共享?
  2. 谁调度 I/O 操作?

答案1

库姆

QEmu 本身就是一个完整且独立的软件。您可以使用它来模拟机器,它非常灵活且可移植。它主要通过一个特殊的“重新编译器”工作,该编译器将为给定处理器编写的二进制代码转换为另一个处理器(例如,在 PPC mac 上运行 MIPS 代码,或在 x86 PC 上运行 ARM)。

为了模拟更多的处理器,Qemu 还包括一长串外围设备模拟器:磁盘、网络、VGA、PCI、USB、串行/并行端口等。

酷睿

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

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

这比普通的 Qemu 快很多,因为大多数代码都没有改变,但仍然必须转换 ring0 代码(VM 内核中的大部分代码),因此性能仍然受到影响。

虚拟机

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 调度程序管理,从而保持代码简短并限制意外。

答案2

当它们协同工作时,KVM 负责仲裁对 CPU 和内存的访问,而 QEMU 负责模拟硬件资源(硬盘、视频、USB 等)。当它们单独工作时,QEMU 会同时模拟 CPU 和硬件。

答案3

库姆是一款处理器模拟虚拟化软件,支持多种虚拟设备(如 HDD、RAM、声音、以太网、USB、VGA 等)

虚拟机是一个内核模块,允许通过 CPU 核心主机直通无需虚拟化。它还允许通过 PCI 设备PCI-V1.0内核模块。

所有这些直通功能都可以通过IO管理单元(输入输出内存映射单元),它将实际的 DMA 地址映射到虚拟地址,以便直接访问,并带来裸机(本机)性能。IOMMU 是一种机制,部分是内核中的软件,部分是芯片组中的硬件,其特点是VT-D(虚拟机)AMD VI(支持向量机)。SRIOV是一种芯片组功能,它允许通过并行直接 IO 访问将一个 PCI 设备拆分为多个虚拟设备,且性能不会下降。

Libvirt是一个库,允许你使用python和其他编程语言来配置虚拟机。维尔什是一个在终端中工作的工具包,用于监视和配置虚拟机设置。虚拟管理器是类似 GUI 的 VMware 播放器,可替代 virsh,并且使用 libvirt。

Qemu-img是一个用于创建、转换、快照磁盘映像的命令行工具。qemu-nbd 简介也是一个 CLI 工具,允许通过 nbd 通过网络对虚拟磁盘进行原始 I/O 访问。 维蒂奥是磁盘、NIC(以太网)和视频的 iommu 访问驱动程序和方法名称。维吉尔OpenGL 是否支持 virtio VGA。Redhat 和 Fedora 在其网站上提供了适用于 Windows 和 Linux 的 virtio 驱动程序 ISO CD ROM 映像。

光学微滤膜是开放的虚拟机固件,为 qemu 虚拟机提供 UEFI 启动映像。香料是 qemu 虚拟机的非常快的 VNC 客户端。

你可以在 Ubuntu 或者任何 Debian 的终端中输入这些来开始操作:

sudo apt-get update
sudo apt-get install qemu-kvm libvirt-bin virt-manager ovmf
virt-manager 

经验使这些半概念术语的功能变得清晰,因为它可以回答“如果没有X?。

相关内容