仮想化された設定で、数値計算にどのようなパフォーマンスヒットが発生するのでしょうか。より具体的には、かなり高速なx86_64マルチコアマシンで、ネイティブのLinuxではなく仮想化されたWindowsOSでCPUバウンドC++コードを実行すると、どのようなパフォーマンスの低下が予想されますか?
必要に応じて精度を追加できれば幸いですが、仮想化についてあまり詳しくないため、どの情報が関連しているかわかりません。
仮想化された設定で、数値計算にどのようなパフォーマンスヒットが発生するのでしょうか。より具体的には、かなり高速なx86_64マルチコアマシンで、ネイティブのLinuxではなく仮想化されたWindowsOSでCPUバウンドC++コードを実行すると、どのようなパフォーマンスの低下が予想されますか?
必要に応じて精度を追加できれば幸いですが、仮想化についてあまり詳しくないため、どの情報が関連しているかわかりません。
プロセスは、順次実行される命令のストリームであるスレッドの束にすぎません。最新の仮想化ソリューションでは、CPUに関する限り、ホストプロセスとゲストプロセスは一緒に実行され、後者のI/Oがトラップされて仮想化されているという点でのみ異なります。メモリも仮想化されますが、それはハードウェアMMUで多かれ少なかれ発生します。ゲスト命令はCPUによって直接実行されます。そうでない場合、仮想化ではなくエミュレーションになり、仮想化されたリソースにアクセスしない限り、ホスト命令と同じ速度で実行されます。結局のところ、それはすべて、CPUが実行中のプロセスの数の増加にどれだけうまく対処できるかにかかっています。
OSの複数のコピーの外観を与えるためにプロセススペースを分割するSolarisのゾーンのような軽量の仮想化ソリューションがありますが、それはすべて単一のOSカーネルの傘下で行われます。
純粋な計算コードのパフォーマンスへの影響は非常に小さく、多くの場合1〜2%未満です。キャッチは、実際にはすべてのプログラムがデータを読み書きし、計算コードは通常多くのデータを読み書きするということです。仮想化I/Oは通常、Intel VT-*やAMD-Vなどのソリューションを使用した場合でも、直接I/Oよりもはるかに低速です。
正確な数値は、特定のハードウェアに大きく依存します。
ここでの私の元の投稿は答えではなかったという@MitchWheatの議論の余地のない主張に導かれ、これを答えとして書き直そうとします。
私は主にエネルギー部門のHPCに取り組んでいます。私の科学者の同僚が実行する計算のいくつかは、O(10 ^ 5)CPU時間かかります。近い将来、O(10 ^ 6)CPU時間のジョブについて真剣に考えています。
コードからパフォーマンスの最後の一滴を絞り出すことで十分な報酬を得ています。いくつかのプログラムの実行時間を1%短縮できれば、良い一日の仕事だったと思います。そのようなパフォーマンスの向上を得るのに1か月かかることもありますが、確かに遅いかもしれませんが、それでも科学者にとっては費用対効果が高くなります。
したがって、最新かつ最高のデータセンターソフトウェア(仮想化は1つの側面です)を提供する優秀な営業担当者が、私のコードを250,00dwtのタンカーからのアンカーチェーンの山に束縛するだけであると、私は震えます(比喩でした)。
私は質問を注意深く読み、OPが仮想化が役立つことを提案していないことを理解し、実践者の視点を提供しています。それでもコメントが多すぎる場合は、SOのことを行い、投票して締めくくります。気分を害することはないと約束します。