17

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秒かかります。

並行してではなく、ベンチマークを1つずつ実行しました。

私は一晩中頭をかいたが、それでもなぜこれが起こるのかわからない。誰かが私にいくつかのヒントをくれますか?

4

3 に答える 3

15

KVMはqemuをデバイスシミュレーターとして使用します。デバイスの操作はすべて、ユーザースペースのQEMUプログラムによってシミュレートされます。0xB8000に書き込むと、グラフィックディスプレイが操作され、ゲストがゲストモードからCPU「vmexit」を実行してKVMモジュールに戻り、KVMモジュールがデバイスシミュレーション要求をユーザースペースQEMUバックエンドに送信します。

対照的に、KVMなしのQEMUは、通常のシステムコールを除いて、すべてのジョブを統合プロセスで実行します。CPUコンテキストスイッチは少なくなります。一方、ベンチマークコードは、code block translation1回だけ必要な単純なループです。vmexitKVMの場合のすべての反復のカーネルとユーザーの通信と比較すると、コストはかかりません。

これが最も可能性の高い原因であるはずです。

于 2012-10-08T09:31:11.180 に答える
1

あなたのベンチマークは IO 集中型のベンチマークであり、すべての io デバイスは実際には qemu と qemu-kvm で同じです。qemu のソース コードでは、これは hw/* にあります。

これは、qemu-kvm が qemu と比較して非常に高速であってはならないことを説明しています。しかし、減速については特に答えはありません。これについては次の説明があり、大部分は正しいと思います。

「qemu-kvm モジュールは、Linux カーネルの kvm カーネル モジュールを使用します。これにより、ゲストが x86 ゲスト モードで実行され、すべての特権命令でトラップが発生します。逆に、qemu は非常に効率的な TCG を使用して、初めてです。トラップのコストの高さがベンチマークに現れていると思います。ただし、これはすべての io デバイスに当てはまるわけではありません。ライブラリがバッファリングを行い、IO を実行するために最小限の特権命令を使用するため、Apache ベンチマークは qemu-kvm でより適切に実行されます。

于 2012-02-15T11:32:53.343 に答える
0

その理由は、VMEXIT が多すぎるためです。

于 2013-08-12T03:43:02.547 に答える