web-dev-qa-db-ja.com

vCPUはCPUとどのように連携しますか? (CPUのコアよりも多くのコアを持つVM)

VM 24 vCPUを搭載したvSphere 6.5で実行しています。サーバーには22コアを備えた2つの物理CPU(xeon e5-2699 v4)があり、ハイパースレッディングが有効になっています。

物理CPUでvcpuがどの程度正確に実行されていますか? 1つの物理CPUで実行できるようにvcpuを22に減らすか、vSphereがこの場合は複数の物理CPUを使用することもできますか?

3
user3235860

単一のVMには、使用可能な論理物理コアよりも多くの仮想CPUがあってはなりません。

ハイパースレッディングを有効にすると、物理コアは44になり、これで問題ありません。ただし、これは、そのホストで実行されているVMの数に大きく依存します。注意すべき点の1つは、ESXiサーバーのCPUスケジューラがどのように機能するかです。 CPUサイクルごとに、VMの各仮想CPUで使用可能な物理コアが存在するようになるまで常に待機します。したがって、あなたのケースでは、CPUサイクルが処理される前に、22の物理コアが利用可能になるまで常に待機します。そのホスト上にさらに多くのVMがある場合、CPUの準備時間が長くなり、VMが非常に遅くなる可能性があります。

個人的には、vCPUの数を常に8以下に保つようにしています。可能であれば、VMをスケールアップするよりもスケールアウトしてください。

もう1つの考慮事項:SpectreおよびMeltdown攻撃に対する現在の軽減策の状況では、ハイパースレッディングを無効にすることをお勧めします。これにより、攻撃ベクトルが減少するためです。ハイパースレッディングを無効にすると、構成はおそらく使用できなくなります。

1

1)ハイパースレッドコアは実際のコアではないため、そのようにカウントしないでください。見積もりはさまざまですが、ハイパースレッディングを有効にすると、vSphereのパフォーマンスが10〜30%低くなることがわかりました。

2)より多くのvCPUをVMに割り当てることは、特に数値が大きい場合は常に慎重に検討する必要があります。その理由(大幅に簡略化されている)は、リソーススケジューラが、すべてのコアを同時に実行するのに十分なコアが存在するタイムスロットを見つける必要があるためです。したがって、たとえば10コアを備えた単純化された超非現実的な例のホストと、2つのvCPUを備えた10個のVMでは、5つのVMが半分の時間待機(別名:停止)し、5つのVMが実行され、各状態が交互になります。すべてのVMがCPU時間を取得しているため、これは問題ありません。次に、10個のvCPUを搭載した11番目のVMを紹介します。突然、大きなVMが処理を実行している間に10個のVMが待機し、そのうちの5個が実行され、次に5個が実行されます。これで、VMは50%ではなく33%の時間実行されます。複雑な環境では、特にVMが実際にすべてのvCPUを使用できるものを実行しない場合は、比較的大量のvCPUを割り当てるとパフォーマンスが低下する可能性があります。

3)私の個人的なベストプラクティスは、単一のプロセッサで論理コアの半分以上のVMを決して与えないことです。これは通常、Xeonプロセッサでは通常、かなり正気な数です。これにより、HTの「コア」に過度に「依存」する問題が回避され、また、VMが単一のプロセッサに適合し、スケジューラーが使いやすくなります。

NUMAノードの概念も考慮する必要があります。ホストの単一のプロセッサが提供できるよりもVM多くのvCPUを提供し始めると、基本的にvSphereにVM 2つのNUMAノード間。すべてのメモリがどちらかのプロセッサに対してローカルになるわけではないため、メモリアクセスが遅くなります。

VSphereがVMリソースをスケジュールする方法には、もっと多くの魔法があります。上記で書いたものは非常に単純化されていますが、これらは、ほぼ10年間私に役立つガイドラインです。

0
Stuggi

単一のVMに、サーバーにある物理コアよりも多くのvCPUを割り当てたいと思うような状況は考えられません。

ワークロードを現在のVM=構成でベンチマークし、vCPUの数を徐々に減らしていくとどうなるかを確認します。ワークロードの実行速度とホスト/の実際のCPU使用率の両方に注意してください。ゲストOSではなくハイパーバイザーの視点から見たVM。

通常、VMを設定するときは、かなり少ない数のvCPUから始めて、パフォーマンスの向上がフラットになるまで作業を進めることが有益です。この原則には例外がありますが、多くのワークロードでは、必ずしも偶数のvCPUに固執する必要はありません。繰り返しになりますが、適切なテスト実行は、アプリケーションがその環境をどのように処理するかを示す必要があります。

0
Mikael H

VMwareの最大値( https://configmax.vmware.com/ )のとおり、物理コアごとに32個のvCPUを使用できますが、ベストプラクティスに従って、実際よりも多くのコアを割り当てることはできません。

ただし、ワークロードとニーズに応じて制限、予約、優先順位を付けることができることに注意してください。

同じトピックについて投稿された別の回答 here を読むことができます。

0
Sir Lou