performance - qemu 与 qemu-kvm : some performance measurements

标签 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 秒。

我逐一运行基准测试,而不是并行运行。

我整晚都抓耳挠腮,但还是不明白为什么会发生这种情况。有人能给我一些提示吗?

最佳答案

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

相比之下,QEMU w/o KVM 除了通常的系统调用之外,所有工作都在统一进程中完成,CPU 上下文切换更少。同时,您的基准测试代码是一个简单的循环,只需要代码块翻译一次。与 KVM 情况下每次迭代的 vmexit 和内核-用户通信相比,这不需要任何成本。

这应该是最可能的原因。

关于performance - qemu 与 qemu-kvm : some performance measurements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5450229/

相关文章:

objective-c - 向类中添加类别会影响性能吗

linux - Oracle virtual box 登录账号/用户不存在

testing - 如何一次对 Redis 的所有操作进行基准测试

c - C语言中的缓存性能(关于循环)

c++ - C++ 中 n 个排序数组的有效 union (集合与 vector )?

linux - 如何查找 Azure VM 的 FQDN

linux - 如何将未使用的内存归零以减少 VM 快照大小

java - 通过方法推送对象时是否会创建对象的副本?

c - 在 C 中测量耗时?

html - CSS 大小/性能?