12.2. NUMA 対応のスケジューリングについて
レイテンシーに敏感なワークロードや高性能なワークロードを効率的に処理するには、NUMA 対応スケジューリングを使用してください。この機能は、CPU、メモリー、デバイスなどのクラスターコンピュートリソースを同じ NUMA ゾーンに整列させることで、リソース効率を最適化し、コンピュートノードあたりの Pod 密度を向上させます。
Node Tuning Operator のパフォーマンスプロファイルを NUMA 対応スケジューリングと統合することで、CPU アフィニティーをさらに設定し、レイテンシーに敏感なワークロードのパフォーマンスを最適化できます。
デフォルトの OpenShift Container Platform Pod スケジューラーのスケジューリングロジックは、個々の NUMA ゾーンではなく、コンピュートノード全体の利用可能なリソースを考慮します。kubelet トポロジーマネージャーで最も制限的なリソースアライメントが要求された場合、Pod をノードに許可するときにエラー状態が発生する可能性があります。
逆に、最も制限的なリソース調整が要求されていない場合、Pod は適切なリソース調整なしでノードに許可され、パフォーマンスが低下したり予測不能になったりする可能性があります。たとえば、Pod スケジューラーが Pod の要求されたリソースが利用可能かどうか把握せずに保証された Pod ワークロードに対して次善のスケジューリング決定を行うと、Topology Affinity Error ステータスを伴う Pod 作成の暴走が発生する可能性があります。スケジュールの不一致の決定により、Pod の起動が無期限に遅延する可能性があります。また、クラスターの状態とリソースの割り当てによっては、Pod のスケジューリングの決定が適切でないと、起動の試行が失敗するためにクラスターに余分な負荷がかかる可能性があります。
NUMA Resources Operator は、カスタム NUMA リソースのセカンダリースケジューラーおよびその他のリソースをデプロイして、デフォルトの OpenShift Container Platform Pod スケジューラーの欠点を軽減します。次の図は、NUMA 対応 Pod スケジューリングの俯瞰的な概要を示しています。
図12.1 NUMA 対応スケジューリングの概要
- NodeResourceTopology API
-
NodeResourceTopologyAPI は、各コンピュートノードで使用可能な NUMA ゾーンリソースを記述します。 - NUMA 対応スケジューラー
-
NUMA 対応のセカンダリースケジューラーは、利用可能な NUMA ゾーンに関する情報を
NodeResourceTopologyAPI から受け取り、最適に処理できるノードで高パフォーマンスのワークロードをスケジュールします。 - ノードトポロジーエクスポーター
-
ノードトポロジーエクスポーターは、各コンピュートノードで使用可能な NUMA ゾーンリソースを
NodeResourceTopologyAPI に公開します。ノードトポロジーエクスポーターデーモンは、PodResourcesAPI を使用して、kubelet からのリソース割り当てを追跡します。 - PodResources API
-
PodResourcesAPI は各ノードに対してローカルであり、リソーストポロジーと利用可能なリソースを kubelet に公開します。
PodResources API の List エンドポイントは、特定のコンテナーに割り当てられた排他的な CPU を公開します。API は、共有プールに属する CPU は公開しません。
GetAllocatableResources エンドポイントは、ノード上で使用できる割り当て可能なリソースを公開します。