web-dev-qa-db-ja.com

なぜホストされているHyper-Vの「論理プロセッサの数」を増やすと、VMそのVMのパフォーマンスが上がるのですか?)

私の理解では、仮想マシン(Relative Weight is equal)プロセッサの等しいシェアを取得します。

VMに処理時間が与えられた場合、VMが使用する単一のコアを表示しているか、複数のコアを表示しているかは関係ありません。処理は関係なく、Hyper-Vホスト上のプロセッサのアレイから発生しますが、Number of logical processors特定のVMのHyper-Vで1から4に設定すると、パフォーマンスが大幅に向上します。

私の現在のセットアップの仕様はおおよそです:

  • Hyper-Vホストには、32 GBのRAM、24の論理プロセッサ(間違った単語?)、数個のTB=の領域があります。

  • VMには6 GBのRAM、1つまたは4つのコア、数百GBのスペースが割り当てられ、2008 R2が実行されます。

過去のHyper-Vセットアップでも同様のことが起こりました。

9
Blackjack00

私が知っているすべてのハイパーバイザーの仮想マシンは、追加の仮想CPUを使用して、追加の同時実行スレッドをスケジュールできます。

それが物理マシンと仮想マシンの間の抽象化のレイヤーであり、それがnotがあなたの記述した方法で機能するようにします。 VMは、物理マシンのコア数を認識していません。VMは、物理マシンの物理CPU(またはコア)を「認識」しません) 。ハイパーバイザーは、VMこれまでにいくつの仮想CPUを提供し、ゲストOSはそれらの仮想CPUを使用して追加の同時スレッドをスケジュールします...ハイパーバイザーが仮想に渡す仮想CPUの総数マシンは、マシンの物理CPU /コアの数を超えることさえできます。

別の言い方をすると、仮想マシンは、単一のvCPUが割り当てられている場合、CPUが1つしかないかのようにスレッドをスケジュールします。基盤となる物理マシンにコアがいくつあるかは関係ありません。 (ただし、物理マシンが1つのスレッドクォンタムまたはタイムスライスの1つの物理コア上の1つのVMスレッドをスケジュールし、次に別の物理コアでそれを実行する可能性があることに注意してください。実行するようにスケジュールされています。ただし、仮想マシンは何が起こっているのかまったくわかりません。仮想CPUが1つしかないため、一度に1つのスレッドしかスケジュールできないことを知っています。

そして、ここで私たちの用語について非常に明確にしましょう。 「コア」ではなく、vCPUまたは仮想CPUをVMに割り当てます。コア(単一の物理ソケットを共有する物理処理ユニットを意味すると私は想定します)は、vCPUとは異なります。それらの間には抽象化の層があります。 VMに割り当てられているvCPUが1つだけの場合、一度に実行するスレッドは1つしかスケジュールできません。そのため、VMそれに割り当てられた4つの仮想CPU-複数のスレッドを同時に実行するようにスケジュールできるようになったため。

ただし、仮想CPUの数が多すぎると、同期などのオーバーヘッドのコストがますます高くなるため、ここでは確実に収益が減少するという法則があります。

Hyper-VとVMwareハイパーバイザーが仮想マシンスレッドの実行をスケジュールする方法にはわずかな違いがあり、物理リソースの「オーバーサブスクリプション」へのアプローチは異なりますが、これは最初から良い概念です。

20
Ryan Ries

割り当てられる仮想CPUの量は重要です。 VMで実行されているソフトウェアは、VMにあること、およびホストがVMが表示されます。したがって、複数のCPUコアを利用できるソフトウェアを実行している場合、VMコアが1つだけ割り当てられている場合、ソフトウェアは1つのコアのみをスケジュールします。そのタスク、およびVMも同様に、一度に1つのホストコアのみを使用します。VMコアを追加すると、ソフトウェアはホストのCPUがVMに対してスケジュールする、より多くの並列タスク。

競合を起こさないように、VMに過剰な量を与えないように注意してください。1つのVMにホストよりも多くの仮想コアがある場合、VMは自身との競合、およびvmwareのようなスケジュールされたハイパーバイザーのギャングの場合、VMは何も実行できません(もちろん、overlococateのオプションは管理レイヤーによってブロックされます)。

3
dyasny