KVM和QEMU之间的区别


138

我一直在阅读有关KVMQemu了一段时间。到目前为止,我对他们的工作有清晰的了解。

KVM支持硬件虚拟化,以为来宾操作系统提供接近本机的性能。另一方面,QEmu模拟目标操作系统。

我感到困惑的是,这两个坐标处于什么水平。喜欢

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

Answers:


194

Qemu

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

为了不仅仿真处理器,Qemu还提供了很多外围仿真器:磁盘,网络,VGA,PCI,USB,串行/并行端口等。

克木

在特定的情况下,源和目标都是相同的体系结构(例如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调度程序管理的,从而使代码变小且限制意外。


3
而对于thouse谁是我没有支持VT,坏消息CPU (当然,如果这可以被称为«新闻») - 的KQEMU不再Ubuntu的支持。没有该支持,KVM不能与CPU一起使用。
Hi-Angel


-2

QEMU较慢,KVM可以帮助QEMU实现非常快的硬件速度,从而为系统提供最佳性能。QEMU是虚拟机监控程序/仿真器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.