bio*_*om2 16 performance benchmarking kvm qemu virtual-machine
我在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)
Run Code Online (Sandbox Code Playgroud)
在qemu中运行时只需要6秒.
但是在qemu-kvm中运行需要89秒.
我一个接一个地运行基准测试,而不是并行测试.
我整晚都摸不着头脑,但仍然不知道为什么会这样.有人会给我一些提示吗?
Fam*_*eng 13
KVM使用qemu作为他的设备模拟器,任何设备操作都由用户空间QEMU程序模拟.当您写入0xB8000时,将运行图形显示,其中涉及访客从访客模式执行CPU"vmexit"并返回KVM模块,后者又将设备模拟请求发送到用户空间QEMU后端.
相比之下,除了通常的系统调用之外,没有KVM的QEMU在统一进程中完成所有工作,CPU上下文切换更少.同时,您的基准代码是一个简单的循环,只需要code block translation一次.与vmexitKVM案例中每次迭代的内核用户通信相比,这没有任何成本.
这应该是最可能的原因.
您的基准测试是 IO 密集型基准测试,并且 qemu 和 qemu-kvm 的所有 io 设备实际上都是相同的。在 qemu 的源代码中,可以在 hw/* 中找到它。
这说明 qemu-kvm 与 qemu 相比一定不是很快。不过,我对经济放缓没有具体的答案。对此我有以下解释,我认为它在很大程度上是正确的。
“qemu-kvm 模块使用 Linux 内核中的 kvm 内核模块。这会在 x86 客户模式下运行客户,这会导致每个特权指令陷入陷阱。相反,qemu 使用非常高效的 TCG,它将在第一次。我认为陷阱的高成本已经在你们的基准测试中体现出来了。” 但这并不适用于所有 io 设备。Apache 基准测试在 qemu-kvm 上运行得更好,因为该库会进行缓冲并使用最少数量的特权指令来执行 IO。