質問: x86 / x64仮想化にはどのくらいのオーバーヘッドがありますか? x86/x64仮想化(おそらくvirtualbox、おそらくvmware、おそらく準仮想化ではない)のオーバーヘッドは、次の各操作で、intelハードウェア仮想化を使用するwin64ホストとlinux64ゲストにどのくらいのオーバーヘッドがありますか? 純粋にcpuにバインドされた、ユーザーモードの64ビットコード 純粋にcpuにバインドされた、ユーザーモードの32ビットコード ハードドライブへのファイルi/o(レイテンシではなく、スループットを重視) ネットワークi/o スレッド同期プリミティブ(ミューテックス、セマフォ、条件変数) スレッドコンテキストスイッチ アトミック操作(lock接頭辞を使用、比較およびスワップなど) 私は主にハードウェア支援のx64ケース(intelとamdの両方)に関心がありますが、支援なしのバイナリ変換とx86(つまり、32ビットのホストとゲスト)のケースについて聞いてもかまいません。私は準仮想化には興味がありません。
回答: 質問の変数が多すぎますが、絞り込んでみます。 vmware esxを使用して、すべてが正しく行われているとしましょう。仮想化をサポートする最新のcpu、準仮想化ストレージとネットワークドライバーを備えたvmwareツール、大量のメモリ。ここで、このセットアップで単一の仮想マシンを実行するとします。私の経験から、cpuにバインドされたワークロードのcpu速度は最大90%になるはずです。 1gbpsリンクを使用しており、問題なく飽和できるため、ネットワーク速度についてはあまり説明できません。10gbpsリンクとは異なる場合がありますが、それらはありません。ストレージスループットはストレージのタイプに依存します。ローカルストレージでストレージスループットの約80%を得ることができますが、1gbps nfsの場合、ネットワークがここでボトルネックになっているため、100%に近くなります。他の指標については説明できません。独自のコードで実験する必要があります。これらの数値は非常に概算であり、負荷タイプ、ハードウェア、ネットワークに大きく依存します。サーバーで複数のワークロードを実行すると、さらにあいまいになります。しかし、ここで私が言っているのは、理想的な条件下では、ネイティブパフォーマンスの90%に近づくことができるということです。また、私の経験から、高性能アプリケーションのはるかに大きな問題はレイテンシであり、特にクライアントサーバーアプリケーションに当てはまります。 30以上のクライアントからリクエストを受け取り、短い計算を実行して結果を返す計算エンジンがあります。ベアメタルでは通常、cpuを100%にプッシュしますが、vmware上の同じサーバーはcpuを60〜80%までしかロードできません。これは主に、要求/応答の処理における待ち時間が原因です。