x86 / x64仮想化にはどのくらいのオーバーヘッドがありますか?


24

Intelハードウェア仮想化を使用するWin64ホストおよびLinux64ゲストの各操作に対して、x86 / x64仮想化(おそらくVirtualBox、おそらくVMWareを使用し、間違いなく準仮想化ではありません)のオーバーヘッドはどれくらいですか?

  • 純粋にCPUにバインドされたユーザーモードの64ビットコード

  • 純粋にCPUにバインドされたユーザーモードの32ビットコード

  • ハードドライブへのファイルI / O(主にスループットではなく、待ち時間が重要です)

  • ネットワークI / O

  • スレッド同期プリミティブ(ミューテックス、セマフォ、条件変数)

  • スレッドコンテキストスイッチ

  • アトミック操作(lockプレフィックスの使用、比較とスワップなど)

私は主にハードウェア支援のx64ケース(IntelとAMDの両方)に興味がありますが、非支援のバイナリ変換やx86(つまり32ビットのホストとゲスト)のケースについても聞いてみませんか。準仮想化には興味がありません。


(1)「x86」は32ビットを意味します。64ビットコードを実行することはできません。AMD64(x64とも呼ばれる)仮想化には、ハードウェア拡張機能が必要なため、さまざまな制限があります。(2)バイナリ変換によるx86仮想化(x86のみ)またはハードウェア支援仮想化(VT)を意味しますか?
スカイホーク

@Miles:質問を明確にしました。
dsimcha

回答:


26

私はあなたのような質問に対して単純で絶対的な答えがないことを発見しました。各仮想化ソリューションの動作は、特定のパフォーマンステストで異なります。また、ディスクI / Oスループットなどのテストは、さまざまなテスト(読み取り、書き込み、書き換えなど)に分割でき、結果はソリューションごとに、またシナリオごとに異なります。このため、1つのソリューションをディスクI / Oの最速として指定するのは簡単ではありません。これが、ディスクI / Oのオーバーヘッドのようなラベルに絶対的な答えがない理由です。

異なるベンチマークテスト間の関係を見つけようとすると、より複雑になります。私がテストしたソリューションはどれも、マイクロ操作テストで優れたパフォーマンスを発揮しませんでした。たとえば、VM内で「gettimeofday()」を1回呼び出すと、ハードウェアよりも平均で11.5倍のクロックサイクルがかかります。ハイパーバイザーは、実世界のアプリケーション向けに最適化されており、マイクロ操作ではうまく機能しません。これは、実際のアプリケーションとしてより適切なアプリケーションの問題ではない場合があります。つまり、1,000クロックサイクル未満で完了するアプリケーションはすべてマイクロ操作で使用します(2.6 GHz CPUの場合、1,000クロックサイクルは385ナノ秒、つまり3.85e-7秒で消費されます)。

x86アーキテクチャのデータセンター統合のための4つの主要なソリューションについて、広範なベンチマークテストを実施しました。VM内のパフォーマンスとハードウェアのパフォーマンスを比較して、ほぼ3000回のテストを行いました。VM内で測定された最大パフォーマンスとハードウェアで測定された最大パフォーマンスの差を「オーバーヘッド」と呼びました。

ソリューション:

  • VMWare ESXi 5
  • Microsoft Hyper-V Windows 2008 R2 SP1
  • Citrix XenServer 6
  • Red Hat Enterprise Virtualization 2.2

ゲストOS:

  • Microsoft Windows 2008 R2 64ビット
  • Red Hat Enterprise Linux 6.1 64ビット

テスト情報:

  • サーバー:8 GBのRAM、2つのIntel Xeon E5440 CPU、4つのギガビットイーサネットポートを備えた2つのSun Fire X4150
  • ディスク:ギガビットイーサネット上のiSCSIを介した6X 136GB SASディスク

ベンチマークソフトウェア:

  • CPUとメモリ:32ビットと64ビットの両方のLinpackベンチマーク。これはCPUとメモリを集中的に使用します。

  • ディスクI / Oとレイテンシー:Bonnie ++

  • ネットワークI / O:Netperf:TCP_STREAM、TCP_RR、TCP_CRR、UDP_RRおよびUDP_STREAM

  • マイクロ操作:rdtscbench:システムコール、プロセス間パイプ通信

平均は、パラメーターを使用して計算されます。

  • CPUおよびメモリ:AVERAGE(HPL32、HPL64)

  • ディスクI / O:AVERAGE(put_block、rewrite、get_block)

  • ネットワークI / O:AVERAGE(tcp_crr、tcp_rr、tcp_stream、udp_rr、udp_stream)

  • マイクロ操作AVERAGE(getpid()、sysconf()、gettimeofday()、malloc [1M]、malloc [1G]、2pipes []、simplemath [])

テストシナリオでは、メトリックを使用して、4つの仮想化ソリューションの結果の平均は次のとおりです。

VMレイヤーのオーバーヘッド、Linuxゲスト:

  • CPUおよびメモリ:14.36%

  • ネットワークI / O:24.46%

  • ディスクI / O:8.84%

  • 読み取りのディスク遅延:2.41倍遅い

  • マイクロ操作の実行時間:10.84倍遅い

VMレイヤーのオーバーヘッド、Windowsゲスト:

  • 32ビットと64ビットの両方のCPUおよびメモリの平均:13.06%

  • ネットワークI / O:35.27%

  • ディスクI / O:15.20%

これらの値は一般的なものであり、特定のケースのシナリオを反映していないことに注意してください。

記事全文をご覧ください:http : //petersenna.com/en/projects/81-performance-overhead-and-comparative-performance-of-4-virtualization-solutions


2
この記事は古くなっています
-dyasny

1
For a 2.6 GHz CPU, 1,000 clock cycles are spent in 23 milliseconds、1,000クロックサイクルにかかる秒数を取得するために、1,000を2,600,000で割っただけではいけないでしょうか。(これは23ミリ秒ではありません)
-dvdvorle

2
@氏。幸せです、あなたは正しいです。1000/2600000000 = 0.000000385 = 385ナノ秒で385ナノ秒を得ました。これに同意しますか?これを指摘してくれてありがとう。
ピーターセナ

@dyasny、更新されたバージョンでテストを繰り返すためのハードウェアを探しています。どこで見つけることができますか?
ピーターセナ

ハードウェアは店舗で簡単に見つけることができます
-dyasny

4

あなたの質問にはあまりにも多くの変数がありますが、私はそれを絞り込むことを試みることができます。VMware ESXを使用し、すべてを正しく行うと仮定しましょう-仮想化をサポートする最新のCPU、準仮想化ストレージとネットワークドライバーを備えたVMwareツール、十分なメモリ。ここで、このセットアップで単一の仮想マシンを実行すると仮定します。私の経験から、CPUにバインドされたワークロードの場合、CPU速度の約90%が必要です。ネットワーク速度についてはあまり説明できません。1Gbpsリンクを使用しており、問題なく飽和させることができるため、10Gbpsリンクとは異なる場合がありますが、いずれもありません。ストレージスループットはストレージのタイプに依存します。ローカルストレージではストレージスループットの約80%を取得できますが、1Gbps NFSの場合、ネットワークがボトルネックであるため、100%に近くなります。他の指標については語れない、

これらの数値は非常に近似値であり、負荷の種類、ハードウェア、ネットワークに大きく依存します。サーバーで複数のワークロードを実行すると、さらに曖昧になります。しかし、ここで言いたいことは、理想的な条件下ではネイティブパフォーマンスの90%に近づけることができるはずだということです。

また、私の経験からすると、高性能アプリケーションの場合のはるかに大きな問題は遅延であり、特にクライアントサーバーアプリケーションの場合に当てはまります。30以上のクライアントからリクエストを受け取り、短い計算を実行して結果を返す計算エンジンがあります。ベアメタルでは通常、CPUを100%にプッシュしますが、VMware上の同じサーバーは60-80%にしかCPUをロードできません。これは主に、要求/応答の処理の遅延が原因です。


経験から言えば、単一のVMで10GbEリンクを飽和させることは非常に難しいと言えます。VMWare FTを使用しました。これは、10 Gbpsを超える1 Gbpsリンクを簡単に飽和させることができ、飽和に近づきませんでした。
マークヘンダーソン

0

コンテキストスイッチングやアトミック操作などの基本的なプリミティブのパフォーマンスについては掘り下げていませんが、さまざまなハイパーバイザーで最近実施したブルートフォーステストの結果を次に示します。ほとんどの場合、CPUとRAMの帯域幅が制限されている場合、予想される内容を示す必要があります。

http://www.altechnative.net/2012/08/04/virtual-performance-part-1-vmware/


2
XenとKVMの情報を入手できたことは素晴らしいことですが、最も人気のある2つのハイパーバイザーについてはどうでしょうか。それらは完全に欠落しています。また、複数のタイプ2ハイパーバイザーが含まれているため、SysAdminが実稼働環境で使用することはありません。
クリスS

反対票。リンクが切れています。
ティムダンクリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.