私が知っているすべてのハイパーバイザーの仮想マシンは、追加の同時実行スレッドをスケジュールするために追加の仮想CPUを使用できます。
それは、物理マシンと仮想マシンの間の抽象化のレイヤーであり、説明したとおりに機能しないのです。VMは、物理マシンのコア数を認識しません。VMは、物理マシン上の物理CPU(またはコア)を「認識」しません。ハイパーバイザーはVMに仮想CPUの数を提供し、ゲストOSはそれらの仮想CPUを使用して追加の同時スレッドをスケジュールします...ハイパーバイザーが仮想マシンに渡す仮想CPUの総数は、物理CPUの数を超えることもあります。マシンのコア。
別の言い方をすると、仮想マシンは、単一のvCPUが割り当てられると、1つのCPUしか持たないかのようにスレッドをスケジュールします。基盤となる物理マシンにコアがいくつあるかは関係ありません。(ただし、物理マシンは、1つのスレッドクォンタムまたはタイムスライスに対して1つの物理コア上の1つのVMスレッドをスケジュールし、次に実行するようにスケジュールされているときに、別の物理コアで実行する場合があります。仮想マシンにはただし、仮想CPUが1つしかないため、一度に1つのスレッドしかスケジュールできないことがわかっています。
そして、ここで私たちの用語について非常に明確にしましょう。「コア」ではなく、vCPUまたは仮想CPUをVMに割り当てます。コア(単一の物理ソケットを共有する物理処理ユニットを意味すると私は想定します)はvCPUと等しくありません。それらの間には抽象化の層があります。VMに割り当てられているvCPUが1つだけの場合、一度に実行するようにスケジュールできるスレッドは1つだけです。そのため、VMは2 -4個の仮想CPUが割り当てられた状態でより高速に実行されます。これは、複数のスレッドを同時に実行するようにスケジュールできるようになったためです。
ただし、仮想CPUの数が多すぎると、同期などのオーバーヘッドのコストがますます高くなるため、ここでは確実に収益が減少するという法則があります。
Hyper-VとVMwareハイパーバイザーが仮想マシンスレッドの実行をスケジュールする方法にはわずかな違いがあり、物理リソースの「オーバーサブスクリプション」へのアプローチは異なりますが、これは最初から良い概念です。