qemu vs qemu-kvm:一些性能测量

时间:2011-03-27 15:36:18

标签: performance virtual-machine benchmarking qemu kvm

我在qemu和qemu-kvm中进行了以下基准测试,其配置如下:

CPU: AMD 4400 process dual core with svm enabled, 2G RAM
Host OS: OpenSUSE 11.3 with latest Patch, running with kde4
Guest OS: FreeDos
Emulated Memory: 256M
Network: Nil
Language: Turbo C 2.0
Benchmark Program: Count from 0000000 to 9999999. Display the counter on the screen
     by direct accessing the screen memory (i.e. 0xb800:xxxx)

在qemu中运行时只需要6秒。

但是在qemu-kvm中运行需要89秒。

我一个接一个地运行基准测试,而不是并行。

我整晚都摸不着头脑,但仍然不知道为什么会这样。有人会给我一些提示吗?

3 个答案:

答案 0 :(得分:13)

KVM使用qemu作为他的设备模拟器,任何设备操作都由用户空间QEMU程序模拟。当您写入0xB8000时,将运行图形显示,其中涉及访客从访客模式执行CPU“vmexit”并返回KVM模块,后者又将设备模拟请求发送到用户空间QEMU后端。

相比之下,除了通常的系统调用之外,没有KVM的QEMU在统一进程中完成所有工作,CPU上下文切换更少。同时,您的基准代码是一个简单的循环,只需要code block translation一次。与vmexit和KVM案例中每次迭代的内核用户通信相比,这没有任何成本。

这应该是最可能的原因。

答案 1 :(得分:0)

您的基准测试是IO密集型基准测试,所有io设备实际上与qemu和qemu-kvm相同。在qemu的源代码中,这可以在hw /*.

中找到

这解释了qemu-kvm与qemu相比不能非常快。但是,我对减速没有特别的答案。我对此有以下解释,我认为它在很大程度上是正确的。

“qemu-kvm模块在linux内核中使用kvm内核模块。这在x86 guest模式下运行guest虚拟机,这会在每个特权指令上产生一个陷阱。相反,qemu使用一个非常有效的TCG来翻译它的指令我第一次看到了。我强烈想到,陷阱的高成本出现在你的基准测试中。“但并非所有io设备都是如此。 Apache基准测试在qemu-kvm上运行得更好,因为库执行缓冲并使用最少数量的特权指令来执行IO。

答案 2 :(得分:0)

原因是VMEXIT太多了。