各仮想マシンに CPU アフィニティ設定を指定することにより、仮想マシンの割り当てをマルチプロセッサ システム内の使用可能なプロセッサのサブセットに制限できます。この機能を使用することで、各仮想マシンを指定したアフィニティ セットのプロセッサに割り当てることができます。
CPU アフィニティは、仮想マシンのプロセッサへの配置の制約を指定します。これは、仮想マシンの仮想マシン ホストへの配置の制約を指定する、仮想マシン間または仮想マシンとホスト間のアフィニティ ルールによって作成された関係とは異なります。
ここでは、CPU という用語は、ハイパースレッド システム上の論理プロセッサを指し、また、非ハイパースレッド システム上のコアのことを指します。
仮想マシンの CPU アフィニティ設定は、その仮想マシンに関連付けられているすべての仮想 CPU と、その仮想マシンに関連付けられているその他のすべてのスレッド (ワールドとも呼ばれる) に適用されます。これらの仮想マシン スレッドは、マウス、キーボード、画面、CD-ROM、およびその他のレガシー デバイスのエミュレーションに必要な処理を実行します。
表示を多用するワークロードなど、一部のケースでは、仮想 CPU とその他の仮想マシン スレッドの間で大量の通信が発生することがあります。仮想マシンのアフィニティ設定によって、これらのその他のスレッドを仮想マシンの仮想 CPU と同時にスケジュール設定できない場合、パフォーマンスが低下する可能性があります。たとえば、ユニプロセッサ仮想マシンに 1 つの CPU がアフィニティ設定されている場合や、2 方向の SMP 仮想マシンに 2 つの CPU がアフィニティ設定されている場合などです。
最大のパフォーマンスを得るために、手動でアフィニティを設定する場合は、少なくとも 1 つの仮想マシン スレッドをその仮想 CPU と同時にスケジュール設定できるように、アフィニティ設定に少なくとも 1 つの物理 CPU を追加して含めておくことをお勧めします。たとえば、ユニプロセッサ仮想マシンに少なくとも 2 つの CPU をアフィニティ設定したり、2 方向の SMP 仮想マシンに少なくとも 3 つの CPU をアフィニティ設定します。
特定のプロセッサへの仮想マシンの割り当て
CPU アフィニティを使用すると、特定のプロセッサに仮想マシンを割り当てることができます。これにより、仮想マシンの割り当てをマルチプロセッサ システム内で使用可能な特定のプロセッサだけに制限できます。
手順
CPU アフィニティでの潜在的な問題
CPU アフィニティを使用する前に、いくつかの問題について検討する必要がある場合があります。
CPU アフィニティでの潜在的な問題には、次のようなものがあります。
- マルチプロセッサ システムの場合、ESXi システムは自動ロード バランシングを実行します。仮想マシン アフィニティを手動で指定しないようにすると、プロセッサ間の負荷を均衡させるためのスケジューラの機能が向上します。
- アフィニティは、仮想マシンに指定された予約とシェアを満たす ESXi ホストの機能を妨害する場合があります。
- CPU アドミッション コントロールはアフィニティを考慮しないので、手動のアフィニティ設定を持つ仮想マシンは、予約を完全に受け取るとはかぎりません。
手動のアフィニティ設定がない仮想マシンは、手動のアフィニティ設定がある仮想マシンから不都合な影響を受けません。
- あるホストから別のホストへ仮想マシンを移動する場合、新しいホストの持つプロセッサの数が異なる場合があるので、アフィニティが適用しなくなることがあります。
- NUMA スケジューラは、アフィニティを使用してすでに特定のプロセッサに割り当て済みの仮想マシンを管理できない場合があります。詳細については、『NUMA システムと ESXi の併用』を参照してください。
- アフィニティは、マルチコア プロセッサまたはハイパースレッド プロセッサ上の仮想マシンをスケジュール設定するホストの機能に影響を及ぼすため、そういったプロセッサで共有されるリソースを最大限に活用できます。