2011-03-27 165 views
14

我進行了QEMU和QEMU的KVM以下基準,具有以下配置:QEMU VS 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秒。

我一個接一個地跑了基準,而不是平行。

我整晚都摸不着頭腦,但仍不知道爲什麼會發生這種情況。有人會給我一些提示嗎?

+0

這只是我的想法,guest OS是FreeDos。根據理論,qemu將給客戶操作系統的每條指令轉換爲主機操作系統使用TCG理解的指令。另一方面,使用kvm的qemu直接向主機OS發送指令並將其執行,因此理論上qemu和kvm必須更快。但我認爲這也取決於正在使用的客戶操作系統。 kvm可能會嘗試將指令直接發送到主機操作系統執行,但它不是,它正在通過TCG路由,就好像它是plan qemu命令一樣。請更新 – 2017-01-12 12:58:50

回答

0

您的基準測試是一個IO密集型基準測試,所有io設備對於qemu和qemu-kvm都是一樣的。在qemu的源代碼中,可以在hw/*中找到它。

這就解釋了qemu-kvm與qemu相比不能很快。不過,對於經濟放緩我沒有特別的答案。我對此有以下解釋,我認爲它在很大程度上是正確的。 「

」qemu-kvm模塊在linux內核中使用kvm內核模塊,它以x86訪客模式運行guest虛擬機,這會在每條特權指令上產生陷阱,相反,qemu使用非常高效的TCG來轉換指令它在第一次看到我認爲陷阱的高成本顯示在您的基準。「儘管如此,所有的io設備都不是這樣。 Apache基準測試在qemu-kvm上運行得更好,因爲該庫執行緩衝並使用最少數量的特權指令來執行IO。

11

KVM使用qemu作爲他的設備模擬器,任何設備操作都由用戶空間QEMU程序模擬。當你寫入0xB8000時,圖形顯示被操作,其中包括訪客在訪客模式下執行CPU`vmexit'並返回到KVM模塊,KVM模塊又將設備模擬請求發送到用戶空間QEMU後端。

相比之下,無KVM的QEMU除統一系統調用外,在統一進程中執行所有作業,CPU上下文切換更少。同時,你的基準測試代碼是一個簡單的循環,只需要一次就需要code block translation。與KVM情況下每次迭代的vmexit和內核用戶通信相比,這沒有任何成本。

這應該是最可能的原因。

0

VMEXIT發生的原因太多了。