web-dev-qa-db-ja.com

KVMおよび仮想CPUから物理CPUへのマッピング

私は仮想化パーティーの比較的遅い参加者なので、これが明白な質問のように思われる場合は、あなたを許さなければなりません。

12コアを使用できるサーバーがある場合、各KVMゲストは12コアすべてにアクセスできますか?KVMはLinuxスケジューラーを使用しますが、ここで、「次に何が起こるか」についての私の理解が終わります。

私が尋ねる理由は、KVMゲスト(アップグレードを容易にするための分離の目的))で実行する予定の10個ほどの個別のタスクは、シングルコアを100%使用しないことです。 、そのため、それに基づいて各ゲストに1つの仮想CPUを割り当てる必要があるのは無駄に思われます。「フル」のアイドル状態のサーバーが表示されるため、最初からコアがなくなります。

別の言い方をすると、上記の説明を前提として、1つの仮想CPUは実際には処理能力の点で12の物理コアに相当しますか?それともそれはどのように機能しないのですか?

どうもありがとう

スティーブ

10
Steve

仮想CPUは1つの物理コアに相当しますが、VM=が何かを処理しようとすると、その時点でたまたま利用可能な任意のコアで実行される可能性があります。スケジューラはこれを処理します。およびVMはそれを認識していません。複数のvCPUをVMに割り当てることにより、複数のコアで同時に実行できます。

コアは必要に応じてすべてのVM間で共有されるため、4コアのシステムと、それぞれに2つのvCPUが割り当てられた10個のVMを実行できます。 VMは、スケジューラによって決定されるように、システムのすべてのコアを非常に効率的に共有します。これは仮想化の主な利点の1つです。サブスクライブされていないリソースを最大限に活用して、複数のOSインスタンスに電力を供給します。

VMがビジー状態でCPU時間を争わなければならない場合、結果として、VMはCPU時間を待たなければならない場合があります。繰り返しますが、これはVMに対して透過的であり、スケジューラによって処理されます。

私はKVMに精通していませんが、上記のすべてはほとんどの仮想化システムの一般的な動作です。

8
Chris Thorpe

仮想CPUは、qemu-kvmプロセスのスレッドです。 qemu-kvmはもちろんマルチスレッドです。
プロセスを特定のCPUに固定しない限り、システムスケジューラは使用可能なコアからスレッドにCPU時間を割り当てます。つまり、特定のコアに特に固定されていない限り、vCPUは物理コアからCPUサイクルを取得することになります。 )

3
dyasny

どのvCPUがあなたに割り当てられているかを確認することをお勧めしますVM彼らはあなたに最高のパフォーマンスを提供します。また、ワークロード、つまりCPUバウンドまたはI/Oバウンドを確認すると、無料のベンチマークツールがたくさんあります。パフォーマンスを確認するには、Apache bechmark for IO bound operation and John the Ripper for CPU bound operation。どのvCPU割り当てに準拠したら、VMその後、他のVMを分散または構成できます。vCPUを処理しなかったため、パフォーマンスに悪影響があるためです。

たとえば、4コアのホストがあり、1つのVMを実行してそれに1つのvCPUを割り当てたい場合、4つのコアの1つだけを使用するため、そのパフォーマンスは最低になります。コアと残りの3コアは同時に利用されません。仮想マシンモニター(VMM)またはハイパーバイザーはVMの内部負荷を認識しないためです。この場合、4つのvcpuを割り当てると、最大のスループットが得られますワークロードがマルチスレッドの場合、ホストのすべてのコアが同時に使用されます。コアを1つ増やすと、つまりvCPUの割り当てを4を超えて使用できるようになると、パフォーマンスが低下します。 virtual VMであり、VMのいずれかが他のサーバーに移行されるか、オフになる場合、それでもすべてのコアが使用され、それ以外の場合は無駄になります。そうでない場合は、割り当て超過を設定します。

0
Hafiz ur Rahman