仮想化に関しては、物理コアと仮想コアの関係、特に並列処理を使用するアプリケーションにどのように影響するかを検討してきました。たとえば、VM シナリオで、物理コアが仮想コアよりも少ない場合、それが可能である場合、アプリケーションの並列処理にどのような影響または制限が課されるでしょうか? 私の環境では、物理アーキテクチャが何であるかについて開示されていないため、質問しています。シングル コアの物理マシンでホストされているデュアル コア VM にアプリケーションが存在する場合、並列化にはまだ多くの利点がありますか?
2 に答える
シングル コアの物理マシンでホストされているデュアル コア VM にアプリケーションが存在する場合、並列化にはまだ多くの利点がありますか?
いつも。
OS レベルの並列処理 (つまり、Linux パイプライン) は、実際のコアまたは仮想コアの数に関係なく、パフォーマンスを劇的に向上させます。
実際、大きな問題を単純にパイプラインに沿って多数の小さな問題に分割することでパフォーマンスが向上しないようにするには、かなり不自然な問題または非常にばかげたソリューションを作成する必要があります。
パイプライン化されたソリューションを手に入れ、それが仮想リソースの 100% を結び付けたら、測定できるものがあります。
論理リソースと物理リソースでさまざまなバリエーションを試してみてください。
ただし、利用可能なすべてのリソースを使い果たす OS レベルのパイプラインを用意した後でのみです。それまでは、パイプライン ソリューションを作成するだけの基本的な作業が必要です。
F# タグが含まれており、並列パフォーマンスに関心があるので、F# 非同期 IO を使用していると仮定します。したがって、スレッドはブロックされず、CPU バウンド タスク間でスワップするだけです。
この場合、仮想コアの数と同じ数のスレッドを持つことが理想的です (少なくとも、Windows 7 でホストされている Virtualbox の下で Ubuntu で F# を使用した私の実験に基づいています)。それよりも多くのスレッドを使用するとパフォーマンスがわずかに低下し、少ないとパフォーマンスが大幅に低下します。
また、物理コアよりも多くの仮想コアを使用すると、パフォーマンスが少し低下します。ただし、これを制御できない場合は、仮想コアごとにアクティブなワーカー スレッドがあることを確認してください。