アフィニティ機能とアンチアフィニティ機能を備えたvCPUの配布を管理し、ハイパースレッディングによる潜在的なパフォーマンス上の問題を緩和します。
仮想化を行う場合、基盤となるハードウェアの問題からVMを退避させることが理想的です。vCPUへのCPUの抽象化とvCPUのVMへの割り当てにおいて、VMパフォーマンスに悪影響を与えないように運用するべきです。理想的には、すべてのvCPUを完全に独立させ、動作させることです。
VMware ESXiなどのハイパーバイザーを使用すると、管理者はアフィニティ機能を使用して特定のVMに特定のvCPUを使用したり、アフィニティ機能を使用して特定のVMに特定のvCPUを使用しないようにできます。
vCPUアフィニティの重要性は、ハイパースレッディングプロセッサテクノロジの追加に追加に大きく関連しています。スレッディングは効果的に2番目の論理CPUを作成しますが、プロセッサのサブシステムの多くは共有されています。したがって、スレッド化は物理CPUの数を2倍にすることはありません。そうでなければアイドル状態になる可能性があるときにCPUをビジーに保つ手段にすぎません。これには、潜在的なパフォーマンス上のペナルティが伴います。同じコアの2つのスレッドが2つの異なるVMに割り当てられている場合、それらのVMはオンデマンドコンピューティングによりVMのいずれかまたは両方のパフォーマンスが低下する可能性があります。
たとえば、ハイパースレッドCPUコアを考えてみましょう。これにより、CPU0とCPU1 の2つの仮想CPUとして仮想化された2つの論理CPUが提供されます。第2のスレッドコアはCPU2とCPU3と表示されます。第3のスレッドコアはCPU4とCPU5などとなります。
CPU0を1つのVMに割り当てて、CPU¹を別のVMに割り当てることは、実際には2つの異なるワークロードを同じ物理CPUコアに配置することになります。これは、両方のVMがCPUに対して軽い処理を要求をしていると仮定すると、うまく動作します。ただし、一方または両方のVMがCPUに負荷をかけていると、物理CPUが負荷を処理できないため、ほかのVMのパフォーマンスが低下することがあります。
アフィニティおよびアンチアフィニティのアイデアは、管理者がvCPUの配布を管理して、このような潜在的な問題を軽減し、物理システム全体でVMのパフォーマンスを最適化することができます。前例では、管理者はアフィニティルールを適用して、最初のVMのCPU0(最初のコアの最初のスレッド)を実行できます。次に、第2のVMとの別のアフィニティルールを使用して、第2のコアの第1のスレッドであるCPU¹上で実行されないようにするか、そのVMがどこで実行されているかを気にしないでください。
アフィニティおよびアンチアフィニティの規則は必ずしも必要ではありません。ハイパースレッディングを通じてCPUコアを共有する場合、平均的な作業負荷の多くはうまく動作します。ルールは、クリティカルなワークロードや計算集約型のワークロードを最適化する場合にも有効です。